remarkable-linux/include
Jiri Pirko fc56be47da devlink: convert occ_get op to separate registration
This resolves race during initialization where the resources with
ops are registered before driver and the structures used by occ_get
op is initialized. So keep occ_get callbacks registered only when
all structs are initialized.

The example flows, as it is in mlxsw:
1) driver load/asic probe:
   mlxsw_core
      -> mlxsw_sp_resources_register
        -> mlxsw_sp_kvdl_resources_register
          -> devlink_resource_register IDX
   mlxsw_spectrum
      -> mlxsw_sp_kvdl_init
        -> mlxsw_sp_kvdl_parts_init
          -> mlxsw_sp_kvdl_part_init
            -> devlink_resource_size_get IDX (to get the current setup
                                              size from devlink)
        -> devlink_resource_occ_get_register IDX (register current
                                                  occupancy getter)
2) reload triggered by devlink command:
  -> mlxsw_devlink_core_bus_device_reload
    -> mlxsw_sp_fini
      -> mlxsw_sp_kvdl_fini
	-> devlink_resource_occ_get_unregister IDX
    (struct mlxsw_sp *mlxsw_sp is freed at this point, call to occ get
     which is using mlxsw_sp would cause use-after free)
    -> mlxsw_sp_init
      -> mlxsw_sp_kvdl_init
        -> mlxsw_sp_kvdl_parts_init
          -> mlxsw_sp_kvdl_part_init
            -> devlink_resource_size_get IDX (to get the current setup
                                              size from devlink)
        -> devlink_resource_occ_get_register IDX (register current
                                                  occupancy getter)

Fixes: d9f9b9a4d0 ("devlink: Add support for resource abstraction")
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2018-04-08 12:45:57 -04:00
..
acpi Merge branches 'acpi-battery', 'acpi-doc' and 'acpi-pmic' 2018-04-02 10:58:13 +02:00
asm-generic arm64 updates for 4.17 2018-04-04 16:01:43 -07:00
clocksource clocksource: Remove metag generic timer driver 2018-02-23 14:30:20 +00:00
crypto crypto: api - Remove unused crypto_type lookup function 2018-03-31 01:32:57 +08:00
drm Linux 4.16-rc7 2018-03-28 14:30:41 +10:00
dt-bindings media updates for v4.17-rc1 2018-04-03 17:16:59 -07:00
keys
kvm KVM: arm/arm64: Reset mapped IRQs on VM reset 2018-03-14 18:29:14 +00:00
linux Char/Misc patches for 4.17-rc1 2018-04-04 20:07:20 -07:00
math-emu
media media updates for v4.17-rc1 2018-04-03 17:16:59 -07:00
memory
misc
net devlink: convert occ_get op to separate registration 2018-04-08 12:45:57 -04:00
pcmcia
ras
rdma Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-04-01 19:49:34 -04:00
scsi SCSI fixes on 20180327 2018-03-27 14:11:46 -10:00
soc ARC fixes for 4.16-rc4 2018-03-01 14:32:23 -08:00
sound Linux 4.16-rc7 2018-03-28 14:30:41 +10:00
target
trace Cleanups and bugfixes for ext4, including some fixes to make ext4 more 2018-04-04 14:19:24 -07:00
uapi Char/Misc patches for 4.17-rc1 2018-04-04 20:07:20 -07:00
video
xen