lkml.org 
[lkml]   [2010]   [Dec]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v16 04/17]Add a function make external buffer owner to query capability.
    Date
    From: Xin Xiaohui <xiaohui.xin@intel.com>

    The external buffer owner can use the functions to get
    the capability of the underlying NIC driver.

    Signed-off-by: Xin Xiaohui <xiaohui.xin@intel.com>
    Signed-off-by: Zhao Yu <yzhaonew@gmail.com>
    Reviewed-by: Jeff Dike <jdike@linux.intel.com>
    ---
    include/linux/netdevice.h | 2 ++
    net/core/dev.c | 41 +++++++++++++++++++++++++++++++++++++++++
    2 files changed, 43 insertions(+), 0 deletions(-)

    diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
    index 575777f..8dcf6de 100644
    --- a/include/linux/netdevice.h
    +++ b/include/linux/netdevice.h
    @@ -1736,6 +1736,8 @@ extern gro_result_t napi_frags_finish(struct napi_struct *napi,
    gro_result_t ret);
    extern struct sk_buff * napi_frags_skb(struct napi_struct *napi);
    extern gro_result_t napi_gro_frags(struct napi_struct *napi);
    +extern int netdev_mp_port_prep(struct net_device *dev,
    + struct mp_port *port);

    static inline void napi_free_frags(struct napi_struct *napi)
    {
    diff --git a/net/core/dev.c b/net/core/dev.c
    index 660dd41..84fbb83 100644
    --- a/net/core/dev.c
    +++ b/net/core/dev.c
    @@ -2942,6 +2942,47 @@ out:
    return ret;
    }

    +/* To support meidate passthru(zero-copy) with NIC driver,
    + * we'd better query NIC driver for the capability it can
    + * provide, especially for packet split mode, now we only
    + * query for the header size, and the payload a descriptor
    + * may carry.
    + * Now, it's only called by mpassthru device.
    + */
    +#if defined(CONFIG_MEDIATE_PASSTHRU) || defined(CONFIG_MEDIATE_PASSTHRU_MODULE)
    +int netdev_mp_port_prep(struct net_device *dev,
    + struct mp_port *port)
    +{
    + int rc;
    + int npages, data_len;
    + const struct net_device_ops *ops = dev->netdev_ops;
    +
    + if (ops->ndo_mp_port_prep) {
    + rc = ops->ndo_mp_port_prep(dev, port);
    + if (rc)
    + return rc;
    + } else
    + return -EINVAL;
    +
    + if (port->hdr_len <= 0)
    + goto err;
    +
    + npages = port->npages;
    + data_len = port->data_len;
    + if (npages <= 0 || npages > MAX_SKB_FRAGS ||
    + (data_len < PAGE_SIZE * (npages - 1) ||
    + data_len > PAGE_SIZE * npages))
    + goto err;
    +
    + return 0;
    +err:
    + dev_warn(&dev->dev, "invalid page constructor parameters\n");
    +
    + return -EINVAL;
    +}
    +EXPORT_SYMBOL(netdev_mp_port_prep);
    +#endif
    +
    /**
    * netif_receive_skb - process receive buffer from network
    * @skb: buffer to process
    --
    1.7.3


    \
     
     \ /
      Last update: 2010-12-01 08:53    [W:4.166 / U:1.120 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site