Hi! > From: Jiasheng Jiang <jiasheng@xxxxxxxxxxx> > > [ Upstream commit 9b8bdd1eb5890aeeab7391dddcf8bd51f7b07216 ] > > Because of the possible failure of the kcalloc, it should be better to > set rx_queue->page_ptr_mask to 0 when it happens in order to maintain > the consistency. Again this is confusing/wrong, or at least not a complete fix... > +++ b/drivers/net/ethernet/sfc/falcon/rx.c > @@ -732,7 +732,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; > } > ...as we have index = rx_queue->page_remove & rx_queue->page_ptr_mask; page = rx_queue->page_ring[index]; in ef4_reuse_page, and similar problems in other places, including for (i = 0; i <= rx_queue->page_ptr_mask; i++) { struct page *page = rx_queue->page_ring[i]; . Best regards, Pavel -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Attachment:
signature.asc
Description: Digital signature