From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933013AbcBYCYZ (ORCPT ); Wed, 24 Feb 2016 21:24:25 -0500 Received: from userp1040.oracle.com ([156.151.31.81]:42329 "EHLO userp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759573AbcBYCSr (ORCPT ); Wed, 24 Feb 2016 21:18:47 -0500 From: Yinghai Lu To: Bjorn Helgaas , David Miller , Benjamin Herrenschmidt , Wei Yang , TJ , Yijing Wang , Khalid Aziz Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Yinghai Lu Subject: [PATCH v10 40/59] PCI: Separate required+optional assigning to another function Date: Wed, 24 Feb 2016 18:12:31 -0800 Message-Id: <1456366370-28995-41-git-send-email-yinghai@kernel.org> X-Mailer: git-send-email 1.8.4.5 In-Reply-To: <1456366370-28995-1-git-send-email-yinghai@kernel.org> References: <1456366370-28995-1-git-send-email-yinghai@kernel.org> X-Source-IP: aserv0021.oracle.com [141.146.126.233] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org __assign_resources_sorted() is getting too big if we put alt_size support into it. Split out required+optional assigning code to another function. Signed-off-by: Yinghai Lu --- drivers/pci/setup-bus.c | 47 +++++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c index dc66653..6ed7c85 100644 --- a/drivers/pci/setup-bus.c +++ b/drivers/pci/setup-bus.c @@ -473,20 +473,9 @@ static void restore_resource(struct pci_dev_resource *save_res, res->flags = save_res->flags; } -static void __assign_resources_sorted(struct list_head *head, - struct list_head *realloc_head, - struct list_head *fail_head) +static bool __assign_resources_required_optional_sorted(struct list_head *head, + struct list_head *realloc_head) { - /* - * Should not assign requested resources at first. - * they could be adjacent, so later reassign can not reallocate - * them one by one in parent resource window. - * Try to assign requested + add_size at beginning - * if could do that, could get out early. - * if could not do that, we still try to assign requested at first, - * then try to reassign add_size for some resources. - */ - LIST_HEAD(save_head); LIST_HEAD(local_fail_head); struct pci_dev_resource *save_res; @@ -495,12 +484,8 @@ static void __assign_resources_sorted(struct list_head *head, resource_size_t add_align; struct resource *res; - /* Check if optional add_size is there */ - if (!realloc_head || list_empty(realloc_head)) - goto requested_and_reassign; - if (!save_resources(head, &save_head)) - goto requested_and_reassign; + return false; /* Update res in head list with add_size in realloc_head list */ list_for_each_entry(dev_res, head, list) { @@ -539,7 +524,8 @@ static void __assign_resources_sorted(struct list_head *head, remove_from_list(realloc_head, dev_res->res); free_list(&save_head); free_list(head); - return; + + return true; } /* check failed type */ @@ -574,7 +560,28 @@ static void __assign_resources_sorted(struct list_head *head, free_list(&save_head); -requested_and_reassign: + return false; +} + +static void __assign_resources_sorted(struct list_head *head, + struct list_head *realloc_head, + struct list_head *fail_head) +{ + /* + * Should not assign required resources at first. + * they could be adjacent, so later reassign can not reallocate + * them one by one in parent resource window. + * Try to assign required + optional at beginning + * if could do that, could get out early. + * if could not do that, we still try to assign required at first, + * then try to reassign add_size for some resources. + */ + + /* Check required+optional add */ + if (realloc_head && !list_empty(realloc_head) && + __assign_resources_required_optional_sorted(head, realloc_head)) + return; + sort_resources(head); /* Satisfy the must-have resource requests */ -- 1.8.4.5