From patchwork Fri Jun 22 06:55:20 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiang Liu X-Patchwork-Id: 166534 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 54EDBB6FA5 for ; Fri, 22 Jun 2012 16:58:10 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1761333Ab2FVG6J (ORCPT ); Fri, 22 Jun 2012 02:58:09 -0400 Received: from mail-pz0-f46.google.com ([209.85.210.46]:42860 "EHLO mail-pz0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1761253Ab2FVG6I (ORCPT ); Fri, 22 Jun 2012 02:58:08 -0400 Received: by mail-pz0-f46.google.com with SMTP id y13so1941745dad.19 for ; Thu, 21 Jun 2012 23:58:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; bh=cOP+vJl33dZaPI/czJQUBBPTAnfDdPA9S/HboXrYxNw=; b=PpZR4UwEQgM5cc5rMUjd2jH9YKr5HjgAZjiVbid+C+oVZ9DRW12WvZmJqI7tT/rtF/ qtdBsSwJvCHM+xbnKKRxz5E26aMKfZ/Cht3oCL7XWmDZ/XlYfXamtmYy9Rplr73zb3jR ETU5jhyq5TsuQstuYiMBJgDz978c4RMEZNajlZk5Qq1rK6AjXl1ip9BYcjlcQRPwJNVb fHIETJStsF1r25rPmoKpBzXNgWXH778dkurSkqMGkdHxOZmEGefQwNWJ7hMpn+f4cME0 +/DLvtzdLSq076jmCtdjjA/sHHkQqNz4jMTLnysf7eKIyIhIiu+AkvnlHbwrvbkVxrYg D+pg== Received: by 10.68.192.73 with SMTP id he9mr7369513pbc.17.1340348288422; Thu, 21 Jun 2012 23:58:08 -0700 (PDT) Received: from localhost.localdomain ([221.221.22.188]) by mx.google.com with ESMTPS id qp9sm20540743pbc.9.2012.06.21.23.58.01 (version=TLSv1/SSLv3 cipher=OTHER); Thu, 21 Jun 2012 23:58:07 -0700 (PDT) From: Jiang Liu To: Bjorn Helgaas , Yinghai Lu , Kenji Kaneshige , Taku Izumi , Don Dutile Cc: Jiang Liu , Keping Chen , Yijing Wang , linux-pci@vger.kernel.org, Jiang Liu Subject: [PATCH v10 11/13] x86/PCI: refine __pci_mmcfg_init() for better code readability Date: Fri, 22 Jun 2012 14:55:20 +0800 Message-Id: <1340348122-29021-12-git-send-email-jiang.liu@huawei.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1340348122-29021-1-git-send-email-jiang.liu@huawei.com> References: <1340348122-29021-1-git-send-email-jiang.liu@huawei.com> Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org From: Jiang Liu Refine __pci_mmcfg_init() for better code readability. Signed-off-by: Jiang Liu --- arch/x86/pci/mmconfig-shared.c | 46 ++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/arch/x86/pci/mmconfig-shared.c b/arch/x86/pci/mmconfig-shared.c index 332fabd..ffe72b9 100644 --- a/arch/x86/pci/mmconfig-shared.c +++ b/arch/x86/pci/mmconfig-shared.c @@ -544,8 +544,6 @@ static void __init pci_mmcfg_reject_broken(int early) } } -static int __initdata known_bridge; - static int __init acpi_mcfg_check_entry(struct acpi_table_mcfg *mcfg, struct acpi_mcfg_allocation *cfg) { @@ -617,28 +615,7 @@ static int __init pci_parse_mcfg(struct acpi_table_header *header) static void __init __pci_mmcfg_init(int early) { - /* MMCONFIG disabled */ - if ((pci_probe & PCI_PROBE_MMCONF) == 0) - return; - - /* MMCONFIG already enabled */ - if (!early && !(pci_probe & PCI_PROBE_MASK & ~PCI_PROBE_MMCONF)) - return; - - /* for late to exit */ - if (known_bridge) - return; - - if (early) { - if (pci_mmcfg_check_hostbridge()) - known_bridge = 1; - } - - if (!known_bridge) - acpi_sfi_table_parse(ACPI_SIG_MCFG, pci_parse_mcfg); - pci_mmcfg_reject_broken(early); - if (list_empty(&pci_mmcfg_list)) return; @@ -660,14 +637,33 @@ static void __init __pci_mmcfg_init(int early) } } +static int __initdata known_bridge; + void __init pci_mmcfg_early_init(void) { - __pci_mmcfg_init(1); + if (pci_probe & PCI_PROBE_MMCONF) { + if (pci_mmcfg_check_hostbridge()) + known_bridge = 1; + else + acpi_sfi_table_parse(ACPI_SIG_MCFG, pci_parse_mcfg); + __pci_mmcfg_init(1); + } } void __init pci_mmcfg_late_init(void) { - __pci_mmcfg_init(0); + /* MMCONFIG disabled */ + if ((pci_probe & PCI_PROBE_MMCONF) == 0) + return; + + if (known_bridge) + return; + + /* MMCONFIG hasn't been enabled yet, try again */ + if (pci_probe & PCI_PROBE_MASK & ~PCI_PROBE_MMCONF) { + acpi_sfi_table_parse(ACPI_SIG_MCFG, pci_parse_mcfg); + __pci_mmcfg_init(0); + } } static int __init pci_mmcfg_late_insert_resources(void)