Re: [patch 0/5][RFC] Update network drivers to use devres

2007-08-03 Thread Tejun Heo
On Fri, Aug 03, 2007 at 09:58:57AM +0100, Stephen Hemminger wrote:
 On Thu, 2 Aug 2007 15:42:06 -0700
 Brandon Philips [EMAIL PROTECTED] wrote:
 
  This patch set adds support for devres in the net core and converts the
  e100 and e1000 drivers to devres.  Devres is a simple resource manager
  for device drivers, see Documentation/driver-model/devres.txt for more
  information.
  
  The use of devres will remain optional for drivers with this patch set.
  Drivers can be converted when it makes sense.
 
 Just because devres exists is not sufficient motivation to change.
 
 It seems that devres was a band-aid rather than fixing storage drivers
 to have proper DMA lifetimes.

I don't really get what you mean by having proper DMA lifetimes but
please don't write devres off too fast.  devres doesn't solve any
problem that you can't fix without it but it does make the 'solving'
much easier.

IMHO, libata drivers generally have been well maintained and reviewed
but I could still find quite a few bugs (resource leaks or
occasionally double free) in init failure and removal paths.  Init
failure paths are especially prone to bugs because they don't get
excercised often.  It's just very easy to make a mistake and fail to
notice and low level drivers don't always get sufficient amount of
review or testing.

Skimming through drivers... via-rhine doesn't disable PCI device on
init failure path but does so on removal.  sky2 doesn't free
consistent memory if sky2_init() fails.  acenic calls iounmap() with
NULL parameter which I'm not sure whether it's safe or not.  natsemi
doesn't disable PCI device on failure or removal.

Devres makes low level drivers simpler, easier to get right and
maintain.  Writing new drivers becomes easier too.  So, why not?

 Network devices seem to work fine thanks, and the resource requirements
 are different. If ain't broke, don't fix it.

Care to enlighten me on how the resource requirments are different
from ATA drivers?

Thanks.

-- 
tejun
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [patch 0/5][RFC] Update network drivers to use devres

2007-08-03 Thread Stephen Hemminger
On Fri, 3 Aug 2007 19:26:45 +0900
Tejun Heo [EMAIL PROTECTED] wrote:

 On Fri, Aug 03, 2007 at 09:58:57AM +0100, Stephen Hemminger wrote:
  On Thu, 2 Aug 2007 15:42:06 -0700
  Brandon Philips [EMAIL PROTECTED] wrote:
  
   This patch set adds support for devres in the net core and converts the
   e100 and e1000 drivers to devres.  Devres is a simple resource manager
   for device drivers, see Documentation/driver-model/devres.txt for more
   information.
   
   The use of devres will remain optional for drivers with this patch set.
   Drivers can be converted when it makes sense.
  
  Just because devres exists is not sufficient motivation to change.
  
  It seems that devres was a band-aid rather than fixing storage drivers
  to have proper DMA lifetimes.
 
 I don't really get what you mean by having proper DMA lifetimes but
 please don't write devres off too fast.  devres doesn't solve any
 problem that you can't fix without it but it does make the 'solving'
 much easier.
 
 IMHO, libata drivers generally have been well maintained and reviewed
 but I could still find quite a few bugs (resource leaks or
 occasionally double free) in init failure and removal paths.  Init
 failure paths are especially prone to bugs because they don't get
 excercised often.  It's just very easy to make a mistake and fail to
 notice and low level drivers don't always get sufficient amount of
 review or testing.
 
 Skimming through drivers... via-rhine doesn't disable PCI device on
 init failure path but does so on removal.  sky2 doesn't free
 consistent memory if sky2_init() fails.  acenic calls iounmap() with
 NULL parameter which I'm not sure whether it's safe or not.  natsemi
 doesn't disable PCI device on failure or removal.

Did you report these to the developers?

 Devres makes low level drivers simpler, easier to get right and
 maintain.  Writing new drivers becomes easier too.  So, why not?
 
  Network devices seem to work fine thanks, and the resource requirements
  are different. If ain't broke, don't fix it.
 
 Care to enlighten me on how the resource requirments are different
 from ATA drivers?

