IPoIB: Change CM skb memory allocation to be non-atomic during init
Change CM skb memory allocation to use GFP_KERNEL when possible. During device init there's no need to use GFP_ATOMIC when allocating memory for the CM skbs -- use GFP_KERNEL instead. Signed-off-by: Tal Alon <talal@mellanox.com> Signed-off-by: Erez Shitrit <erezsh@mellanox.com> Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
parent
c2bb5628db
commit
22252b4e09
|
@ -140,7 +140,8 @@ static int ipoib_cm_post_receive_nonsrq(struct net_device *dev,
|
|||
static struct sk_buff *ipoib_cm_alloc_rx_skb(struct net_device *dev,
|
||||
struct ipoib_cm_rx_buf *rx_ring,
|
||||
int id, int frags,
|
||||
u64 mapping[IPOIB_CM_RX_SG])
|
||||
u64 mapping[IPOIB_CM_RX_SG],
|
||||
gfp_t gfp)
|
||||
{
|
||||
struct ipoib_dev_priv *priv = netdev_priv(dev);
|
||||
struct sk_buff *skb;
|
||||
|
@ -164,7 +165,7 @@ static struct sk_buff *ipoib_cm_alloc_rx_skb(struct net_device *dev,
|
|||
}
|
||||
|
||||
for (i = 0; i < frags; i++) {
|
||||
struct page *page = alloc_page(GFP_ATOMIC);
|
||||
struct page *page = alloc_page(gfp);
|
||||
|
||||
if (!page)
|
||||
goto partial_error;
|
||||
|
@ -382,7 +383,8 @@ static int ipoib_cm_nonsrq_init_rx(struct net_device *dev, struct ib_cm_id *cm_i
|
|||
|
||||
for (i = 0; i < ipoib_recvq_size; ++i) {
|
||||
if (!ipoib_cm_alloc_rx_skb(dev, rx->rx_ring, i, IPOIB_CM_RX_SG - 1,
|
||||
rx->rx_ring[i].mapping)) {
|
||||
rx->rx_ring[i].mapping,
|
||||
GFP_KERNEL)) {
|
||||
ipoib_warn(priv, "failed to allocate receive buffer %d\n", i);
|
||||
ret = -ENOMEM;
|
||||
goto err_count;
|
||||
|
@ -639,7 +641,8 @@ void ipoib_cm_handle_rx_wc(struct net_device *dev, struct ib_wc *wc)
|
|||
frags = PAGE_ALIGN(wc->byte_len - min(wc->byte_len,
|
||||
(unsigned)IPOIB_CM_HEAD_SIZE)) / PAGE_SIZE;
|
||||
|
||||
newskb = ipoib_cm_alloc_rx_skb(dev, rx_ring, wr_id, frags, mapping);
|
||||
newskb = ipoib_cm_alloc_rx_skb(dev, rx_ring, wr_id, frags,
|
||||
mapping, GFP_ATOMIC);
|
||||
if (unlikely(!newskb)) {
|
||||
/*
|
||||
* If we can't allocate a new RX buffer, dump
|
||||
|
@ -1556,7 +1559,8 @@ int ipoib_cm_dev_init(struct net_device *dev)
|
|||
for (i = 0; i < ipoib_recvq_size; ++i) {
|
||||
if (!ipoib_cm_alloc_rx_skb(dev, priv->cm.srq_ring, i,
|
||||
priv->cm.num_frags - 1,
|
||||
priv->cm.srq_ring[i].mapping)) {
|
||||
priv->cm.srq_ring[i].mapping,
|
||||
GFP_KERNEL)) {
|
||||
ipoib_warn(priv, "failed to allocate "
|
||||
"receive buffer %d\n", i);
|
||||
ipoib_cm_dev_cleanup(dev);
|
||||
|
|
Loading…
Reference in a new issue