• Ido Schimmel's avatar
    mlxsw: spectrum_switchdev: Add MDB entries in prepare phase · d4d0e409
    Ido Schimmel authored
    The driver cannot guarantee in the prepare phase that it will be able to
    write an MDB entry to the device. In case the driver returned success
    during the prepare phase, but then failed to add the entry in the commit
    phase, a WARNING [1] will be generated by the switchdev core.
    
    Fix this by doing the work in the prepare phase instead.
    
    [1]
    [  358.544486] swp12s0: Commit of object (id=2) failed.
    [  358.550061] WARNING: CPU: 0 PID: 30 at net/switchdev/switchdev.c:281 switchdev_port_obj_add_now+0x9b/0xe0
    [  358.560754] CPU: 0 PID: 30 Comm: kworker/0:1 Not tainted 5.0.0-custom-13382-gf2449babf221 #1350
    [  358.570472] Hardware name: Mellanox Technologies Ltd. MSN2100-CB2FO/SA001017, BIOS 5.6.5 06/07/2016
    [  358.580582] Workqueue: events switchdev_deferred_process_work
    [  358.587001] RIP: 0010:switchdev_port_obj_add_now+0x9b/0xe0
    ...
    [  358.614109] RSP: 0018:ffffa6b900d6fe18 EFLAGS: 00010286
    [  358.619943] RAX: 0000000000000000 RBX: ffff8b00797ff000 RCX: 0000000000000000
    [  358.627912] RDX: ffff8b00b7a1d4c0 RSI: ffff8b00b7a152e8 RDI: ffff8b00b7a152e8
    [  358.635881] RBP: ffff8b005c3f5bc0 R08: 000000000000022b R09: 0000000000000000
    [  358.643850] R10: 0000000000000000 R11: ffffa6b900d6fcc8 R12: 0000000000000000
    [  358.651819] R13: dead000000000100 R14: ffff8b00b65a23c0 R15: 0ffff8b00b7a2200
    [  358.659790] FS:  0000000000000000(0000) GS:ffff8b00b7a00000(0000) knlGS:0000000000000000
    [  358.668820] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  358.675228] CR2: 00007f00aad90de0 CR3: 00000001ca80d000 CR4: 00000000001006f0
    [  358.683188] Call Trace:
    [  358.685918]  switchdev_port_obj_add_deferred+0x13/0x60
    [  358.691655]  switchdev_deferred_process+0x6b/0xf0
    [  358.696907]  switchdev_deferred_process_work+0xa/0x10
    [  358.702548]  process_one_work+0x1f5/0x3f0
    [  358.707022]  worker_thread+0x28/0x3c0
    [  358.711099]  ? process_one_work+0x3f0/0x3f0
    [  358.715768]  kthread+0x10d/0x130
    [  358.719369]  ? __kthread_create_on_node+0x180/0x180
    [  358.724815]  ret_from_fork+0x35/0x40
    
    Fixes: 3a49b4fd ("mlxsw: Adding layer 2 multicast support")
    Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
    Reported-by: default avatarAlex Kushnarov <alexanderk@mellanox.com>
    Tested-by: default avatarAlex Kushnarov <alexanderk@mellanox.com>
    Acked-by: default avatarJiri Pirko <jiri@mellanox.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d4d0e409
spectrum_switchdev.c 94.6 KB