lkml.org 
[lkml]   [2019]   [Sep]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 04/26] ibmveth: Convert multicast list size for little-endian system
    Date
    [ Upstream commit 66cf4710b23ab2adda11155684a2c8826f4fe732 ]

    The ibm,mac-address-filters property defines the maximum number of
    addresses the hypervisor's multicast filter list can support. It is
    encoded as a big-endian integer in the OF device tree, but the virtual
    ethernet driver does not convert it for use by little-endian systems.
    As a result, the driver is not behaving as it should on affected systems
    when a large number of multicast addresses are assigned to the device.

    Reported-by: Hangbin Liu <liuhangbin@gmail.com>
    Signed-off-by: Thomas Falcon <tlfalcon@linux.ibm.com>
    Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/ibm/ibmveth.c | 9 +++++----
    1 file changed, 5 insertions(+), 4 deletions(-)

    diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
    index 955f658f3b65f..de9897c8e9331 100644
    --- a/drivers/net/ethernet/ibm/ibmveth.c
    +++ b/drivers/net/ethernet/ibm/ibmveth.c
    @@ -1557,7 +1557,7 @@ static int ibmveth_probe(struct vio_dev *dev, const struct vio_device_id *id)
    struct net_device *netdev;
    struct ibmveth_adapter *adapter;
    unsigned char *mac_addr_p;
    - unsigned int *mcastFilterSize_p;
    + __be32 *mcastFilterSize_p;
    long ret;
    unsigned long ret_attr;

    @@ -1579,8 +1579,9 @@ static int ibmveth_probe(struct vio_dev *dev, const struct vio_device_id *id)
    return -EINVAL;
    }

    - mcastFilterSize_p = (unsigned int *)vio_get_attribute(dev,
    - VETH_MCAST_FILTER_SIZE, NULL);
    + mcastFilterSize_p = (__be32 *)vio_get_attribute(dev,
    + VETH_MCAST_FILTER_SIZE,
    + NULL);
    if (!mcastFilterSize_p) {
    dev_err(&dev->dev, "Can't find VETH_MCAST_FILTER_SIZE "
    "attribute\n");
    @@ -1597,7 +1598,7 @@ static int ibmveth_probe(struct vio_dev *dev, const struct vio_device_id *id)

    adapter->vdev = dev;
    adapter->netdev = netdev;
    - adapter->mcastFilterSize = *mcastFilterSize_p;
    + adapter->mcastFilterSize = be32_to_cpu(*mcastFilterSize_p);
    adapter->pool_config = 0;

    netif_napi_add(netdev, &adapter->napi, ibmveth_poll, 16);
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-09-08 15:00    [W:2.269 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site