From patchwork Sun May 26 15:53:16 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiang Liu X-Patchwork-Id: 2616501 X-Patchwork-Delegate: bhelgaas@google.com Return-Path: X-Original-To: patchwork-linux-pci@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id 2EC3140276 for ; Sun, 26 May 2013 16:00:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754575Ab3EZP7a (ORCPT ); Sun, 26 May 2013 11:59:30 -0400 Received: from mail-pb0-f44.google.com ([209.85.160.44]:64340 "EHLO mail-pb0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754055Ab3EZP71 (ORCPT ); Sun, 26 May 2013 11:59:27 -0400 Received: by mail-pb0-f44.google.com with SMTP id wz12so5972027pbc.17 for ; Sun, 26 May 2013 08:59:26 -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=31x9Rw6Eso07q6E8J9DhAW5oo2o2GxAa2SubfjbZfEk=; b=I+PqrGF8HrgKlGnO+DcwlKXdClbBf+LaWBgSXUsvXAaVfi78yLMzMOPe4SwUQyj1pm 2F27ZjlhA4A6dHS2XFVlcyR6nEPpoz9kqnnysh72qV+HkSu0iJVDJqIK4/r0BVYDJn9A H2V456iKRdxPmvTenseW7tHvtGcncZBz+1FnoqyvwMW0Qo6qWLmZ4Jvpo1q/WcdkRCxN l2kEQ4TawWwd1eCz2uRGHSIEmh4Jpt1B81HoV6jt+gMpQ3CNTl8bOEa5tQjOA6ya8ONQ mKIpHyCQN9tNjXKO6P+6yTn4q4rn0GSuq4C3EUiiIz9Ugy9WWfvLGD9pSFYJOQlngZa8 FQFg== X-Received: by 10.68.255.130 with SMTP id aq2mr25220381pbd.164.1369583966536; Sun, 26 May 2013 08:59:26 -0700 (PDT) Received: from localhost.localdomain ([111.196.197.202]) by mx.google.com with ESMTPSA id ze11sm26603189pab.22.2013.05.26.08.59.20 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sun, 26 May 2013 08:59:25 -0700 (PDT) From: Jiang Liu To: Bjorn Helgaas , Yinghai Lu Cc: Jiang Liu , "Rafael J . Wysocki" , Greg Kroah-Hartman , Gu Zheng , Toshi Kani , Myron Stowe , Yijing Wang , Jiang Liu , linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Corentin Chary , Matthew Garrett , acpi4asus-user@lists.sourceforge.net, platform-driver-x86@vger.kernel.org Subject: [PATCH v3, part2 19/20] PCI, asus-wmi: use hotplug-safe iterators to walk PCI buses Date: Sun, 26 May 2013 23:53:16 +0800 Message-Id: <1369583597-3801-20-git-send-email-jiang.liu@huawei.com> X-Mailer: git-send-email 1.8.1.2 In-Reply-To: <1369583597-3801-1-git-send-email-jiang.liu@huawei.com> References: <1369583597-3801-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 Enhance asus-wmi drvier to use hotplug-safe iterators to walk PCI buses. Signed-off-by: Jiang Liu Cc: Corentin Chary Cc: Matthew Garrett Cc: acpi4asus-user@lists.sourceforge.net Cc: platform-driver-x86@vger.kernel.org Cc: linux-kernel@vger.kernel.org --- drivers/platform/x86/asus-wmi.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c index c11b242..f92db4c 100644 --- a/drivers/platform/x86/asus-wmi.c +++ b/drivers/platform/x86/asus-wmi.c @@ -596,7 +596,7 @@ static bool asus_wlan_rfkill_blocked(struct asus_wmi *asus) static void asus_rfkill_hotplug(struct asus_wmi *asus) { struct pci_dev *dev; - struct pci_bus *bus; + struct pci_bus *bus = NULL; bool blocked; bool absent; u32 l; @@ -611,7 +611,7 @@ static void asus_rfkill_hotplug(struct asus_wmi *asus) rfkill_set_sw_state(asus->wlan.rfkill, blocked); if (asus->hotplug_slot) { - bus = pci_find_bus(0, 1); + bus = pci_get_bus(0, 1); if (!bus) { pr_warn("Unable to find PCI bus 1?\n"); goto out_unlock; @@ -657,6 +657,7 @@ static void asus_rfkill_hotplug(struct asus_wmi *asus) out_unlock: mutex_unlock(&asus->hotplug_lock); + pci_bus_put(bus); } static void asus_rfkill_notify(acpi_handle handle, u32 event, void *data) @@ -748,7 +749,7 @@ static void asus_hotplug_work(struct work_struct *work) static int asus_setup_pci_hotplug(struct asus_wmi *asus) { int ret = -ENOMEM; - struct pci_bus *bus = pci_find_bus(0, 1); + struct pci_bus *bus = pci_get_bus(0, 1); if (!bus) { pr_err("Unable to find wifi PCI bus\n"); @@ -782,6 +783,7 @@ static int asus_setup_pci_hotplug(struct asus_wmi *asus) pr_err("Unable to register hotplug slot - %d\n", ret); goto error_register; } + pci_bus_put(bus); return 0; @@ -793,6 +795,7 @@ error_info: error_slot: destroy_workqueue(asus->hotplug_workqueue); error_workqueue: + pci_bus_put(bus); return ret; }