From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qv1-f41.google.com (mail-qv1-f41.google.com [209.85.219.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 926B0450FE for ; Sat, 21 Feb 2026 04:30:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.41 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771648220; cv=none; b=nRipzoyGF4atlKrCp3sajE2Vc1GDEEqAHsHPDRJ282G2Hgttq6pBcxgHM3IdmsNJcwupisnp3V54NBSPLA738/kLgPUqgtWIJ64MMarCMJe4fWoLcSUC4osixwrIZzjb83xwp8mlzTvwtgXM0IGxszgKzRvLSY+B6R0msyvg4XI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771648220; c=relaxed/simple; bh=SOBRjeasEkoGzAMnYXxXZWlhxYUAK095a9xfC1Y0/so=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=GLNTzZOjM8s+fIwu9fWP3KuiMzqESCa9VsaibNf95DEuhHvjYqcuau9hPqLnkM5VsbGIGY1SK9fPPwQmzOvyCRd1gFZ05WTRiHFQlPJbCSvcxp2GgHdMg6LijlazOAITXbwphHhlquV/pYHsHfCESbO9fKLrSVRbMM/VFqm/zWY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=gourry.net; spf=pass smtp.mailfrom=gourry.net; dkim=pass (2048-bit key) header.d=gourry.net header.i=@gourry.net header.b=OgDcyq+D; arc=none smtp.client-ip=209.85.219.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=gourry.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gourry.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gourry.net header.i=@gourry.net header.b="OgDcyq+D" Received: by mail-qv1-f41.google.com with SMTP id 6a1803df08f44-8972a14e27bso35128766d6.2 for ; Fri, 20 Feb 2026 20:30:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gourry.net; s=google; t=1771648217; x=1772253017; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=9ix5JV8eP/LnMAYYaOupAc+ixUwINu+P3fRblxKT0WY=; b=OgDcyq+D+O0lkKLa/aPRh73GcJCSuUONsX7jM95bsqxL0iw0SQHG9pr89M2S++JJ6G DR/gjK981FEvzdllCL0nHENQbKjex6tLPoRsptLiYifY4VpGdxd5j/da2hcUfpJq/6XD bVjkrHbL9QwWohI2m9CCf2ETRzrrQhPB1CGzbNe0bWFz83co1S18r+UQyHJ3ZCo7bUJY nhkD9m9MmERsf4wPzB0v9u9k6KZumPDgihpr7VOSjPe99704+LGVutfRYi7l8qJ3TIJP 5Vk3o3E7Hmf+xadR2QhDYfCZAQHGol0XYiKi0jeowmYoDqvXFvfu0LnIU//h08ShSbdu 8d8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771648217; x=1772253017; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=9ix5JV8eP/LnMAYYaOupAc+ixUwINu+P3fRblxKT0WY=; b=jhGLA1/BZII2Y0JHZeSPj3GxWuWtmGSMboxZhvpSl7qB26Rtqv7+rUAwv71yDj5wD2 AlbjjwJJdmsMO6EMcL7GpGl8CoYjmH8TzquB28UM+aSl1oNlsZIflytFwhFBDEIpi5Gh P/NijDGUIDcuuN+yC8mOuHoqTPbKhO6HBtKiVO1/RXOVfqXIhUoglJWkUDs3hgeh29lY hDABFMEoQY2xgrcHoLcp9IZaNdNqXqV/aGj0ETp2v/lwc8jYrEQo166EyI7XDoIJwYk1 Foa7snNL/aUbChezj5GonnrukOuFqh1jUSYD6zgQBEpKNbP9aiwtx1BU2GvbavhTtEk2 za6g== X-Gm-Message-State: AOJu0YzRzXr9kL3yFhi/3zWYuiyjBkc1AX9aD/03MtalL1HZqUsW/NRx +7O9VSkXaLXYHi+Kl/F1cvbjL8Kx1DwTVAxJgahl5LGnFYvqLqoxU0i2fcFJrrGyt/I= X-Gm-Gg: AZuq6aKrRGXsEMk9xECH6iKLP90h9jDvdf3Cznr8Fsf643ectt0smqu0TnQd7AlaRP8 YqH2ttyY2axi+7i5GDh+3NkCjidoehVI5Z6/EPO9ukgfe4Fc/9pmFFpVMQ0TxhE97+8kxkJLhcq +VnmTKIdk1O0wVqiApOv8ZOx6YqpvQlrfu/zBXHVDuKJ8h11VcY6aZO7+WvyQNCx44xQcVvO+7/ pWo+BDu1r6gKd7tuTb9YOOnlHFrNu9PHOaJu7KvKaK9MMjDW254I/14Ri0s+oDaZVHRAPAjS6MH 0VC12d5nDhNNAG+Of2DxAJrb7TOtK4VOFgjdMVNcUjz76Ym3MS4MIpImCuZQmn0ftbAWTONwTTC ayvpVODNNDcf7gqL1jNvVj8iGQs0ZC+Kloc9e2pdQHmuWJvTVop6aFBfGCgNQchUAsRQ82MpBXy ddaYxY4krHaJ5juSsMpTWvBy/Qvy46bN2c6czoFHSmY3Ko9PosbXIrBE7/dyYViih44/ZPJLpQY +kL0MWSclZgb/s= X-Received: by 2002:ac8:7d82:0:b0:506:be2c:a96d with SMTP id d75a77b69052e-5070bb816ffmr32009951cf.3.1771648217535; Fri, 20 Feb 2026 20:30:17 -0800 (PST) Received: from gourry-fedora-PF4VCD3F.lan (pool-96-255-20-138.washdc.ftas.verizon.net. [96.255.20.138]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-5070d6a1e6fsm9984991cf.16.2026.02.20.20.30.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Feb 2026 20:30:17 -0800 (PST) From: Gregory Price To: linux-cxl@vger.kernel.org Cc: linux-kernel@vger.kernel.org, kernel-team@meta.com, dave@stgolabs.net, jonathan.cameron@huawei.com, dave.jiang@intel.com, alison.schofield@intel.com, vishal.l.verma@intel.com, ira.weiny@intel.com, dan.j.williams@intel.com Subject: [PATCH 1/2] cxl/region: fix region leak when attach_target fails in cxl_add_to_region Date: Fri, 20 Feb 2026 23:30:12 -0500 Message-ID: <20260221043013.1420169-1-gourry@gourry.net> X-Mailer: git-send-email 2.53.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit cxl_add_to_region() ignores the return value of attach_target(). When attach_target() fails (e.g. cxl_port_setup_targets() returns -ENXIO), the auto-discovered region remains registered with its HPA resource consumed but never reaches COMMIT state. Subsequent region creation attempts fail with -ENOSPC because the HPA range is already reserved. Track whether this call to cxl_add_to_region() created the region, and call drop_region() on attach_target() failure to unregister it and release the HPA resource. Pre-existing regions are left alone since other endpoints may already be attached. Signed-off-by: Gregory Price --- drivers/cxl/core/region.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c index 385be9cb44cd..276046d49f88 100644 --- a/drivers/cxl/core/region.c +++ b/drivers/cxl/core/region.c @@ -3923,6 +3923,7 @@ int cxl_add_to_region(struct cxl_endpoint_decoder *cxled) struct cxl_region_context ctx; struct cxl_region_params *p; bool attach = false; + bool newly_created = false; int rc; ctx = (struct cxl_region_context) { @@ -3946,15 +3947,23 @@ int cxl_add_to_region(struct cxl_endpoint_decoder *cxled) mutex_lock(&cxlrd->range_lock); struct cxl_region *cxlr __free(put_cxl_region) = cxl_find_region_by_range(cxlrd, &ctx.hpa_range); - if (!cxlr) + if (!cxlr) { cxlr = construct_region(cxlrd, &ctx); + newly_created = !IS_ERR(cxlr); + } mutex_unlock(&cxlrd->range_lock); rc = PTR_ERR_OR_ZERO(cxlr); if (rc) return rc; - attach_target(cxlr, cxled, -1, TASK_UNINTERRUPTIBLE); + rc = attach_target(cxlr, cxled, -1, TASK_UNINTERRUPTIBLE); + if (rc) { + /* If endpoint was just created, tear it down to release HPA */ + if (newly_created) + drop_region(cxlrd, cxlr); + return rc; + } scoped_guard(rwsem_read, &cxl_rwsem.region) { p = &cxlr->params; @@ -3972,7 +3981,7 @@ int cxl_add_to_region(struct cxl_endpoint_decoder *cxled) p->res); } - return rc; + return 0; } EXPORT_SYMBOL_NS_GPL(cxl_add_to_region, "CXL"); -- 2.47.3