Commit e8c4bd6c authored by Saurabh Sengar's avatar Saurabh Sengar Committed by Greg Kroah-Hartman
Browse files

Drivers: hv: vmbus: Add utility function for querying ring size



Add a function to query for the preferred ring buffer size of VMBus
device. This will allow the drivers (eg. UIO) to allocate the most
optimized ring buffer size for devices.

Signed-off-by: default avatarSaurabh Sengar <ssengar@linux.microsoft.com>
Reviewed-by: default avatarLong Li <longli@microsoft.com>
Link: https://lore.kernel.org/r/1711788723-8593-2-git-send-email-ssengar@linux.microsoft.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent a36b6977
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -120,7 +120,9 @@ const struct vmbus_device vmbus_devs[] = {
	},

	/* File copy */
	{ .dev_type = HV_FCOPY,
	/* fcopy always uses 16KB ring buffer size and is working well for last many years */
	{ .pref_ring_size = 0x4000,
	  .dev_type = HV_FCOPY,
	  HV_FCOPY_GUID,
	  .perf_device = false,
	  .allowed_in_isolated = false,
@@ -140,12 +142,19 @@ const struct vmbus_device vmbus_devs[] = {
	  .allowed_in_isolated = false,
	},

	/* Unknown GUID */
	{ .dev_type = HV_UNKNOWN,
	/*
	 * Unknown GUID
	 * 64 KB ring buffer + 4 KB header should be sufficient size for any Hyper-V device apart
	 * from HV_NIC and HV_SCSI. This case avoid the fallback for unknown devices to allocate
	 * much bigger (2 MB) of ring size.
	 */
	{ .pref_ring_size = 0x11000,
	  .dev_type = HV_UNKNOWN,
	  .perf_device = false,
	  .allowed_in_isolated = false,
	},
};
EXPORT_SYMBOL_GPL(vmbus_devs);

static const struct {
	guid_t guid;
+5 −0
Original line number Diff line number Diff line
@@ -417,6 +417,11 @@ static inline bool hv_is_perf_channel(struct vmbus_channel *channel)
	return vmbus_devs[channel->device_id].perf_device;
}

static inline size_t hv_dev_ring_size(struct vmbus_channel *channel)
{
	return vmbus_devs[channel->device_id].pref_ring_size;
}

static inline bool hv_is_allocated_cpu(unsigned int cpu)
{
	struct vmbus_channel *channel, *sc;
+2 −0
Original line number Diff line number Diff line
@@ -820,6 +820,8 @@ struct vmbus_requestor {
#define VMBUS_RQST_RESET (U64_MAX - 3)

struct vmbus_device {
	/* preferred ring buffer size in KB, 0 means no preferred size for this device */
	size_t pref_ring_size;
	u16  dev_type;
	guid_t guid;
	bool perf_device;