* [RFC PATCH v1 24/57] net: fec: Remove PAGE_SIZE compile-time constant assumption
[not found] ` <20241014105912.3207374-1-ryan.roberts@arm.com>
@ 2024-10-14 10:58 ` Ryan Roberts
0 siblings, 0 replies; only message in thread
From: Ryan Roberts @ 2024-10-14 10:58 UTC (permalink / raw)
To: David S. Miller, Andrew Morton, Anshuman Khandual, Ard Biesheuvel,
Catalin Marinas, David Hildenbrand, Eric Dumazet, Greg Marsden,
Ivan Ivanov, Jakub Kicinski, Kalesh Singh, Marc Zyngier,
Mark Rutland, Matthias Brugger, Miroslav Benes, Paolo Abeni,
Wei Fang, Will Deacon
Cc: Ryan Roberts, imx, linux-arm-kernel, linux-kernel, linux-mm,
netdev
To prepare for supporting boot-time page size selection, refactor code
to remove assumptions about PAGE_SIZE being compile-time constant. Code
intended to be equivalent when compile-time page size is active.
Refactored "struct fec_enet_priv_rx_q" to use a flexible array member
for "rx_skb_info", since its length depends on PAGE_SIZE.
Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
---
***NOTE***
Any confused maintainers may want to read the cover note here for context:
https://lore.kernel.org/all/20241014105514.3206191-1-ryan.roberts@arm.com/
drivers/net/ethernet/freescale/fec.h | 3 ++-
drivers/net/ethernet/freescale/fec_main.c | 5 +++--
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/freescale/fec.h
index a19cb2a786fd2..afc8b3f360555 100644
--- a/drivers/net/ethernet/freescale/fec.h
+++ b/drivers/net/ethernet/freescale/fec.h
@@ -571,7 +571,6 @@ struct fec_enet_priv_tx_q {
struct fec_enet_priv_rx_q {
struct bufdesc_prop bd;
- struct fec_enet_priv_txrx_info rx_skb_info[RX_RING_SIZE];
/* page_pool */
struct page_pool *page_pool;
@@ -580,6 +579,8 @@ struct fec_enet_priv_rx_q {
/* rx queue number, in the range 0-7 */
u8 id;
+
+ struct fec_enet_priv_txrx_info rx_skb_info[];
};
struct fec_stop_mode_gpr {
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index a923cb95cdc62..b9214c12d537e 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -3339,6 +3339,8 @@ static int fec_enet_alloc_queue(struct net_device *ndev)
int i;
int ret = 0;
struct fec_enet_priv_tx_q *txq;
+ size_t rxq_sz = struct_size(fep->rx_queue[0], rx_skb_info, RX_RING_SIZE);
+
for (i = 0; i < fep->num_tx_queues; i++) {
txq = kzalloc(sizeof(*txq), GFP_KERNEL);
@@ -3364,8 +3366,7 @@ static int fec_enet_alloc_queue(struct net_device *ndev)
}
for (i = 0; i < fep->num_rx_queues; i++) {
- fep->rx_queue[i] = kzalloc(sizeof(*fep->rx_queue[i]),
- GFP_KERNEL);
+ fep->rx_queue[i] = kzalloc(rxq_sz, GFP_KERNEL);
if (!fep->rx_queue[i]) {
ret = -ENOMEM;
goto alloc_failed;
--
2.43.0
^ permalink raw reply related [flat|nested] only message in thread