lkml.org 
[lkml]   [2020]   [Jul]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC 10/11] Driver: hv: util: Make ringbuffer at least take two pages
    Date
    When PAGE_SIZE > HV_HYP_PAGE_SIZE, we need the ringbuffer size to be at
    least 2 * PAGE_SIZE: one page for the header and at least one page of
    the data part (because of the alignment requirement for double mapping).

    So make sure the ringbuffer sizes to be at least 2 * PAGE_SIZE when
    using vmbus_open() to establish the vmbus connection.

    Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
    ---
    drivers/hv/hv_util.c | 16 ++++++++++++----
    1 file changed, 12 insertions(+), 4 deletions(-)

    diff --git a/drivers/hv/hv_util.c b/drivers/hv/hv_util.c
    index 92ee0fe4c919..73a77bead2be 100644
    --- a/drivers/hv/hv_util.c
    +++ b/drivers/hv/hv_util.c
    @@ -461,6 +461,14 @@ static void heartbeat_onchannelcallback(void *context)
    }
    }

    +/*
    + * The size of each ring should be at least 2 * PAGE_SIZE, because we need one
    + * page for the header and at least another page (because of the alignment
    + * requirement for double mapping) for data part.
    + */
    +#define HV_UTIL_RING_SEND_SIZE max(4 * HV_HYP_PAGE_SIZE, 2 * PAGE_SIZE)
    +#define HV_UTIL_RING_RECV_SIZE max(4 * HV_HYP_PAGE_SIZE, 2 * PAGE_SIZE)
    +
    static int util_probe(struct hv_device *dev,
    const struct hv_vmbus_device_id *dev_id)
    {
    @@ -491,8 +499,8 @@ static int util_probe(struct hv_device *dev,

    hv_set_drvdata(dev, srv);

    - ret = vmbus_open(dev->channel, 4 * HV_HYP_PAGE_SIZE,
    - 4 * HV_HYP_PAGE_SIZE, NULL, 0, srv->util_cb,
    + ret = vmbus_open(dev->channel, HV_UTIL_RING_SEND_SIZE,
    + HV_UTIL_RING_RECV_SIZE, NULL, 0, srv->util_cb,
    dev->channel);
    if (ret)
    goto error;
    @@ -551,8 +559,8 @@ static int util_resume(struct hv_device *dev)
    return ret;
    }

    - ret = vmbus_open(dev->channel, 4 * HV_HYP_PAGE_SIZE,
    - 4 * HV_HYP_PAGE_SIZE, NULL, 0, srv->util_cb,
    + ret = vmbus_open(dev->channel, HV_UTIL_RING_SEND_SIZE,
    + HV_UTIL_RING_RECV_SIZE, NULL, 0, srv->util_cb,
    dev->channel);
    return ret;
    }
    --
    2.27.0
    \
     
     \ /
      Last update: 2020-07-21 03:42    [W:2.169 / U:0.104 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site