Commit 28f98a12f7bac9c3e5ba85d245d32ec0910cf8e5
Committed by
Greg Kroah-Hartman
1 parent
92d94a7ec5
Exists in
smarc_imx_lf-5.15.y
and in
27 other branches
fpga: zynq-fpga: Fix issue with drvdata being overwritten.
Upon registering a FPGA Manager low level driver, FPGA Manager core overwrites the platform drvdata pointer. Prior to this commit zynq-fpga falsely relied on this pointer to still be valid at remove() time. Reported-by: Alan Tull <atull@opensource.altera.com> Signed-off-by: Moritz Fischer <moritz.fischer@ettus.com> Acked-by: Alan Tull <atull@opensource.altera.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Showing 1 changed file with 4 additions and 3 deletions Side-by-side Diff
drivers/fpga/zynq-fpga.c
... | ... | @@ -416,7 +416,6 @@ |
416 | 416 | if (!priv) |
417 | 417 | return -ENOMEM; |
418 | 418 | |
419 | - platform_set_drvdata(pdev, priv); | |
420 | 419 | priv->dev = dev; |
421 | 420 | |
422 | 421 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
423 | 422 | |
424 | 423 | |
... | ... | @@ -477,10 +476,12 @@ |
477 | 476 | static int zynq_fpga_remove(struct platform_device *pdev) |
478 | 477 | { |
479 | 478 | struct zynq_fpga_priv *priv; |
479 | + struct fpga_manager *mgr; | |
480 | 480 | |
481 | - fpga_mgr_unregister(&pdev->dev); | |
481 | + mgr = platform_get_drvdata(pdev); | |
482 | + priv = mgr->priv; | |
482 | 483 | |
483 | - priv = platform_get_drvdata(pdev); | |
484 | + fpga_mgr_unregister(&pdev->dev); | |
484 | 485 | |
485 | 486 | clk_unprepare(priv->clk); |
486 | 487 |