> 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

Reply via email to