changeset 26:8eac832f763d

rathaxes: free the pci resources
author Thomas Sanchez <thomas.sanchz@gmail.com>
date Sat, 07 Jan 2012 20:48:27 +0100
parents e330b0cea45e
children ed3247946305
files rathaxes_start_to_implement_sk_buff_in_the_lkm.patch
diffstat 1 files changed, 51 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- 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
 +{