Ping! regards, dan carpenter On Thu, Apr 21, 2022 at 06:52:48PM +0300, Dan Carpenter wrote: > Hello Horatiu Vultur, > > The patch 2ea1cbac267e: "net: lan966x: Update FDMA to change MTU." > from Apr 8, 2022, leads to the following Smatch static checker > warning: > > drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c:736 lan966x_fdma_reload() > warn: 'rx_dcbs' was already freed. > > drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c > 685 static int lan966x_fdma_reload(struct lan966x *lan966x, int new_mtu) > 686 { > 687 void *rx_dcbs, *tx_dcbs, *tx_dcbs_buf; > 688 dma_addr_t rx_dma, tx_dma; > 689 u32 size; > 690 int err; > 691 > 692 /* Store these for later to free them */ > 693 rx_dma = lan966x->rx.dma; > 694 tx_dma = lan966x->tx.dma; > 695 rx_dcbs = lan966x->rx.dcbs; > 696 tx_dcbs = lan966x->tx.dcbs; > 697 tx_dcbs_buf = lan966x->tx.dcbs_buf; > 698 > 699 napi_synchronize(&lan966x->napi); > 700 napi_disable(&lan966x->napi); > 701 lan966x_fdma_stop_netdev(lan966x); > 702 > 703 lan966x_fdma_rx_disable(&lan966x->rx); > 704 lan966x_fdma_rx_free_pages(&lan966x->rx); > 705 lan966x->rx.page_order = round_up(new_mtu, PAGE_SIZE) / PAGE_SIZE - 1; > 706 err = lan966x_fdma_rx_alloc(&lan966x->rx); > 707 if (err) > 708 goto restore; > 709 lan966x_fdma_rx_start(&lan966x->rx); > 710 > 711 size = sizeof(struct lan966x_rx_dcb) * FDMA_DCB_MAX; > 712 size = ALIGN(size, PAGE_SIZE); > 713 dma_free_coherent(lan966x->dev, size, rx_dcbs, rx_dma); > ^^^^^^^ > Freed > > 714 > 715 lan966x_fdma_tx_disable(&lan966x->tx); > 716 err = lan966x_fdma_tx_alloc(&lan966x->tx); > 717 if (err) > 718 goto restore_tx; > ^^^^^^^^^^^^^^^ > > 719 > 720 size = sizeof(struct lan966x_tx_dcb) * FDMA_DCB_MAX; > 721 size = ALIGN(size, PAGE_SIZE); > 722 dma_free_coherent(lan966x->dev, size, tx_dcbs, tx_dma); > 723 > 724 kfree(tx_dcbs_buf); > 725 > 726 lan966x_fdma_wakeup_netdev(lan966x); > 727 napi_enable(&lan966x->napi); > 728 > 729 return err; > 730 restore: > 731 lan966x->rx.dma = rx_dma; > 732 lan966x->tx.dma = tx_dma; > 733 lan966x_fdma_rx_start(&lan966x->rx); > 734 > 735 restore_tx: > --> 736 lan966x->rx.dcbs = rx_dcbs; > ^^^^^^^ > > 737 lan966x->tx.dcbs = tx_dcbs; > 738 lan966x->tx.dcbs_buf = tx_dcbs_buf; > 739 > 740 return err; > 741 } > > regards, > dan carpenter