I was thinking of the hot remove (no mod ref counts) and lingering
/sys open issues.  ATA drivers use ref counts.

My take on devres is that it is similar to talloc() for device drivers.
Not a bad idea in itself, but the real advantage of hierarchical allocation
is that it makes exception handling easier if things are layered deeply.
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [patch 0/5][RFC] Update network drivers to use devres

2007-08-03 Thread Stephen Hemminger
On Fri, 03 Aug 2007 20:33:04 +0900
Tejun Heo [EMAIL PROTECTED] wrote:

 Hello,
 
 Stephen Hemminger wrote:
  Skimming through drivers... via-rhine doesn't disable PCI device on
  init failure path but does so on removal.  sky2 doesn't free
  consistent memory if sky2_init() fails.  acenic calls iounmap() with
  NULL parameter which I'm not sure whether it's safe or not.  natsemi
  doesn't disable PCI device on failure or removal.
  
  Did you report these to the developers?
 
 Just skimmed through.  I'm pretty sure Brandon will pick those up later.
 
  Devres makes low level drivers simpler, easier to get right and
  maintain.  Writing new drivers becomes easier too.  So, why not?
 
  Network devices seem to work fine thanks, and the resource requirements
  are different. If ain't broke, don't fix it.
  Care to enlighten me on how the resource requirments are different
  from ATA drivers?
  
  I was thinking of the hot remove (no mod ref counts) and lingering
  /sys open issues.  ATA drivers use ref counts.
 
 I guess the hot removing is done by severing netdev from the actual
 device, right?  I don't see how that affects usage of devres on network
 drivers.  Am I missing something?

The issue is that device may be removed at any time. So you can't rely
on module ref counts to save you. And netdevice structure must still
linger after module is removed, till dev ref count goes to zero.

 On a separate note, can you explain lingering /sys open issue to me a
 bit?  With recent sysfs changes, sysfs nodes are disconnected
 immediately on deletion.  Would that make any difference to netdevs?

Examples are in Documentation/networking/netdevices.txt

  My take on devres is that it is similar to talloc() for device drivers.
  Not a bad idea in itself, but the real advantage of hierarchical allocation
  is that it makes exception handling easier if things are layered deeply.
 
 Yeah, devres made layering easier in libata, especially SFF stuff.
 Dunno how much of that is applicable to netdev but, with or without
 layering, it'll be a nice cleanup and I don't see much negative side.
 Conversion would take some work and bugs might be introduced in the
 process as with any changes but the good thing about devres is that
 you're very likely to get failure/release paths right if you get the
 init path right, and if you get the init path wrong, it will stand out
 like a sore thumb - easy to spot, easy to fix.
 
 So, I think using devres on net drivers is a good idea, well, for that
 matter, for any driver, but me being the devres writer, that isn't
 really surprising, is it?
 
 Thanks.
 
 -- 
 tejun
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [patch 0/5][RFC] Update network drivers to use devres

2007-08-03 Thread Tejun Heo
Hello,

Stephen Hemminger wrote:
 Skimming through drivers... via-rhine doesn't disable PCI device on
 init failure path but does so on removal.  sky2 doesn't free
 consistent memory if sky2_init() fails.  acenic calls iounmap() with
 NULL parameter which I'm not sure whether it's safe or not.  natsemi
 doesn't disable PCI device on failure or removal.
 
 Did you report these to the developers?

Just skimmed through.  I'm pretty sure Brandon will pick those up later.

 Devres makes low level drivers simpler, easier to get right and
 maintain.  Writing new drivers becomes easier too.  So, why not?

 Network devices seem to work fine thanks, and the resource requirements
 are different. If ain't broke, don't fix it.
 Care to enlighten me on how the resource requirments are different
 from ATA drivers?
 
 I was thinking of the hot remove (no mod ref counts) and lingering
 /sys open issues.  ATA drivers use ref counts.

I guess the hot removing is done by severing netdev from the actual
device, right?  I don't see how that affects usage of devres on network
drivers.  Am I missing something?

