> Now if I insert a return -ENOMEM right after allocating tx_ring: > --- a/drivers/net/e1000/e1000_main.c > +++ b/drivers/net/e1000/e1000_main.c > @@ -1356,6 +1356,8 @@ e1000_alloc_queues(struct e1000_adapter > *adapter) { > adapter->tx_ring = kcalloc(adapter->num_tx_queues, > sizeof(struct > e1000_tx_ring), GFP_KERNEL); > + > + return -ENOMEM; > if (!adapter->tx_ring) > return -ENOMEM; > > #insmod > DEVRES ADD f7a80e80 pcim_release (8 bytes) DEVRES ADD > f7a80ca0 devm_free_netdev (4 bytes) DEVRES ADD eb7f0080 > pcim_iomap_release (24 bytes) DEVRES ADD eb7f0000 > devm_kzalloc_release (40 bytes) > e1000_sw_init: Unable to allocate memory for queues DEVRES > REL eb7f0000 devm_kzalloc_release (40 bytes) DEVRES REL > eb7f0080 pcim_iomap_release (24 bytes) DEVRES REL f7a80ca0 > devm_free_netdev (4 bytes) DEVRES REL f7a80e80 pcim_release (8 bytes) > ACPI: PCI interrupt for device 0000:02:00.0 disabled > e1000: probe of 0000:02:00.0 failed with error -12 > > Since we are returning an error from probe the driver core calls > devres_release_all(dev) which releases all of the resources > in the right order. See really_probe() in drivers/base/dd.c.
This looks fine then to me. Thanks for the explanation. -PJ - 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