diff options
author | Loic Poulain <loic.poulain@linaro.org> | 2021-03-29 18:39:32 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2021-03-30 02:26:16 +0300 |
commit | 3af562a37b7f1a5dbeb50a00ace280ba2d984762 (patch) | |
tree | 95c1cb2d71fb9464784ede84061a3bff12e0594a /drivers/net/mhi/net.c | |
parent | d9f0713c9217fdd31077f890c2e15232ad2f0772 (diff) | |
download | linux-3af562a37b7f1a5dbeb50a00ace280ba2d984762.tar.xz |
net: mhi: Allow decoupled MTU/MRU
MBIM protocol makes the mhi network interface asymmetric, ingress data
received from MHI is MBIM protocol, possibly containing multiple
aggregated IP packets, while egress data received from network stack is
IP protocol.
This changes allows a 'protocol' to specify its own MRU, that when
specified is used to allocate MHI RX buffers (skb).
For MBIM, Set the default MTU to 1500, which is the usual network MTU
for WWAN IP packets, and MRU to 3.5K (for allocation efficiency),
allowing skb to fit in an usual 4K page (including padding,
skb_shared_info, ...).
Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/mhi/net.c')
-rw-r--r-- | drivers/net/mhi/net.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/mhi/net.c b/drivers/net/mhi/net.c index f59960876083..5ec7a29f668d 100644 --- a/drivers/net/mhi/net.c +++ b/drivers/net/mhi/net.c @@ -265,10 +265,12 @@ static void mhi_net_rx_refill_work(struct work_struct *work) rx_refill.work); struct net_device *ndev = mhi_netdev->ndev; struct mhi_device *mdev = mhi_netdev->mdev; - int size = READ_ONCE(ndev->mtu); struct sk_buff *skb; + unsigned int size; int err; + size = mhi_netdev->mru ? mhi_netdev->mru : READ_ONCE(ndev->mtu); + while (!mhi_queue_is_full(mdev, DMA_FROM_DEVICE)) { skb = netdev_alloc_skb(ndev, size); if (unlikely(!skb)) |