• Scott Feldman's avatar
    rocker: support prepare-commit transaction model · c4f20321
    Scott Feldman authored
    For rocker, support prepare-commit transaction model for setting attributes
    (and for adding objects).  This requires rocker to preallocate memory
    needed for the commit up front in the prepare phase.  Since rtnl_lock is
    held between prepare-commit, store the allocated memory on a queue hanging
    off of the rocker_port.  Also, in prepare phase, do everything right up to
    calling into HW.  The same code paths are tranversed in the driver for both
    prepare and commit phases.  In some cases, any state modified in the
    prepare phase must be reverted before returning so the commit phase makes
    the same decisions.
    
    As a consequence of holding rtnl_lock in process context for all attr sets
    (and obj adds), all memory is GFP_KERNEL allocated and we don't need to
    busy spin waiting for the device to complete the command.  So the bulk of
    this patch is simplifying the memory allocations to only use GFP_KERNEL and
    to remove the nowait flag and busy spin loop.
    Signed-off-by: default avatarScott Feldman <sfeldma@gmail.com>
    Acked-by: default avatarJiri Pirko <jiri@resnulli.us>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    c4f20321
rocker.c 140 KB