diff options
Diffstat (limited to 'drivers/net/ethernet/sfc/falcon/rx.c')
| -rw-r--r-- | drivers/net/ethernet/sfc/falcon/rx.c | 10 | 
1 files changed, 9 insertions, 1 deletions
| diff --git a/drivers/net/ethernet/sfc/falcon/rx.c b/drivers/net/ethernet/sfc/falcon/rx.c index 966f13e7475d..0c6cc2191369 100644 --- a/drivers/net/ethernet/sfc/falcon/rx.c +++ b/drivers/net/ethernet/sfc/falcon/rx.c @@ -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); @@ -728,7 +733,10 @@ static void ef4_init_rx_recycle_ring(struct ef4_nic *efx,  					    efx->rx_bufs_per_page);  	rx_queue->page_ring = kcalloc(page_ring_size,  				      sizeof(*rx_queue->page_ring), GFP_KERNEL); -	rx_queue->page_ptr_mask = page_ring_size - 1; +	if (!rx_queue->page_ring) +		rx_queue->page_ptr_mask = 0; +	else +		rx_queue->page_ptr_mask = page_ring_size - 1;  }  void ef4_init_rx_queue(struct ef4_rx_queue *rx_queue) |