On a separate note, can you explain lingering /sys open issue to me a
bit?  With recent sysfs changes, sysfs nodes are disconnected
immediately on deletion.  Would that make any difference to netdevs?

 My take on devres is that it is similar to talloc() for device drivers.
 Not a bad idea in itself, but the real advantage of hierarchical allocation
 is that it makes exception handling easier if things are layered deeply.

Yeah, devres made layering easier in libata, especially SFF stuff.
Dunno how much of that is applicable to netdev but, with or without
layering, it'll be a nice cleanup and I don't see much negative side.
Conversion would take some work and bugs might be introduced in the
process as with any changes but the good thing about devres is that
you're very likely to get failure/release paths right if you get the
init path right, and if you get the init path wrong, it will stand out
like a sore thumb - easy to spot, easy to fix.

So, I think using devres on net drivers is a good idea, well, for that
matter, for any driver, but me being the devres writer, that isn't
really surprising, is it?

Thanks.

-- 
tejun
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [patch 0/5][RFC] Update network drivers to use devres

2007-08-03 Thread Stephen Hemminger
On Thu, 2 Aug 2007 15:42:06 -0700
Brandon Philips [EMAIL PROTECTED] wrote:

 This patch set adds support for devres in the net core and converts the
 e100 and e1000 drivers to devres.  Devres is a simple resource manager
 for device drivers, see Documentation/driver-model/devres.txt for more
 information.
 
 The use of devres will remain optional for drivers with this patch set.
 Drivers can be converted when it makes sense.

Just because devres exists is not sufficient motivation to change.

It seems that devres was a band-aid rather than fixing storage drivers
to have proper DMA lifetimes. 
Network devices seem to work fine thanks, and the resource requirements
are different. If ain't broke, don't fix it.
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [patch 0/5][RFC] Update network drivers to use devres

2007-08-03 Thread Brandon Philips
On 14:44 Fri 03 Aug 2007, Stephen Hemminger wrote:
 On Fri, 03 Aug 2007 20:33:04 +0900 Tejun Heo [EMAIL PROTECTED] wrote:
   Devres makes low level drivers simpler, easier to get right and
   maintain.  Writing new drivers becomes easier too.  So, why not?
  
   Network devices seem to work fine thanks, and the resource requirements
   are different. If ain't broke, don't fix it.
   Care to enlighten me on how the resource requirments are different
   from ATA drivers?
   
   I was thinking of the hot remove (no mod ref counts) and lingering
   /sys open issues.  ATA drivers use ref counts.
  
  I guess the hot removing is done by severing netdev from the actual
  device, right?  I don't see how that affects usage of devres on network
  drivers.  Am I missing something?
 
 The issue is that device may be removed at any time. So you can't rely
 on module ref counts to save you. And netdevice structure must still
 linger after module is removed, till dev ref count goes to zero.

These patches allow the net_device to linger.  The code calls
free_netdev on device removal just as before.

This is how the net_device is handled on device removal by these
patches:

+static void devm_free_netdev(struct device *gendev, void *res)
+{
+   struct net_device *dev = dev_get_drvdata(gendev);
+   free_netdev(dev);
+}

  On a separate note, can you explain lingering /sys open issue to me a
  bit?  With recent sysfs changes, sysfs nodes are disconnected
  immediately on deletion.  Would that make any difference to netdevs?
 
 Examples are in Documentation/networking/netdevices.txt

Isn't this the same problem as above?  The net_device structure must
stay around if there are still references to it and it does.  

Or am I missing something?

Thanks,

Brandon
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[patch 0/5][RFC] Update network drivers to use devres

2007-08-02 Thread Brandon Philips
This patch set adds support for devres in the net core and converts the
e100 and e1000 drivers to devres.  Devres is a simple resource manager
for device drivers, see Documentation/driver-model/devres.txt for more
information.

The use of devres will remain optional for drivers with this patch set.
Drivers can be converted when it makes sense.

Builds on top of f0a664bbd1839fbe9f57564983f39bfc6c6f931d in Linus' tree
which renames __pci_reenable_device() to pci_reenable_device()

-- 
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html