From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qt1-f169.google.com (mail-qt1-f169.google.com [209.85.160.169]) (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 B2B3037E31C for ; Mon, 2 Feb 2026 16:31:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.169 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770049910; cv=none; b=d3Kak4dSpMu9eOhvKpFGlBBnMHMrQ1q+0IUeERaU8PYsHQcm7/lzuKWNv4m+UHuZUPhY6QGGtlMM3+vSEKpquQmLo/dZyHszYQ6L8xq3dExGV48NNlZseDvulEcV+ZdoaRdkPZ/kw8nQt0xu0Ju3B8uML9PLQeD4Tm9urNSbGjc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770049910; c=relaxed/simple; bh=qvi+biXwe6FWM8da1RpTJC4cSYNJHU4QdgNNfQJTM4k=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=E2Dg4RwkNK3OjyqMSx0fJ6FGngTTM1+F2Qj4sLkEAAn1QZwFDs9xQzdJ8ut/NzJ/XZYrpd7H8wEeG2wnCqjgmcJF/K/SMH6+8SdGIL0I/xtNtWnSYvkBiURLVLFMxgvlpnPiDuP9gjLqVWN8dvja7iFxq+4s+CqpUEYtJJ423Ss= 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=hwXU0YuR; arc=none smtp.client-ip=209.85.160.169 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="hwXU0YuR" Received: by mail-qt1-f169.google.com with SMTP id d75a77b69052e-5032e15525aso48715831cf.3 for ; Mon, 02 Feb 2026 08:31:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gourry.net; s=google; t=1770049908; x=1770654708; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=MXzbOKFasJtsE3W1t/WL97dojQDtu1zyO4HLMoJcfwU=; b=hwXU0YuRDFXF7swuQ/aSR118e0vvKNQc7aB9yiiyCDWiU+u+SD1Zu9eTVjuYJ2KURH XOKdst23+jN3E1zTDRyRPnhLP9LCN3vQq+XuSFlnwPrbJvK8vewAw+EsZC8zs4qCyws3 ooBFsYa77WWSJBuIQ8cZyaXCHdwbct8PV72z5VOiAD49bC8uQnEzCPL8ghcNVbA58Br9 h6lJfYIafwFUEoLIHKr9GHt6QBC/Jr9lA2vl1d2QK7iHXAf7DLvKAvwv+EdHvk7/U6UQ shE5mIl83dqKHvzNC2JIlC1nTb2MQAYaP8fcovtvkFfDAaQveJN8LOzL1jFyDtoT+aUR 48PA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770049908; x=1770654708; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MXzbOKFasJtsE3W1t/WL97dojQDtu1zyO4HLMoJcfwU=; b=Z7tPmkvLHXEXtuO/4EWRaaOwjEUPvfQekKgvUXglr0uIBD8KZ1fchIIjmWfZyboyEI GzUv3Js/cdxW8+/u0Q81zZCxr7QD9SlOFn+Dl0ksARRZclLxClMWrQG4P0VtvAUHZ0HE k663336NWwdDMc8ud7kDnFgzW8UN3Sw82hYDByzMEbCIPXBPKl66r6uiFnfkNa/OXuid f6TydOE7iSBJRS2f21i6Oss5EXnEursZcY2DoHRVBM0tycxBR6o0OiqxSntheAwzplJw qQQl2S5xEGEOrGeDfuY6Hd4CVfl2wgnnP3h+nr6m0MpZDf+Xuz/tCh7fjUfULkqfm5zk ra6Q== X-Forwarded-Encrypted: i=1; AJvYcCXv1vIdFxbQy8aFHVcsNQUHi4Oitk5WRs6FEVTzD+5sLlkGsPCRl1eQYglftIdJLJX3V6oREUqbXJM4S/E=@vger.kernel.org X-Gm-Message-State: AOJu0YxYQ3you/JgDW3arX0Sg1wGHVhe/3PReIQOz8njer7IsYrQ1jUf 253E85xgTasXjFPMODIZGbfE8xIk3YPiF6sLI5TrE+O+HTiWwQrJPbu2DLA7B0moLdM= X-Gm-Gg: AZuq6aI2cr5yEkLXywJDWI+w++ScCD43pqDzeUWtfmOvV/ZMwqa8InQXFQj27UFruOn AKG+NfMja/ebcyJjs6JjlRZ333TgLsoda9At3I8cemmQb3zeAYA/5AOfvrZM6n48UkxfSUUgXdv XElC36Qt1x3blLjAV/qwtWa9Y53bn58RFStlXsfaUpW9sFZYEmFf3JVO4pzwlkOCg1s52zxgGtV giqf3h+zdxXgPXPmLP5ATPT0zwwPEXmPQwmY84xQcLwYrJURHsEg6+hTusOrJkvXnWMFOdownEd 0D6J/JrldulmtRVmLTlX4E5bL/npqJMQxvCdj3bHeTOdyadAGMizGJOfChD9OlovopYiRw6/wMd AEsrW1je+i1zx/YRzuYhgSQLJu7gpcUMGECLHgbzi7A28L3xKF9XOwgi/vnHmTdnwkkp0ZfaL+9 22lfmxkNT4nIVGh2jslAzdS+JDoA04+4xru8AITIGR8t2RbvYRh804MaXOefyq/VGoYBSJNCl3Y PwehWg7 X-Received: by 2002:ac8:58d6:0:b0:4ff:c17b:5ab0 with SMTP id d75a77b69052e-505d21535fcmr160477531cf.9.1770049907521; Mon, 02 Feb 2026 08:31:47 -0800 (PST) Received: from gourry-fedora-PF4VCD3F (pool-96-255-20-138.washdc.ftas.verizon.net. [96.255.20.138]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-894d36c47f0sm134601156d6.13.2026.02.02.08.31.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Feb 2026 08:31:47 -0800 (PST) Date: Mon, 2 Feb 2026 11:31:45 -0500 From: Gregory Price To: Li Ming Cc: 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, linux-cxl@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 2/2] cxl/core: Hold grandparent port lock while dport adding Message-ID: References: <20260201093002.1281858-1-ming.li@zohomail.com> <20260201093002.1281858-3-ming.li@zohomail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260201093002.1281858-3-ming.li@zohomail.com> On Sun, Feb 01, 2026 at 05:30:02PM +0800, Li Ming wrote: > When CXL subsystem adds a cxl port to a hierarchy, there is a small > window where the new port becomes visible before it is bound to a > driver. This happens because device_add() adds a device to bus device > list before bus_probe_device() binds it to a driver. > So if two cxl memdevs are trying to add a dport to a same port via > devm_cxl_enumerate_ports(), the second cxl memdev may observe the port > and attempt to add a dport, but fails because the port has not yet been > attached to cxl port driver. > the sequence is like: > > CPU 0 CPU 1 > devm_cxl_enumerate_ports() > # port not found, add it > add_port_attach_ep() > # hold the parent port lock > # to add the new port > devm_cxl_create_port() > device_add() > # Add dev to bus devs list > bus_add_device() > devm_cxl_enumerate_ports() > # found the port > find_cxl_port_by_uport() > # hold port lock to add a dport > device_lock(the port) > find_or_add_dport() > cxl_port_add_dport() > return -ENXIO because port->dev.driver is NULL > device_unlock(the port) > bus_probe_device() > # hold the port lock > # for attaching > device_lock(the port) > attaching the new port > device_unlock(the port) > > To fix this race, require that dport addition holds the parent port lock > of the target port. The CXL subsystem already requires holding the > parent port lock while attaching a new port. Therefore, successfully > acquiring the parent port lock ganrantees that port attaching has > completed. > With just a a cursory look, I'm immediately concerned that you're fixing a race condition with a lock inversion. Can you guarantee the following is not happening Thread A Thread B ---------------------------- lock(parent) lock(port) lock(port) lock(parent) ~Gregory