lkml.org 
[lkml]   [2022]   [Apr]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH v2 03/12] cxl/core: Refactor a cxl_lock_class() out of cxl_nested_lock()
    From
    Date
    In preparation for upleveling device_lock() lockdep annotation support into
    the core, provide a helper to retrieve the lock class. This lock_class
    will be used with device_set_lock_class() to identify the CXL nested
    locking rules.

    Cc: Alison Schofield <alison.schofield@intel.com>
    Cc: Vishal Verma <vishal.l.verma@intel.com>
    Cc: Ira Weiny <ira.weiny@intel.com>
    Cc: Ben Widawsky <ben.widawsky@intel.com>
    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Reviewed-by: Dave Jiang <dave.jiang@intel.com>
    Reviewed-by: Kevin Tian <kevin.tian@intel.com>
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    ---
    drivers/cxl/cxl.h | 19 +++++++++++--------
    1 file changed, 11 insertions(+), 8 deletions(-)

    diff --git a/drivers/cxl/cxl.h b/drivers/cxl/cxl.h
    index 990b6670222e..c9fda9304c54 100644
    --- a/drivers/cxl/cxl.h
    +++ b/drivers/cxl/cxl.h
    @@ -418,13 +418,12 @@ enum cxl_lock_class {
    */
    };

    -static inline void cxl_nested_lock(struct device *dev)
    +static inline int cxl_lock_class(struct device *dev)
    {
    if (is_cxl_port(dev)) {
    struct cxl_port *port = to_cxl_port(dev);

    - mutex_lock_nested(&dev->lockdep_mutex,
    - CXL_PORT_LOCK + port->depth);
    + return CXL_PORT_LOCK + port->depth;
    } else if (is_cxl_decoder(dev)) {
    struct cxl_port *port = to_cxl_port(dev->parent);

    @@ -432,14 +431,18 @@ static inline void cxl_nested_lock(struct device *dev)
    * A decoder is the immediate child of a port, so set
    * its lock class equal to other child device siblings.
    */
    - mutex_lock_nested(&dev->lockdep_mutex,
    - CXL_PORT_LOCK + port->depth + 1);
    + return CXL_PORT_LOCK + port->depth + 1;
    } else if (is_cxl_nvdimm_bridge(dev))
    - mutex_lock_nested(&dev->lockdep_mutex, CXL_NVDIMM_BRIDGE_LOCK);
    + return CXL_NVDIMM_BRIDGE_LOCK;
    else if (is_cxl_nvdimm(dev))
    - mutex_lock_nested(&dev->lockdep_mutex, CXL_NVDIMM_LOCK);
    + return CXL_NVDIMM_LOCK;
    else
    - mutex_lock_nested(&dev->lockdep_mutex, CXL_ANON_LOCK);
    + return CXL_ANON_LOCK;
    +}
    +
    +static inline void cxl_nested_lock(struct device *dev)
    +{
    + mutex_lock_nested(&dev->lockdep_mutex, cxl_lock_class(dev));
    }

    static inline void cxl_nested_unlock(struct device *dev)
    \
     
     \ /
      Last update: 2022-04-13 08:14    [W:3.179 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site