p54usb: Fix to prevent SKB memory allocation errors with 4K page size
On x86_64 architecture with 4K page size and SLUB debugging enabled, stress testing on p54usb has resulted in skb allocation failures of O(1) and extreme page fragmentation. Reducing rx_mtu fixes this problem by reducing the size of all receive skb allocations to be of O(0). This change does not impact performance in any way. Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
d1b29405bd
commit
51fb80fefe
|
@ -138,6 +138,7 @@ int p54_parse_firmware(struct ieee80211_hw *dev, const struct firmware *fw)
|
||||||
u8 *fw_version = NULL;
|
u8 *fw_version = NULL;
|
||||||
size_t len;
|
size_t len;
|
||||||
int i;
|
int i;
|
||||||
|
int maxlen;
|
||||||
|
|
||||||
if (priv->rx_start)
|
if (priv->rx_start)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -195,6 +196,16 @@ int p54_parse_firmware(struct ieee80211_hw *dev, const struct firmware *fw)
|
||||||
else
|
else
|
||||||
priv->rx_mtu = (size_t)
|
priv->rx_mtu = (size_t)
|
||||||
0x620 - priv->tx_hdr_len;
|
0x620 - priv->tx_hdr_len;
|
||||||
|
maxlen = priv->tx_hdr_len + /* USB devices */
|
||||||
|
sizeof(struct p54_rx_data) +
|
||||||
|
4 + /* rx alignment */
|
||||||
|
IEEE80211_MAX_FRAG_THRESHOLD;
|
||||||
|
if (priv->rx_mtu > maxlen && PAGE_SIZE == 4096) {
|
||||||
|
printk(KERN_INFO "p54: rx_mtu reduced from %d "
|
||||||
|
"to %d\n", priv->rx_mtu,
|
||||||
|
maxlen);
|
||||||
|
priv->rx_mtu = maxlen;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case BR_CODE_EXPOSED_IF:
|
case BR_CODE_EXPOSED_IF:
|
||||||
|
|
Loading…
Reference in New Issue