]> git.itanic.dy.fi Git - linux-stable/commit
cxl/port: Fix missing target list lock
authorDan Williams <dan.j.williams@intel.com>
Fri, 22 Dec 2023 05:05:01 +0000 (21:05 -0800)
committerDan Williams <dan.j.williams@intel.com>
Thu, 4 Jan 2024 21:59:50 +0000 (13:59 -0800)
commit5459e186a5c9f412334321cff58d70dcb0e48a04
treecac3af985a300d1ee43ffe0bb6f3a0c1fe37685e
parentd6488fee66472b468ed88d265b14aa3f04dc3bdf
cxl/port: Fix missing target list lock

cxl_port_setup_targets() modifies the ->targets[] array of a switch
decoder. target_list_show() expects to be able to emit a coherent
snapshot of that array by "holding" ->target_lock for read. The
target_lock is held for write during initialization of the ->targets[]
array, but it is not held for write during cxl_port_setup_targets().

The ->target_lock() predates the introduction of @cxl_region_rwsem. That
semaphore protects changes to host-physical-address (HPA) decode which
is precisely what writes to a switch decoder's target list affects.

Replace ->target_lock with @cxl_region_rwsem.

Now the side-effect of snapshotting a unstable view of a decoder's
target list is likely benign so the Fixes: tag is presumptive.

Fixes: 27b3f8d13830 ("cxl/region: Program target lists")
Reviewed-by: Alison Schofield <alison.schofield@intel.com>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/cxl/core/port.c
drivers/cxl/cxl.h