Message ID | 153680533172.453305.5701902165148172434.stgit@dwillia2-desk3.amr.corp.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | mm: Merge hmm into devm_memremap_pages, mark GPL-only | expand |
On 12/09/18 08:22 PM, Dan Williams wrote: > Given the fact that devm_memremap_pages() requires a percpu_ref that is > torn down by devm_memremap_pages_release() the current support for > mapping RAM is broken. > > Support for remapping "System RAM" has been broken since the beginning > and there is no existing user of this this code path, so just kill the > support and make it an explicit error. > > This cleanup also simplifies a follow-on patch to fix the error path > when setting a devm release action for devm_memremap_pages_release() > fails. > > Cc: Christoph Hellwig <hch@lst.de> > Cc: "Jérôme Glisse" <jglisse@redhat.com> > Cc: Logan Gunthorpe <logang@deltatee.com> > Signed-off-by: Dan Williams <dan.j.williams@intel.com> Reviewed-by: Logan Gunthorpe <logang@deltatee.com> Logan > --- > kernel/memremap.c | 9 +++------ > 1 file changed, 3 insertions(+), 6 deletions(-) > > diff --git a/kernel/memremap.c b/kernel/memremap.c > index f95c7833db6d..92e838127767 100644 > --- a/kernel/memremap.c > +++ b/kernel/memremap.c > @@ -202,15 +202,12 @@ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap) > is_ram = region_intersects(align_start, align_size, > IORESOURCE_SYSTEM_RAM, IORES_DESC_NONE); > > - if (is_ram == REGION_MIXED) { > - WARN_ONCE(1, "%s attempted on mixed region %pr\n", > - __func__, res); > + if (is_ram != REGION_DISJOINT) { > + WARN_ONCE(1, "%s attempted on %s region %pr\n", __func__, > + is_ram == REGION_MIXED ? "mixed" : "ram", res); > return ERR_PTR(-ENXIO); > } > > - if (is_ram == REGION_INTERSECTS) > - return __va(res->start); > - > if (!pgmap->ref) > return ERR_PTR(-EINVAL); > >
On Wed, Sep 12, 2018 at 07:22:11PM -0700, Dan Williams wrote: > Given the fact that devm_memremap_pages() requires a percpu_ref that is > torn down by devm_memremap_pages_release() the current support for > mapping RAM is broken. I agree. Do you remember why we even added it in the first place? Signed-off-by: Christoph Hellwig <hch@lst.de>
On Fri, Sep 14, 2018 at 6:14 AM, Christoph Hellwig <hch@lst.de> wrote: > On Wed, Sep 12, 2018 at 07:22:11PM -0700, Dan Williams wrote: >> Given the fact that devm_memremap_pages() requires a percpu_ref that is >> torn down by devm_memremap_pages_release() the current support for >> mapping RAM is broken. > > I agree. Do you remember why we even added it in the first place? It was initially a copy over from memremap() that catches these attempts and returns a direct-map pointer.
On Wed, Sep 12, 2018 at 07:22:11PM -0700, Dan Williams wrote: > Given the fact that devm_memremap_pages() requires a percpu_ref that is > torn down by devm_memremap_pages_release() the current support for > mapping RAM is broken. > > Support for remapping "System RAM" has been broken since the beginning > and there is no existing user of this this code path, so just kill the > support and make it an explicit error. > > This cleanup also simplifies a follow-on patch to fix the error path > when setting a devm release action for devm_memremap_pages_release() > fails. > > Cc: Christoph Hellwig <hch@lst.de> Reviewed-by: Jérôme Glisse <jglisse@redhat.com> > Cc: Logan Gunthorpe <logang@deltatee.com> > Signed-off-by: Dan Williams <dan.j.williams@intel.com> > --- > kernel/memremap.c | 9 +++------ > 1 file changed, 3 insertions(+), 6 deletions(-) > > diff --git a/kernel/memremap.c b/kernel/memremap.c > index f95c7833db6d..92e838127767 100644 > --- a/kernel/memremap.c > +++ b/kernel/memremap.c > @@ -202,15 +202,12 @@ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap) > is_ram = region_intersects(align_start, align_size, > IORESOURCE_SYSTEM_RAM, IORES_DESC_NONE); > > - if (is_ram == REGION_MIXED) { > - WARN_ONCE(1, "%s attempted on mixed region %pr\n", > - __func__, res); > + if (is_ram != REGION_DISJOINT) { > + WARN_ONCE(1, "%s attempted on %s region %pr\n", __func__, > + is_ram == REGION_MIXED ? "mixed" : "ram", res); > return ERR_PTR(-ENXIO); > } > > - if (is_ram == REGION_INTERSECTS) > - return __va(res->start); > - > if (!pgmap->ref) > return ERR_PTR(-EINVAL); > >
diff --git a/kernel/memremap.c b/kernel/memremap.c index f95c7833db6d..92e838127767 100644 --- a/kernel/memremap.c +++ b/kernel/memremap.c @@ -202,15 +202,12 @@ void *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap) is_ram = region_intersects(align_start, align_size, IORESOURCE_SYSTEM_RAM, IORES_DESC_NONE); - if (is_ram == REGION_MIXED) { - WARN_ONCE(1, "%s attempted on mixed region %pr\n", - __func__, res); + if (is_ram != REGION_DISJOINT) { + WARN_ONCE(1, "%s attempted on %s region %pr\n", __func__, + is_ram == REGION_MIXED ? "mixed" : "ram", res); return ERR_PTR(-ENXIO); } - if (is_ram == REGION_INTERSECTS) - return __va(res->start); - if (!pgmap->ref) return ERR_PTR(-EINVAL);
Given the fact that devm_memremap_pages() requires a percpu_ref that is torn down by devm_memremap_pages_release() the current support for mapping RAM is broken. Support for remapping "System RAM" has been broken since the beginning and there is no existing user of this this code path, so just kill the support and make it an explicit error. This cleanup also simplifies a follow-on patch to fix the error path when setting a devm release action for devm_memremap_pages_release() fails. Cc: Christoph Hellwig <hch@lst.de> Cc: "Jérôme Glisse" <jglisse@redhat.com> Cc: Logan Gunthorpe <logang@deltatee.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com> --- kernel/memremap.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)