sfc: Fix null function pointer in efx_sriov_channel_type
authorBen Hutchings <bhutchings@solarflare.com>
Tue, 2 Oct 2012 00:43:45 +0000 (01:43 +0100)
committerBen Hutchings <bhutchings@solarflare.com>
Tue, 2 Oct 2012 00:57:25 +0000 (01:57 +0100)
Commit c31e5f9 ('sfc: Add channel specific receive_skb handler and
post_remove callback') added the function pointer field
efx_channel_type::post_remove and an unconditional call through it.

This field should have been initialised to efx_channel_dummy_op_void
in the existing instances of efx_channel_type, but this was only done
in efx_default_channel_type.  Consequently, if a device has SR-IOV
enabled then removing the driver or device will result in an oops.

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
drivers/net/ethernet/sfc/siena_sriov.c

index a8f48a455849ec26619c392bda0ce504ffabca2b..d49b53dc2a500a2602093a2df63daba5c5ad2538 100644 (file)
@@ -1035,6 +1035,7 @@ efx_sriov_get_channel_name(struct efx_channel *channel, char *buf, size_t len)
 static const struct efx_channel_type efx_sriov_channel_type = {
        .handle_no_channel      = efx_sriov_handle_no_channel,
        .pre_probe              = efx_sriov_probe_channel,
+       .post_remove            = efx_channel_dummy_op_void,
        .get_name               = efx_sriov_get_channel_name,
        /* no copy operation; channel must not be reallocated */
        .keep_eventq            = true,