From: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> To: Alan Mikhak <alan.mikhak@sifive.com> Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, kishon@ti.com, linux-riscv@lists.infradead.org, palmer@sifive.com, paul.walmsley@sifive.com Subject: Re: [PATCH v2] PCI: endpoint: Skip odd BAR when skipping 64bit BAR Date: Tue, 11 Jun 2019 11:08:45 +0100 [thread overview] Message-ID: <20190611100845.GC29976@redmoon> (raw) In-Reply-To: <1558648540-14239-1-git-send-email-alan.mikhak@sifive.com> On Thu, May 23, 2019 at 02:55:40PM -0700, Alan Mikhak wrote: > Always skip odd bar when skipping 64bit BARs in pci_epf_test_set_bar() > and pci_epf_test_alloc_space(). > > Otherwise, pci_epf_test_set_bar() will call pci_epc_set_bar() on odd loop > index when skipping reserved 64bit BAR. Moreover, pci_epf_test_alloc_space() > will call pci_epf_alloc_space() on bind for odd loop index when BAR is 64bit > but leaks on subsequent unbind by not calling pci_epf_free_space(). > > Signed-off-by: Alan Mikhak <alan.mikhak@sifive.com> > Reviewed-by: Paul Walmsley <paul.walmsley@sifive.com> > --- > drivers/pci/endpoint/functions/pci-epf-test.c | 25 ++++++++++++------------- > 1 file changed, 12 insertions(+), 13 deletions(-) Applied to pci/endpoint for v5.3, thanks. Lorenzo > diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/endpoint/functions/pci-epf-test.c > index 27806987e93b..96156a537922 100644 > --- a/drivers/pci/endpoint/functions/pci-epf-test.c > +++ b/drivers/pci/endpoint/functions/pci-epf-test.c > @@ -389,7 +389,7 @@ static void pci_epf_test_unbind(struct pci_epf *epf) > > static int pci_epf_test_set_bar(struct pci_epf *epf) > { > - int bar; > + int bar, add; > int ret; > struct pci_epf_bar *epf_bar; > struct pci_epc *epc = epf->epc; > @@ -400,8 +400,14 @@ static int pci_epf_test_set_bar(struct pci_epf *epf) > > epc_features = epf_test->epc_features; > > - for (bar = BAR_0; bar <= BAR_5; bar++) { > + for (bar = BAR_0; bar <= BAR_5; bar += add) { > epf_bar = &epf->bar[bar]; > + /* > + * pci_epc_set_bar() sets PCI_BASE_ADDRESS_MEM_TYPE_64 > + * if the specific implementation required a 64-bit BAR, > + * even if we only requested a 32-bit BAR. > + */ > + add = (epf_bar->flags & PCI_BASE_ADDRESS_MEM_TYPE_64) ? 2 : 1; > > if (!!(epc_features->reserved_bar & (1 << bar))) > continue; > @@ -413,13 +419,6 @@ static int pci_epf_test_set_bar(struct pci_epf *epf) > if (bar == test_reg_bar) > return ret; > } > - /* > - * pci_epc_set_bar() sets PCI_BASE_ADDRESS_MEM_TYPE_64 > - * if the specific implementation required a 64-bit BAR, > - * even if we only requested a 32-bit BAR. > - */ > - if (epf_bar->flags & PCI_BASE_ADDRESS_MEM_TYPE_64) > - bar++; > } > > return 0; > @@ -431,7 +430,7 @@ static int pci_epf_test_alloc_space(struct pci_epf *epf) > struct device *dev = &epf->dev; > struct pci_epf_bar *epf_bar; > void *base; > - int bar; > + int bar, add; > enum pci_barno test_reg_bar = epf_test->test_reg_bar; > const struct pci_epc_features *epc_features; > > @@ -445,8 +444,10 @@ static int pci_epf_test_alloc_space(struct pci_epf *epf) > } > epf_test->reg[test_reg_bar] = base; > > - for (bar = BAR_0; bar <= BAR_5; bar++) { > + for (bar = BAR_0; bar <= BAR_5; bar += add) { > epf_bar = &epf->bar[bar]; > + add = (epf_bar->flags & PCI_BASE_ADDRESS_MEM_TYPE_64) ? 2 : 1; > + > if (bar == test_reg_bar) > continue; > > @@ -459,8 +460,6 @@ static int pci_epf_test_alloc_space(struct pci_epf *epf) > dev_err(dev, "Failed to allocate space for BAR%d\n", > bar); > epf_test->reg[bar] = base; > - if (epf_bar->flags & PCI_BASE_ADDRESS_MEM_TYPE_64) > - bar++; > } > > return 0; > -- > 2.7.4 >
WARNING: multiple messages have this Message-ID (diff)
From: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> To: Alan Mikhak <alan.mikhak@sifive.com> Cc: linux-pci@vger.kernel.org, palmer@sifive.com, linux-kernel@vger.kernel.org, kishon@ti.com, paul.walmsley@sifive.com, linux-riscv@lists.infradead.org Subject: Re: [PATCH v2] PCI: endpoint: Skip odd BAR when skipping 64bit BAR Date: Tue, 11 Jun 2019 11:08:45 +0100 [thread overview] Message-ID: <20190611100845.GC29976@redmoon> (raw) In-Reply-To: <1558648540-14239-1-git-send-email-alan.mikhak@sifive.com> On Thu, May 23, 2019 at 02:55:40PM -0700, Alan Mikhak wrote: > Always skip odd bar when skipping 64bit BARs in pci_epf_test_set_bar() > and pci_epf_test_alloc_space(). > > Otherwise, pci_epf_test_set_bar() will call pci_epc_set_bar() on odd loop > index when skipping reserved 64bit BAR. Moreover, pci_epf_test_alloc_space() > will call pci_epf_alloc_space() on bind for odd loop index when BAR is 64bit > but leaks on subsequent unbind by not calling pci_epf_free_space(). > > Signed-off-by: Alan Mikhak <alan.mikhak@sifive.com> > Reviewed-by: Paul Walmsley <paul.walmsley@sifive.com> > --- > drivers/pci/endpoint/functions/pci-epf-test.c | 25 ++++++++++++------------- > 1 file changed, 12 insertions(+), 13 deletions(-) Applied to pci/endpoint for v5.3, thanks. Lorenzo > diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/endpoint/functions/pci-epf-test.c > index 27806987e93b..96156a537922 100644 > --- a/drivers/pci/endpoint/functions/pci-epf-test.c > +++ b/drivers/pci/endpoint/functions/pci-epf-test.c > @@ -389,7 +389,7 @@ static void pci_epf_test_unbind(struct pci_epf *epf) > > static int pci_epf_test_set_bar(struct pci_epf *epf) > { > - int bar; > + int bar, add; > int ret; > struct pci_epf_bar *epf_bar; > struct pci_epc *epc = epf->epc; > @@ -400,8 +400,14 @@ static int pci_epf_test_set_bar(struct pci_epf *epf) > > epc_features = epf_test->epc_features; > > - for (bar = BAR_0; bar <= BAR_5; bar++) { > + for (bar = BAR_0; bar <= BAR_5; bar += add) { > epf_bar = &epf->bar[bar]; > + /* > + * pci_epc_set_bar() sets PCI_BASE_ADDRESS_MEM_TYPE_64 > + * if the specific implementation required a 64-bit BAR, > + * even if we only requested a 32-bit BAR. > + */ > + add = (epf_bar->flags & PCI_BASE_ADDRESS_MEM_TYPE_64) ? 2 : 1; > > if (!!(epc_features->reserved_bar & (1 << bar))) > continue; > @@ -413,13 +419,6 @@ static int pci_epf_test_set_bar(struct pci_epf *epf) > if (bar == test_reg_bar) > return ret; > } > - /* > - * pci_epc_set_bar() sets PCI_BASE_ADDRESS_MEM_TYPE_64 > - * if the specific implementation required a 64-bit BAR, > - * even if we only requested a 32-bit BAR. > - */ > - if (epf_bar->flags & PCI_BASE_ADDRESS_MEM_TYPE_64) > - bar++; > } > > return 0; > @@ -431,7 +430,7 @@ static int pci_epf_test_alloc_space(struct pci_epf *epf) > struct device *dev = &epf->dev; > struct pci_epf_bar *epf_bar; > void *base; > - int bar; > + int bar, add; > enum pci_barno test_reg_bar = epf_test->test_reg_bar; > const struct pci_epc_features *epc_features; > > @@ -445,8 +444,10 @@ static int pci_epf_test_alloc_space(struct pci_epf *epf) > } > epf_test->reg[test_reg_bar] = base; > > - for (bar = BAR_0; bar <= BAR_5; bar++) { > + for (bar = BAR_0; bar <= BAR_5; bar += add) { > epf_bar = &epf->bar[bar]; > + add = (epf_bar->flags & PCI_BASE_ADDRESS_MEM_TYPE_64) ? 2 : 1; > + > if (bar == test_reg_bar) > continue; > > @@ -459,8 +460,6 @@ static int pci_epf_test_alloc_space(struct pci_epf *epf) > dev_err(dev, "Failed to allocate space for BAR%d\n", > bar); > epf_test->reg[bar] = base; > - if (epf_bar->flags & PCI_BASE_ADDRESS_MEM_TYPE_64) > - bar++; > } > > return 0; > -- > 2.7.4 > _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2019-06-11 10:08 UTC|newest] Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-05-23 21:55 [PATCH v2] PCI: endpoint: Skip odd BAR when skipping 64bit BAR Alan Mikhak 2019-05-23 21:55 ` Alan Mikhak 2019-05-23 23:55 ` Alan Mikhak 2019-05-23 23:55 ` Alan Mikhak 2019-05-24 8:49 ` Kishon Vijay Abraham I 2019-05-24 8:49 ` Kishon Vijay Abraham I 2019-05-24 18:50 ` Alan Mikhak 2019-05-24 18:50 ` Alan Mikhak 2019-05-30 16:22 ` Lorenzo Pieralisi 2019-05-30 16:22 ` Lorenzo Pieralisi 2019-05-31 4:35 ` Kishon Vijay Abraham I 2019-05-31 4:35 ` Kishon Vijay Abraham I 2019-05-31 16:52 ` Alan Mikhak 2019-05-31 16:52 ` Alan Mikhak 2019-05-24 8:49 ` Kishon Vijay Abraham I 2019-05-24 8:49 ` Kishon Vijay Abraham I 2019-06-03 7:34 ` Kishon Vijay Abraham I 2019-06-03 7:34 ` Kishon Vijay Abraham I 2019-06-11 10:08 ` Lorenzo Pieralisi [this message] 2019-06-11 10:08 ` Lorenzo Pieralisi
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190611100845.GC29976@redmoon \ --to=lorenzo.pieralisi@arm.com \ --cc=alan.mikhak@sifive.com \ --cc=kishon@ti.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-pci@vger.kernel.org \ --cc=linux-riscv@lists.infradead.org \ --cc=palmer@sifive.com \ --cc=paul.walmsley@sifive.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.