Skip to content

Commit 6fd2894

Browse files
Naman Jaingregkh
authored andcommitted
Drivers: hv: vmbus: Fix rescind handling in uio_hv_generic
Rescind offer handling relies on rescind callbacks for some of the resources cleanup, if they are registered. It does not unregister vmbus device for the primary channel closure, when callback is registered. Without it, next onoffer does not come, rescind flag remains set and device goes to unusable state. Add logic to unregister vmbus for the primary channel in rescind callback to ensure channel removal and relid release, and to ensure that next onoffer can be received and handled properly. Cc: stable@vger.kernel.org Fixes: ca3cda6 ("uio_hv_generic: add rescind support") Signed-off-by: Naman Jain <namjain@linux.microsoft.com> Reviewed-by: Saurabh Sengar <ssengar@linux.microsoft.com> Link: https://lore.kernel.org/r/20240829071312.1595-3-namjain@linux.microsoft.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent fb1adbd commit 6fd2894

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

drivers/hv/vmbus_drv.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1952,6 +1952,7 @@ void vmbus_device_unregister(struct hv_device *device_obj)
19521952
*/
19531953
device_unregister(&device_obj->device);
19541954
}
1955+
EXPORT_SYMBOL_GPL(vmbus_device_unregister);
19551956

19561957
#ifdef CONFIG_ACPI
19571958
/*

drivers/uio/uio_hv_generic.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,14 @@ static void hv_uio_rescind(struct vmbus_channel *channel)
121121

122122
/* Wake up reader */
123123
uio_event_notify(&pdata->info);
124+
125+
/*
126+
* With rescind callback registered, rescind path will not unregister the device
127+
* from vmbus when the primary channel is rescinded.
128+
* Without it, rescind handling is incomplete and next onoffer msg does not come.
129+
* Unregister the device from vmbus here.
130+
*/
131+
vmbus_device_unregister(channel->device_obj);
124132
}
125133

126134
/* Sysfs API to allow mmap of the ring buffers

0 commit comments

Comments
 (0)