# HG changeset patch # User Thomas Sanchez # Date 1325965707 -3600 # Node ID 8eac832f763dcf7a24f1c1217eef4f9949b7d4cb # Parent e330b0cea45e873e39163923345c614023e61475 rathaxes: free the pci resources diff -r e330b0cea45e -r 8eac832f763d rathaxes_start_to_implement_sk_buff_in_the_lkm.patch --- a/rathaxes_start_to_implement_sk_buff_in_the_lkm.patch Sat Jan 07 20:11:27 2012 +0100 +++ b/rathaxes_start_to_implement_sk_buff_in_the_lkm.patch Sat Jan 07 20:48:27 2012 +0100 @@ -4,7 +4,7 @@ diff -r 606e807b8bc7 rathaxes/samples/lkm/CMakeLists.txt --- a/rathaxes/samples/lkm/CMakeLists.txt Sat Jan 07 20:02:55 2012 +0100 -+++ b/rathaxes/samples/lkm/CMakeLists.txt Sat Jan 07 20:10:46 2012 +0100 ++++ b/rathaxes/samples/lkm/CMakeLists.txt Sat Jan 07 20:48:23 2012 +0100 @@ -1,6 +1,6 @@ ADD_RATHAXES_SOURCES(lkm lkm.rtx - RTI log.rti lkm.rti pci.rti ethernet.rti @@ -16,8 +16,8 @@ # source (with ADD_RATHAXES_SOURCES). diff -r 606e807b8bc7 rathaxes/samples/lkm/e1000.blt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/rathaxes/samples/lkm/e1000.blt Sat Jan 07 20:10:46 2012 +0100 -@@ -0,0 +1,57 @@ ++++ b/rathaxes/samples/lkm/e1000.blt Sat Jan 07 20:48:23 2012 +0100 +@@ -0,0 +1,72 @@ +with e1000, Ethernet, Socket, PCI, LKM, Log +{ + template type e1000::Context() @@ -37,7 +37,8 @@ + { + struct rtx_e1000_ctx + { -+ unsigned char /* __iomem */ *ioaddr; ++ int bars; ++ unsigned char /* __iomem */ *ioaddr; + }; + } + @@ -50,13 +51,13 @@ + { + chunk ::CALL + { -+ int bars = pci_select_bars(pdev, IORESOURCE_MEM); ++ rtx_ether_ctx->hw_ctx.bars = pci_select_bars(pdev, IORESOURCE_MEM); + if (pci_enable_device_mem(pdev)) + { + ${Log::info("e1000::create: pci_enable_device_mem failed")}; + } + -+ if (pci_request_selected_regions(pdev, bars, ${config.name})) ++ if (pci_request_selected_regions(pdev, rtx_ether_ctx->hw_ctx.bars, ${config.name})) + { + ${Log::info("e1000::create: pci_request_selected_regions failed")}; + } @@ -74,11 +75,25 @@ + } + } + } ++ ++ template sequence e1000::destroy() ++ { ++ chunk ::CALL ++ { ++ // XXX: add a check in order to avoid freeing none allocated ++ // resources. ++ struct net_device *net_dev = pci_get_drvdata(pdev); ++ struct rtx_ethernet_dev* rtx_ether_ctx = netdev_priv(net_dev); ++ iounmap(rtx_ether_ctx->hw_ctx.ioaddr); ++ pci_release_selected_regions(pdev, rtx_ether_ctx->hw_ctx.bars); ++ pci_release_region(pdev, 0); ++ } ++ } +} diff -r 606e807b8bc7 rathaxes/samples/lkm/e1000.rti --- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/rathaxes/samples/lkm/e1000.rti Sat Jan 07 20:10:46 2012 +0100 -@@ -0,0 +1,10 @@ ++++ b/rathaxes/samples/lkm/e1000.rti Sat Jan 07 20:48:23 2012 +0100 +@@ -0,0 +1,15 @@ +interface e1000 : Socket, Ethernet, PCI, LKM +{ + provided type e1000::Context; @@ -88,10 +103,15 @@ + { + provided chunk ::CALL; + } ++ ++ provided sequence e1000::destroy() ++ { ++ provided chunk ::CALL; ++ } +} diff -r 606e807b8bc7 rathaxes/samples/lkm/ethernet.blt --- a/rathaxes/samples/lkm/ethernet.blt Sat Jan 07 20:02:55 2012 +0100 -+++ b/rathaxes/samples/lkm/ethernet.blt Sat Jan 07 20:10:46 2012 +0100 ++++ b/rathaxes/samples/lkm/ethernet.blt Sat Jan 07 20:48:23 2012 +0100 @@ -18,8 +18,11 @@ * I think it's useless to use the ${PCI::Device} "abstraction" * here, since we are already in a Linux specific context here. @@ -140,9 +160,19 @@ }; } +@@ -159,9 +180,6 @@ + { + chunk ::CALL + { +- struct net_device *net_dev; +- +- net_dev = pci_get_drvdata(pdev); // should be ${pdev}, see above + unregister_netdev(net_dev); + /* + * If we had some cleanup todo with struct rtx_ether_ctx we would diff -r 606e807b8bc7 rathaxes/samples/lkm/ethernet.rti --- a/rathaxes/samples/lkm/ethernet.rti Sat Jan 07 20:02:55 2012 +0100 -+++ b/rathaxes/samples/lkm/ethernet.rti Sat Jan 07 20:10:46 2012 +0100 ++++ b/rathaxes/samples/lkm/ethernet.rti Sat Jan 07 20:48:23 2012 +0100 @@ -1,4 +1,4 @@ -interface Ethernet : PCI, LKM +interface Ethernet : Socket, PCI, LKM @@ -164,8 +194,8 @@ provided chunk LKM::prototypes; diff -r 606e807b8bc7 rathaxes/samples/lkm/lkm.rtx --- a/rathaxes/samples/lkm/lkm.rtx Sat Jan 07 20:02:55 2012 +0100 -+++ b/rathaxes/samples/lkm/lkm.rtx Sat Jan 07 20:10:46 2012 +0100 -@@ -15,10 +15,16 @@ ++++ b/rathaxes/samples/lkm/lkm.rtx Sat Jan 07 20:48:23 2012 +0100 +@@ -15,15 +15,22 @@ Log::info("Got an interruption"); } @@ -182,7 +212,13 @@ } PCI::remove(PCI::Device dev) -@@ -45,10 +51,11 @@ + { + Log::info("Remove the pci device"); ++ e1000::destroy(); + Ethernet::exit(dev); + } + +@@ -45,10 +52,11 @@ LKM::name = "hello"; LKM::author = "Rathaxes"; LKM::description = "Hello World Loadable Kernel Module (LKM)"; @@ -197,7 +233,7 @@ } diff -r 606e807b8bc7 rathaxes/samples/lkm/socket.blt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/rathaxes/samples/lkm/socket.blt Sat Jan 07 20:10:46 2012 +0100 ++++ b/rathaxes/samples/lkm/socket.blt Sat Jan 07 20:48:23 2012 +0100 @@ -0,0 +1,27 @@ +with Socket, LKM +{ @@ -228,7 +264,7 @@ +} diff -r 606e807b8bc7 rathaxes/samples/lkm/socket.rti --- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/rathaxes/samples/lkm/socket.rti Sat Jan 07 20:10:46 2012 +0100 ++++ b/rathaxes/samples/lkm/socket.rti Sat Jan 07 20:48:23 2012 +0100 @@ -0,0 +1,4 @@ +interface Socket : LKM +{