Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp1071410imm; Fri, 17 Aug 2018 11:18:22 -0700 (PDT) X-Google-Smtp-Source: AA+uWPy+6iNB3Tn4WKEseLCuYVneIDIvZUkEsK1Z640ACssy5O+YukpLBIYb84Y3zkBenRURNpTY X-Received: by 2002:a62:15c8:: with SMTP id 191-v6mr37390193pfv.194.1534529902628; Fri, 17 Aug 2018 11:18:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1534529902; cv=none; d=google.com; s=arc-20160816; b=qBSJJhGTdUbJBFZUP9B0s9YwgwpehtQA6TyXLTa+gxMs7TvkBC+yUBuTBHe96og/0y Sy2AyK52n0DtmaZqK/QO0bCMr5BaWt1xBUXBF8DkNGnY8JpZsixeIoNN5Tlif/6OIGjT fjQp3/pAnN2Qwqp3CVCg8TR30Da+20rY4DJmHIlrZ6wg1gA917AdEor70HMJWAkHigLs U/z8bujX6KvB7ELLLrDWU2zEcj5Z+bZvrMmVSvOlYTf2gvoGtg35FFp1L4kPDoWGTyA2 Sdj1wY+ab5+8OqLPwbUjS09HMKk3RxWcv4+SKDG4l5ZkE/YTppAX9IABX4SkWU186gnN l9WA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=eHtlWVJIeHldGIdznuE6PwGSd3umEhI7ninyVxBGU9A=; b=IL4JBMXxWjLgC8aB+CGnpJ25wY5/8uO84Kg6H19Z/PmwtwDT6L0FKhcE9GqdU+gPUT 8pdfF314wqTKInyJJG2hWjNd8ne2I4+eDpgDyghU8w5Ygsec0dL4pURI3P+RqYn9T5TV 6prHvbHVodiX4dxo9bBIx2WHnpRByd4fJa2i8In5XC3T5FjPuemkskjFWmPma5ujeruf m1bwxdvmFrj2fJ6b/lHU8uCLA2go/yqe9/j8i23WdxkmzoWP5GPt+x5B1uFid+4/Y8Lj kt2yiHbc05s3O6glaDY94zeRpuQ8h7uzbG/Fwqx6UDd272Z4fTJfJ0lkhJtchxG2s8GV vvrQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y4-v6si731250pgk.583.2018.08.17.11.17.43; Fri, 17 Aug 2018 11:18:22 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727824AbeHQVT0 (ORCPT + 99 others); Fri, 17 Aug 2018 17:19:26 -0400 Received: from bmailout1.hostsharing.net ([83.223.95.100]:46673 "EHLO bmailout1.hostsharing.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726888AbeHQVTZ (ORCPT ); Fri, 17 Aug 2018 17:19:25 -0400 Received: from h08.hostsharing.net (h08.hostsharing.net [83.223.95.28]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "*.hostsharing.net", Issuer "COMODO RSA Domain Validation Secure Server CA" (not verified)) by bmailout1.hostsharing.net (Postfix) with ESMTPS id 051F730000F3C; Fri, 17 Aug 2018 20:15:01 +0200 (CEST) Received: by h08.hostsharing.net (Postfix, from userid 100393) id AB65D15647C; Fri, 17 Aug 2018 20:15:01 +0200 (CEST) Date: Fri, 17 Aug 2018 20:15:01 +0200 From: Lukas Wunner To: Bjorn Helgaas Cc: Benjamin Herrenschmidt , linux-pci@vger.kernel.org, Hari Vyas , Ray Jui , Srinath Mannam , Guenter Roeck , Jens Axboe , Konstantin Khlebnikov , Marta Rybczynska , Pierre-Yves Kerbrat , linux-kernel@vger.kernel.org Subject: Re: [RFC PATCH 2/6] pci: Set pci_dev->is_added before calling device_add Message-ID: <20180817181501.m4j7jibzsrgljmlj@wunner.de> References: <20180817044902.31420-1-benh@kernel.crashing.org> <20180817044902.31420-3-benh@kernel.crashing.org> <20180817162534.GD128050@bhelgaas-glaptop.roam.corp.google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180817162534.GD128050@bhelgaas-glaptop.roam.corp.google.com> User-Agent: NeoMutt/20170113 (1.7.2) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Aug 17, 2018 at 11:25:34AM -0500, Bjorn Helgaas wrote: > The "bind driver, then set dev->added = 1" order seems to have been > there since the beginning of dev->is_added: > > http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=8a1bc9013a03 > > This patch seems reasonable, but I'm a little dubious about the > existence of "is_added" in the first place. As far as I can tell, the > only other buses with something similar are the MEN Chameleon bus and > the Intel Management Engine Interface. > > The PCI uses of "is_added" don't seem *that* critical or unique to > PCI, so I'm not 100% convinced we need it at all. But I haven't > looked into it enough to be able to propose an alternative. Addition of new PCI devices, e.g. on boot or on hotplug, consists of two stages: First, new devices are created by pci_scan_slot(), afterwards they're bound to a driver by pci_bus_add_devices(). The idea is that the bus is scanned in full before drivers are attached to devices. In the second step, i.e. in pci_bus_add_devices(), the is_added flag is set on devices. The flag is significant because pci_scan_slot() returns the number of newly discovered PCI functions in the given slot, and it calculates that number based on the is_added flag. More specifically, it invokes pci_scan_single_device() which either returns an existing device or a newly created device. The is_added flag is basically a way for pci_scan_single_device() to communicate back to pci_scan_slot() which of the two code paths it took. The two steps (enumeration and driver attachment) are protected by pci_lock_rescan_remove(). Initially, when a pci_dev is newly allocated with kzalloc(), is_added is 0. The transition from 0 to 1 happens while under pci_lock_rescan_remove(). When that lock is released, is_added is always 1, barring a device_attach() error, in which case it will remain at 0. AFAICS, there is no second mutex needed to ensure synchronization of is_added, the existing mutex should be sufficient and the only problem are RMW races when accessing adjacent flags. Those were correctly addressed by Hari's patch. Benjamin seems to be alleging that concurrency issues exist beyond the RMW races, I fail to see them, sorry. Thanks, Lukas