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: Saurabh Sengar <ssengar@linux.microsoft.com> Reviewed-by: Long Li <longli@microsoft.com> Link: https://lore.kernel.org/r/1711788723-8593-2-git-send-email-ssengar@linux.microsoft.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
a36b69775f
commit
e8c4bd6c6e
@ -120,7 +120,9 @@ const struct vmbus_device vmbus_devs[] = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
/* File copy */
|
/* 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,
|
HV_FCOPY_GUID,
|
||||||
.perf_device = false,
|
.perf_device = false,
|
||||||
.allowed_in_isolated = false,
|
.allowed_in_isolated = false,
|
||||||
@ -140,12 +142,19 @@ const struct vmbus_device vmbus_devs[] = {
|
|||||||
.allowed_in_isolated = false,
|
.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,
|
.perf_device = false,
|
||||||
.allowed_in_isolated = false,
|
.allowed_in_isolated = false,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
EXPORT_SYMBOL_GPL(vmbus_devs);
|
||||||
|
|
||||||
static const struct {
|
static const struct {
|
||||||
guid_t guid;
|
guid_t guid;
|
||||||
|
@ -417,6 +417,11 @@ static inline bool hv_is_perf_channel(struct vmbus_channel *channel)
|
|||||||
return vmbus_devs[channel->device_id].perf_device;
|
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)
|
static inline bool hv_is_allocated_cpu(unsigned int cpu)
|
||||||
{
|
{
|
||||||
struct vmbus_channel *channel, *sc;
|
struct vmbus_channel *channel, *sc;
|
||||||
|
@ -820,6 +820,8 @@ struct vmbus_requestor {
|
|||||||
#define VMBUS_RQST_RESET (U64_MAX - 3)
|
#define VMBUS_RQST_RESET (U64_MAX - 3)
|
||||||
|
|
||||||
struct vmbus_device {
|
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;
|
u16 dev_type;
|
||||||
guid_t guid;
|
guid_t guid;
|
||||||
bool perf_device;
|
bool perf_device;
|
||||||
|
Loading…
Reference in New Issue
Block a user