From patchwork Sat Jun 20 23:34:21 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Grant Grundler X-Patchwork-Id: 31628 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n5KNTTjP016303 for ; Sat, 20 Jun 2009 23:34:23 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751896AbZFTXeT (ORCPT ); Sat, 20 Jun 2009 19:34:19 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751980AbZFTXeT (ORCPT ); Sat, 20 Jun 2009 19:34:19 -0400 Received: from complete.lackof.org ([198.49.126.79]:44823 "EHLO complete.lackof.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751896AbZFTXeS (ORCPT ); Sat, 20 Jun 2009 19:34:18 -0400 Received: from localhost (localhost [127.0.0.1]) by complete.lackof.org (Postfix) with ESMTP id 963EB33E0002; Sat, 20 Jun 2009 17:34:21 -0600 (MDT) X-Virus-Scanned: Debian amavisd-new at lackof.org Received: from complete.lackof.org ([127.0.0.1]) by localhost (complete.lackof.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id c2JuXXAm-ih3; Sat, 20 Jun 2009 17:34:21 -0600 (MDT) Received: by complete.lackof.org (Postfix, from userid 27253) id 3B4B733E0067; Sat, 20 Jun 2009 17:34:21 -0600 (MDT) Date: Sat, 20 Jun 2009 17:34:21 -0600 From: Grant Grundler To: James Bottomley Cc: Grant Grundler , Kyle McMartin , Helge Deller , linux-parisc@vger.kernel.org Subject: Re: [PATCH][linux-2.6] Fix gcc 4.4 warning in lba_pci.c Message-ID: <20090620233421.GB21560@lackof.org> References: <20090620224613.GB853@lackof.org> <20090620231151.GA21477@lackof.org> <1245540375.31688.2.camel@mulgrave.site> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1245540375.31688.2.camel@mulgrave.site> X-Home-Page: http://www.parisc-linux.org/ User-Agent: Mutt/1.5.18 (2008-05-17) Sender: linux-parisc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-parisc@vger.kernel.org On Sat, Jun 20, 2009 at 06:26:15PM -0500, James Bottomley wrote: ... > > Take 2. Per Kyle's request (offlist), use kzalloc instead since it's not > > ever used again after boot. > > Um, wouldn't one of the points of using kzalloc over a static allocation > be to free the memory again after we've finished using it? Otherwise we > leek a page for every lba. James, Thanks again for gating my utter fail. Fixed in this version. Signed-off-by: Grant Grundler ---- Again...still not tested. :( --- To unsubscribe from this list: send the line "unsubscribe linux-parisc" 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/parisc/lba_pci.c b/drivers/parisc/lba_pci.c index 59fbbf1..a30e668 100644 --- a/drivers/parisc/lba_pci.c +++ b/drivers/parisc/lba_pci.c @@ -980,28 +980,38 @@ static void lba_pat_resources(struct parisc_device *pa_dev, struct lba_device *lba_dev) { unsigned long bytecnt; - pdc_pat_cell_mod_maddr_block_t pa_pdc_cell; /* PA_VIEW */ - pdc_pat_cell_mod_maddr_block_t io_pdc_cell; /* IO_VIEW */ long io_count; long status; /* PDC return status */ long pa_count; + pdc_pat_cell_mod_maddr_block_t *pa_pdc_cell; /* PA_VIEW */ + pdc_pat_cell_mod_maddr_block_t *io_pdc_cell; /* IO_VIEW */ int i; + pa_pdc_cell = kzalloc(sizeof(pdc_pat_cell_mod_maddr_block_t)); + if (!pa_pdc_cell) + return; + + io_pdc_cell = kzalloc(sizeof(pdc_pat_cell_mod_maddr_block_t)); + if (!pa_pdc_cell) { + kfree(pa_pdc_cell); + return; + } + /* return cell module (IO view) */ status = pdc_pat_cell_module(&bytecnt, pa_dev->pcell_loc, pa_dev->mod_index, - PA_VIEW, & pa_pdc_cell); - pa_count = pa_pdc_cell.mod[1]; + PA_VIEW, pa_pdc_cell); + pa_count = pa_pdc_cell->mod[1]; status |= pdc_pat_cell_module(&bytecnt, pa_dev->pcell_loc, pa_dev->mod_index, - IO_VIEW, &io_pdc_cell); - io_count = io_pdc_cell.mod[1]; + IO_VIEW, io_pdc_cell); + io_count = io_pdc_cell->mod[1]; /* We've already done this once for device discovery...*/ if (status != PDC_OK) { panic("pdc_pat_cell_module() call failed for LBA!\n"); } - if (PAT_GET_ENTITY(pa_pdc_cell.mod_info) != PAT_ENTITY_LBA) { + if (PAT_GET_ENTITY(pa_pdc_cell->mod_info) != PAT_ENTITY_LBA) { panic("pdc_pat_cell_module() entity returned != PAT_ENTITY_LBA!\n"); } @@ -1016,8 +1026,8 @@ lba_pat_resources(struct parisc_device *pa_dev, struct lba_device *lba_dev) } *p, *io; struct resource *r; - p = (void *) &(pa_pdc_cell.mod[2+i*3]); - io = (void *) &(io_pdc_cell.mod[2+i*3]); + p = (void *) &(pa_pdc_cell->mod[2+i*3]); + io = (void *) &(io_pdc_cell->mod[2+i*3]); /* Convert the PAT range data to PCI "struct resource" */ switch(p->type & 0xff) { @@ -1096,6 +1106,9 @@ lba_pat_resources(struct parisc_device *pa_dev, struct lba_device *lba_dev) break; } } + + kfree(pa_pdc_cell); + kfree(io_pdc_cell); } #else /* keep compiler from complaining about missing declarations */