From patchwork Wed Feb 12 02:52:52 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yijing Wang X-Patchwork-Id: 3633791 X-Patchwork-Delegate: bhelgaas@google.com Return-Path: X-Original-To: patchwork-linux-pci@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id B494B9F38E for ; Wed, 12 Feb 2014 02:53:28 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id C1631201CE for ; Wed, 12 Feb 2014 02:53:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E490E2015D for ; Wed, 12 Feb 2014 02:53:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751818AbaBLCxZ (ORCPT ); Tue, 11 Feb 2014 21:53:25 -0500 Received: from szxga02-in.huawei.com ([119.145.14.65]:12635 "EHLO szxga02-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752333AbaBLCxY (ORCPT ); Tue, 11 Feb 2014 21:53:24 -0500 Received: from 172.24.2.119 (EHLO szxeml214-edg.china.huawei.com) ([172.24.2.119]) by szxrg02-dlp.huawei.com (MOS 4.3.7-GA FastPath queued) with ESMTP id BPR84836; Wed, 12 Feb 2014 10:53:22 +0800 (CST) Received: from SZXEML413-HUB.china.huawei.com (10.82.67.152) by szxeml214-edg.china.huawei.com (172.24.2.29) with Microsoft SMTP Server (TLS) id 14.3.158.1; Wed, 12 Feb 2014 10:53:22 +0800 Received: from localhost (10.177.27.212) by szxeml413-hub.china.huawei.com (10.82.67.152) with Microsoft SMTP Server id 14.3.158.1; Wed, 12 Feb 2014 10:53:13 +0800 From: Yijing Wang To: Bjorn Helgaas CC: , , Yijing Wang , Hanjun Guo Subject: [PATCH part1 v6 6/7] PCI: Check pci device serial number when scan device Date: Wed, 12 Feb 2014 10:52:52 +0800 Message-ID: <1392173573-59844-7-git-send-email-wangyijing@huawei.com> X-Mailer: git-send-email 1.7.11.msysgit.1 In-Reply-To: <1392173573-59844-1-git-send-email-wangyijing@huawei.com> References: <1392173573-59844-1-git-send-email-wangyijing@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.177.27.212] X-CFilter-Loop: Reflected Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org X-Spam-Status: No, score=-7.5 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Sometimes pci device will be removed and reinsert while suspended. In this case system can not identify the device has been changed. Now PCIe support Device Serial Number Capability which has the unique number. So make system check pci device DSN during scanning device if support. Signed-off-by: Yijing Wang --- drivers/pci/probe.c | 13 ++++++++++++- 1 files changed, 12 insertions(+), 1 deletions(-) diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 27d3e6f..370b25c 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -1383,11 +1383,22 @@ void pci_device_add(struct pci_dev *dev, struct pci_bus *bus) struct pci_dev *__ref pci_scan_single_device(struct pci_bus *bus, int devfn) { struct pci_dev *dev; + int rescan = 0; dev = pci_get_slot(bus, devfn); if (dev) { + /* only check func 0 device */ + if (PCI_FUNC(devfn) == 0) { + if (pci_serial_number_changed(dev)) { + pci_bus_freeze_device(bus); + pci_stop_and_remove_bus_device(dev); + pci_bus_unfreeze_device(bus); + rescan = 1; + } + } pci_dev_put(dev); - return dev; + if (!rescan) + return dev; } dev = pci_scan_device(bus, devfn);