From patchwork Wed Feb 26 19:09:20 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bjorn Helgaas X-Patchwork-Id: 3727601 X-Patchwork-Delegate: bhelgaas@google.com Return-Path: X-Original-To: patchwork-linux-pci@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 09BDABF40C for ; Wed, 26 Feb 2014 19:09:41 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 15947201CD for ; Wed, 26 Feb 2014 19:09:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 19BE6201FE for ; Wed, 26 Feb 2014 19:09:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754234AbaBZTJ1 (ORCPT ); Wed, 26 Feb 2014 14:09:27 -0500 Received: from mail-ig0-f170.google.com ([209.85.213.170]:59435 "EHLO mail-ig0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753532AbaBZTJX (ORCPT ); Wed, 26 Feb 2014 14:09:23 -0500 Received: by mail-ig0-f170.google.com with SMTP id uq10so3007448igb.1 for ; Wed, 26 Feb 2014 11:09:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=subject:to:from:cc:date:message-id:in-reply-to:references :user-agent:mime-version:content-type:content-transfer-encoding; bh=GMlMyohTMd5/dDvxOWmzcTnZeUh3sPT0I7T/29LY3zI=; b=CQE4bqn/DJU2KifmYNHbXprst0hz8TBHm1wWSL+xOdC8W6vOvOBZTnsLvzyvFE8A1c MCsFgc8x8LoJ25mKiq9xEdaalqRBikGp303Laxf4Zb2jILsO/vPPx67aVydqoGf0k82+ C66/ES+NXU8tlUy5ewI2X68qz7Nt7lJxb5zJuki8wJ3UgW4NjLxHkVJYlrEpjxjRDGOi y/ly9f7dsvJbXZ2hYjkOnPp1a43KpFoIWVdHsUzwpA1GwvM5k+lLPKZiCBuW5UBQ4b63 nCimkg9wD2lJuedj3Y2s0xzclz0enZWeWxo06QC0r3oTJhcrkzKnzkI5unGqxSLaLs4z PyvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:subject:to:from:cc:date:message-id:in-reply-to :references:user-agent:mime-version:content-type :content-transfer-encoding; bh=GMlMyohTMd5/dDvxOWmzcTnZeUh3sPT0I7T/29LY3zI=; b=e4qV0uyCSy8oOFk4yPekN9NaLwnoPBqqlu1iHaA4/yXiRHT7MzJH7V6vUY4yQAZuTo 8WvVdSjbUgNw/M7fqFbbhKgfFFKSwdTqQmj+Ce/O18TcoOAtWupbG01YJqphKjJ360pU phdL+ns2QmlyDM6RGwS7GmnTgF+mREiLLBfy1jqZ5HvCtGUBijwh+5j/st0P5zYUOlkI LJeG+xAdz1T78cTWWxCoTW73FoJ8HtSPdaS4z0EsIb0N7wvvBx1wy6PF2JYHNzEFMmDu ogLLVfu/VCSiwN6AvyncjoKuOlt7pugJgLBYBZPEVdsPoP/z+kMXLOMqs1o+5VLQ2nGK ismw== X-Gm-Message-State: ALoCoQnK4CPO/b6qMm3pMPTyrFuNh7GiLKjMwRXby09WhnMq04gAWnKcxSCZWywdro4EbtnNk2DPDekQ6sr5ONys0THYJlWOWU0DKuoWHOOpvLb6p8qS3ngfLnZ+7ZLiG1v2d4u9P5kPX8NnD5VGmTa+ood3wRbhGc3qbA2pz0k7u/bMQUwxyUqwPvCFmUAlEYzpufZD+67ViGSYq/h7/wstbn1M+RDUK73tcjd4gslMfLjHx/MHvFw= X-Received: by 10.50.79.194 with SMTP id l2mr27806266igx.8.1393441762699; Wed, 26 Feb 2014 11:09:22 -0800 (PST) Received: from localhost ([172.16.49.60]) by mx.google.com with ESMTPSA id v2sm1469955igk.7.2014.02.26.11.09.22 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Wed, 26 Feb 2014 11:09:22 -0800 (PST) Subject: [PATCH 3/4] i2o: Refactor i2o_iop_systab_set() PCI space allocation To: linux-pci@vger.kernel.org From: Bjorn Helgaas Cc: Markus Lidel , linux-kernel@vger.kernel.org Date: Wed, 26 Feb 2014 12:09:20 -0700 Message-ID: <20140226190920.9616.82654.stgit@bhelgaas-glaptop.roam.corp.google.com> In-Reply-To: <20140226190306.9616.30567.stgit@bhelgaas-glaptop.roam.corp.google.com> References: <20140226190306.9616.30567.stgit@bhelgaas-glaptop.roam.corp.google.com> User-Agent: StGit/0.16 MIME-Version: 1.0 Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, T_DKIM_INVALID, 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 Refactor the PCI space allocation in i2o_iop_systab_set(). This might improve readability slightly, but mainly it is to make the next patch simpler. No functional change. Signed-off-by: Bjorn Helgaas --- drivers/message/i2o/iop.c | 89 +++++++++++++++++++++++---------------------- 1 file changed, 46 insertions(+), 43 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/message/i2o/iop.c b/drivers/message/i2o/iop.c index 68aef58bf89c..c334ba7224a1 100644 --- a/drivers/message/i2o/iop.c +++ b/drivers/message/i2o/iop.c @@ -652,6 +652,48 @@ static int i2o_iop_activate(struct i2o_controller *c) return i2o_hrt_get(c); }; +static void i2o_res_alloc(struct i2o_controller *c, unsigned long flags) +{ + i2o_status_block *sb = c->status_block.virt; + struct resource *root, *res = &c->mem_resource; + resource_size_t size, min, max, align; + int err; + + res->name = c->pdev->bus->name; + res->flags = flags; + res->start = 0; + res->end = 0; + osm_info("%s: requires private memory resources.\n", c->name); + root = pci_find_parent_resource(c->pdev, res); + if (root == NULL) { + osm_warn("%s: Can't find parent resource!\n", c->name); + return; + } + + if (flags & IORESOURCE_MEM) { + size = min = max = sb->desired_mem_size; + align = 1 << 20; /* unspecified, use 1Mb and play safe */ + } else if (flags & IORESOURCE_IO) { + size = min = max = sb->desired_io_size; + align = 1 << 12; /* unspecified, use 4Kb and play safe */ + } + + err = allocate_resource(root, res, size, min, max, align, NULL, NULL); + if (err < 0) + return; + + if (flags & IORESOURCE_MEM) { + c->mem_alloc = 1; + sb->current_mem_size = resource_size(res); + sb->current_mem_base = res->start; + } else if (flags & IORESOURCE_IO) { + c->io_alloc = 1; + sb->current_io_size = resource_size(res); + sb->current_io_base = res->start; + } + osm_info("%s: allocated PCI space %pR\n", c->name, res); +} + /** * i2o_iop_systab_set - Set the I2O System Table of the specified IOP * @c: I2O controller to which the system table should be send @@ -665,52 +707,13 @@ static int i2o_iop_systab_set(struct i2o_controller *c) struct i2o_message *msg; i2o_status_block *sb = c->status_block.virt; struct device *dev = &c->pdev->dev; - struct resource *root; int rc; - if (sb->current_mem_size < sb->desired_mem_size) { - struct resource *res = &c->mem_resource; - res->name = c->pdev->bus->name; - res->flags = IORESOURCE_MEM; - res->start = 0; - res->end = 0; - osm_info("%s: requires private memory resources.\n", c->name); - root = pci_find_parent_resource(c->pdev, res); - if (root == NULL) - osm_warn("%s: Can't find parent resource!\n", c->name); - if (root && allocate_resource(root, res, sb->desired_mem_size, sb->desired_mem_size, sb->desired_mem_size, 1 << 20, /* Unspecified, so use 1Mb and play safe */ - NULL, NULL) >= 0) { - c->mem_alloc = 1; - sb->current_mem_size = resource_size(res); - sb->current_mem_base = res->start; - osm_info("%s: allocated %llu bytes of PCI memory at " - "0x%016llX.\n", c->name, - (unsigned long long)resource_size(res), - (unsigned long long)res->start); - } - } + if (sb->current_mem_size < sb->desired_mem_size) + i2o_res_alloc(c, IORESOURCE_MEM); - if (sb->current_io_size < sb->desired_io_size) { - struct resource *res = &c->io_resource; - res->name = c->pdev->bus->name; - res->flags = IORESOURCE_IO; - res->start = 0; - res->end = 0; - osm_info("%s: requires private memory resources.\n", c->name); - root = pci_find_parent_resource(c->pdev, res); - if (root == NULL) - osm_warn("%s: Can't find parent resource!\n", c->name); - if (root && allocate_resource(root, res, sb->desired_io_size, sb->desired_io_size, sb->desired_io_size, 1 << 12, /* Unspecified, so use 4Kb and play safe */ - NULL, NULL) >= 0) { - c->io_alloc = 1; - sb->current_io_size = resource_size(res); - sb->current_io_base = res->start; - osm_info("%s: allocated %llu bytes of PCI I/O at " - "0x%016llX.\n", c->name, - (unsigned long long)resource_size(res), - (unsigned long long)res->start); - } - } + if (sb->current_io_size < sb->desired_io_size) + i2o_res_alloc(c, IORESOURCE_IO); msg = i2o_msg_get_wait(c, I2O_TIMEOUT_MESSAGE_GET); if (IS_ERR(msg))