On Fri, Apr 07, 2017 at 11:37:34AM +1000, Balbir Singh wrote:
> On Wed, 2017-04-05 at 16:40 -0400, Jérôme Glisse wrote:
> > This introduce a simple struct and associated helpers for device driver
> > to use when hotpluging un-addressable device memory as ZONE_DEVICE. It
> > will find a unuse physical address range and trigger memory hotplug for
> > it which allocates and initialize struct page for the device memory.
> > 
> > Signed-off-by: Jérôme Glisse <jgli...@redhat.com>
> > Signed-off-by: Evgeny Baskakov <ebaska...@nvidia.com>
> > Signed-off-by: John Hubbard <jhubb...@nvidia.com>
> > Signed-off-by: Mark Hairgrove <mhairgr...@nvidia.com>
> > Signed-off-by: Sherry Cheung <sche...@nvidia.com>
> > Signed-off-by: Subhash Gutti <sgu...@nvidia.com>
> > ---
> >  include/linux/hmm.h | 114 +++++++++++++++
> >  mm/Kconfig          |   9 ++
> >  mm/hmm.c            | 398 
> > ++++++++++++++++++++++++++++++++++++++++++++++++++++
> >  3 files changed, 521 insertions(+)
> > 
> > +/*
> > + * To add (hotplug) device memory, HMM assumes that there is no real 
> > resource
> > + * that reserves a range in the physical address space (this is intended 
> > to be
> > + * use by unaddressable device memory). It will reserve a physical range 
> > big
> > + * enough and allocate struct page for it.
> 
> I've found that the implementation of this is quite non-portable, in that
> starting from iomem_resource.end+1-size (which is effectively -size) on
> my platform (powerpc) does not give expected results. It could be that
> additional changes are needed to arch_add_memory() to support this
> use case.

The CDM version does not use that part, that being said isn't -size a valid
value we care only about unsigned here ? What is the end value on powerpc ?
In any case this sounds more like a unsigned/signed arithmetic issue, i will
look into it.

> 
> > +
> > +   size = ALIGN(size, SECTION_SIZE);
> > +   addr = (iomem_resource.end + 1ULL) - size;
> 
> 
> Why don't we allocate_resource() with the right constraints and get a new
> unused region?

The issue with allocate_resource() is that it does scan the resource tree
from lower address to higher ones. I was told that it was less likely to
have hotplug issue conflict if i pick highest physicall address for the
device memory hence why i do my own scan from the end toward the start.

Again all this function does not apply to PPC, it can be hidden behind
x86 config if you prefer it.

Cheers,
Jérôme

Reply via email to