]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
cxl: Test CXL_DECODER_F_LOCK as a bitmask
authorAlison Schofield <alison.schofield@intel.com>
Mon, 23 Feb 2026 19:13:39 +0000 (11:13 -0800)
committerDave Jiang <dave.jiang@intel.com>
Tue, 24 Feb 2026 15:33:30 +0000 (08:33 -0700)
The CXL decoder flags are defined as bitmasks, not bit indices.
Using test_bit() to check them interprets the mask value as a bit
index, which is the wrong test.

For CXL_DECODER_F_LOCK the test reads beyond the defined bits, causing
the test to always return false and allowing resets that should have
been blocked.

Replace test_bit() with a bitmask check.

Fixes: 2230c4bdc412 ("cxl: Add handling of locked CXL decoder")
Signed-off-by: Alison Schofield <alison.schofield@intel.com>
Reviewed-by: Gregory Price <gourry@gourry.net>
Tested-by: Gregory Price <gourry@gourry.net>
Link: https://patch.msgid.link/98851c4770e4631753cf9f75b58a3a6daeca2ea2.1771873256.git.alison.schofield@intel.com
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
drivers/cxl/core/hdm.c
drivers/cxl/core/region.c

index e3f0c39e6812462bf98ef944f241f1ae5caaa929..c222e98ae7364cb54bc6d40237e121003d9776ee 100644 (file)
@@ -904,7 +904,7 @@ static void cxl_decoder_reset(struct cxl_decoder *cxld)
        if ((cxld->flags & CXL_DECODER_F_ENABLE) == 0)
                return;
 
-       if (test_bit(CXL_DECODER_F_LOCK, &cxld->flags))
+       if (cxld->flags & CXL_DECODER_F_LOCK)
                return;
 
        if (port->commit_end == id)
index fec37af1dfbf836a7a922a90840e6b71eadc9de8..780ec947ecf242eabac59603f853849fcc37a549 100644 (file)
@@ -1100,7 +1100,7 @@ static int cxl_rr_assign_decoder(struct cxl_port *port, struct cxl_region *cxlr,
 static void cxl_region_setup_flags(struct cxl_region *cxlr,
                                   struct cxl_decoder *cxld)
 {
-       if (test_bit(CXL_DECODER_F_LOCK, &cxld->flags)) {
+       if (cxld->flags & CXL_DECODER_F_LOCK) {
                set_bit(CXL_REGION_F_LOCK, &cxlr->flags);
                clear_bit(CXL_REGION_F_NEEDS_RESET, &cxlr->flags);
        }