A transaction failure only occurs if no more transactions are
available for an endpoint. It's a very cheap test.
When replenishing an RX endpoint buffer, there's no point in
allocating pages if transactions are exhausted. So don't bother
doing so unless the transaction allocation succeeds.
Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
u32 len;
int ret;
+ trans = ipa_endpoint_trans_alloc(endpoint, 1);
+ if (!trans)
+ return -ENOMEM;
+
buffer_size = endpoint->data->rx.buffer_size;
page = dev_alloc_pages(get_order(buffer_size));
if (!page)
- return -ENOMEM;
-
- trans = ipa_endpoint_trans_alloc(endpoint, 1);
- if (!trans)
- goto err_free_pages;
+ goto err_trans_free;
/* Offset the buffer to make space for skb headroom */
offset = NET_SKB_PAD;
ret = gsi_trans_page_add(trans, page, len, offset);
if (ret)
- goto err_trans_free;
+ goto err_free_pages;
trans->data = page; /* transaction owns page now */
if (++endpoint->replenish_ready == IPA_REPLENISH_BATCH) {
return 0;
-err_trans_free:
- gsi_trans_free(trans);
err_free_pages:
__free_pages(page, get_order(buffer_size));
+err_trans_free:
+ gsi_trans_free(trans);
return -ENOMEM;
}