Skip to content

Commit

Permalink
Drivers: hv: vmbus: Fix rescind handling in uio_hv_generic
Browse files Browse the repository at this point in the history
commit 6fd2894 upstream.

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: [email protected]
Fixes: ca3cda6 ("uio_hv_generic: add rescind support")
Signed-off-by: Naman Jain <[email protected]>
Reviewed-by: Saurabh Sengar <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
Naman Jain authored and gregkh committed Sep 12, 2024
1 parent de6946b commit 6ed4574
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 0 deletions.
1 change: 1 addition & 0 deletions drivers/hv/vmbus_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -1962,6 +1962,7 @@ void vmbus_device_unregister(struct hv_device *device_obj)
*/
device_unregister(&device_obj->device);
}
EXPORT_SYMBOL_GPL(vmbus_device_unregister);

#ifdef CONFIG_ACPI
/*
Expand Down
8 changes: 8 additions & 0 deletions drivers/uio/uio_hv_generic.c
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,14 @@ static void hv_uio_rescind(struct vmbus_channel *channel)

/* Wake up reader */
uio_event_notify(&pdata->info);

/*
* With rescind callback registered, rescind path will not unregister the device
* from vmbus when the primary channel is rescinded.
* Without it, rescind handling is incomplete and next onoffer msg does not come.
* Unregister the device from vmbus here.
*/
vmbus_device_unregister(channel->device_obj);
}

/* Sysfs API to allow mmap of the ring buffers
Expand Down

0 comments on commit 6ed4574

Please sign in to comment.