FAILED: patch "[PATCH] sfc: The RX page_ring is optional" failed to apply to 4.4-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 1d5a474240407c38ca8c7484a656ee39f585399c Mon Sep 17 00:00:00 2001
From: Martin Habets <[email protected]>
Date: Sun, 2 Jan 2022 08:41:22 +0000
Subject: [PATCH] sfc: The RX page_ring is optional
The RX page_ring is an optional feature that improves performance. When allocation fails the driver can still function, but possibly with a lower bandwidth. Guard against dereferencing a NULL page_ring.
Fixes 2768935a4660 ("sfc: reuse pages to avoid DMA mapping/unmapping costs")
Signed-off-by Martin Habets <[email protected]>
Reported-by Jiasheng Jiang <[email protected]>
Signed-off-by Jakub Kicinski <[email protected]>
drivers/net/ethernet/sfc/falcon/rx.c +5 -0
@@ -110,6 +110,8 @@ static struct page *ef4_reuse_page(struct ef4_rx_queue *rx_queue)struct ef4_rx_page_state *state;unsigned index; +if (unlikely (!rx_queue->page_ring)) +return NULL ; index = rx_queue->page_remove & rx_queue->page_ptr_mask; page = rx_queue->page_ring[index];if (page ==NULL )
@@ -293,6 +295,9 @@ static void ef4_recycle_rx_pages(struct ef4_channel *channel, {struct ef4_rx_queue *rx_queue =ef4_channel_get_rx_queue (channel); +if (unlikely (!rx_queue->page_ring)) +return ; + do { ef4_recycle_rx_page(channel, rx_buf); rx_buf = ef4_rx_buf_next(rx_queue, rx_buf);
drivers/net/ethernet/sfc/rx_common.c +5 -0
@@ -45,6 +45,8 @@ static struct page *efx_reuse_page(struct efx_rx_queue *rx_queue)unsigned int index;struct page *page; +if (unlikely (!rx_queue->page_ring)) +return NULL ; index = rx_queue->page_remove & rx_queue->page_ptr_mask; page = rx_queue->page_ring[index];if (page ==NULL )
@@ -114,6 +116,9 @@ void efx_recycle_rx_pages(struct efx_channel *channel, {struct efx_rx_queue *rx_queue =efx_channel_get_rx_queue (channel); +if (unlikely (!rx_queue->page_ring)) +return ; + do { efx_recycle_rx_page(channel, rx_buf); rx_buf = efx_rx_buf_next(rx_queue, rx_buf);