All of lore.kernel.org
 help / color / mirror / Atom feed
From: Toshi Kani <toshi.kani@hpe.com>
To: Dan Williams <dan.j.williams@intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
	Borislav Petkov <bp@suse.de>,
	"linux-nvdimm@lists.01.org" <linux-nvdimm@lists.01.org>,
	X86 ML <x86@kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] x86/mm: Add x86 valid_phys_addr_range() for /dev/mem
Date: Wed, 17 Feb 2016 13:15:21 -0700	[thread overview]
Message-ID: <1455740121.2925.286.camel@hpe.com> (raw)
In-Reply-To: <CAPcyv4jG2Z08cN17_m96wOApRfToeqDcwu+k6tFzXz3U0beB9w@mail.gmail.com>

On Wed, 2016-02-17 at 11:05 -0800, Dan Williams wrote:
> On Wed, Feb 17, 2016 at 11:35 AM, Toshi Kani <toshi.kani@hpe.com> wrote:
> > On Wed, 2016-02-17 at 09:58 -0800, Dan Williams wrote:
> > > On Tue, Feb 9, 2016 at 6:06 PM, Toshi Kani <toshi.kani@hpe.com>
> > > wrote:
> > > > x86 does not define ARCH_HAS_VALID_PHYS_ADDR_RANGE, which
> > > > leads /dev/mem to use the default valid_phys_addr_range()
> > > > and valid_mmap_phys_addr_range() in drivers/char/mem.c.
> > > > 
> > > > The default valid_phys_addr_range() allows any range lower
> > > > than __pa(high_memory), which is the end of system RAM, and
> > > > disallows any range higher than it.
> > > > 
> > > > Persistent memory may be located at lower and/or higher
> > > > address of __pa(high_memory) depending on their memory slots.
> > > > When using crash(8) via /dev/mem for analyzing data in
> > > > persistent memory, it can only access to the one lower than
> > > > __pa(high_memory).
> > > > 
> > > > Add x86 valid_phys_addr_range() and valid_mmap_phys_addr_range()
> > > > to provide better checking:
> > > >  - Physical address range is valid when it is fully backed by
> > > >    IORESOURCE_MEM, regardless of __pa(high_memory).
> > > >  - Other ranges, including holes, are invalid.
> > > > 
> > > > This also allows crash(8) to access persistent memory ranges
> > > > via /dev/mem (with a minor change to remove high_memory check
> > > > from crash itself).
> > > 
> > > If we're modifying crash(8) can't we also teach it to mmap /dev/pmemX
> > > directly?  With commit 90a545e98126 "restrict /dev/mem to idle io
> > > memory ranges" /dev/mem should not have access to active pmem ranges.
> > 
> > Yes, I am aware of the commit.  Unloading drivers while using crash(8)
> > to analyze NVDIMM via /dev/mem makes sense.  /dev/mem does not require
> > any other drivers be loaded.
> 
> Ah, ok.  I thought this patch was bypassing that safety check.  If it
> requires the driver to be unloaded first then I'm fine with this.

Yes, crash(8) is used for analyzing static data (such as a crashdump file).
 It does not allow writing data unless user specifically enable it.

> > Using /dev/pmemX, on the other hand, requires the driver to be loaded,
> > which can be problematic.  For instance, when btt_init() fails due to
> > some corruption in arena, it fails to create any pmem device file.  A
> > dev file also restricts access range within the dev file.
> > 
> > Thanks,
> > -Toshi
> > 
> > ps.
> > Looking at iomem_is_exclusive(), it only checks the top-level iomem
> > entries.  I think the pmem/btt driver only marks a child entry busy...
> > 
> 
> It looks to me that next_resource(), via r_next(), walks child ranges.

Oh, sorry, I missed the r_next().

Thanks,
-Toshi

WARNING: multiple messages have this Message-ID (diff)
From: Toshi Kani <toshi.kani@hpe.com>
To: Dan Williams <dan.j.williams@intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
	Borislav Petkov <bp@suse.de>,
	"linux-nvdimm@lists.01.org" <linux-nvdimm@ml01.01.org>,
	X86 ML <x86@kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] x86/mm: Add x86 valid_phys_addr_range() for /dev/mem
Date: Wed, 17 Feb 2016 13:15:21 -0700	[thread overview]
Message-ID: <1455740121.2925.286.camel@hpe.com> (raw)
In-Reply-To: <CAPcyv4jG2Z08cN17_m96wOApRfToeqDcwu+k6tFzXz3U0beB9w@mail.gmail.com>

On Wed, 2016-02-17 at 11:05 -0800, Dan Williams wrote:
> On Wed, Feb 17, 2016 at 11:35 AM, Toshi Kani <toshi.kani@hpe.com> wrote:
> > On Wed, 2016-02-17 at 09:58 -0800, Dan Williams wrote:
> > > On Tue, Feb 9, 2016 at 6:06 PM, Toshi Kani <toshi.kani@hpe.com>
> > > wrote:
> > > > x86 does not define ARCH_HAS_VALID_PHYS_ADDR_RANGE, which
> > > > leads /dev/mem to use the default valid_phys_addr_range()
> > > > and valid_mmap_phys_addr_range() in drivers/char/mem.c.
> > > > 
> > > > The default valid_phys_addr_range() allows any range lower
> > > > than __pa(high_memory), which is the end of system RAM, and
> > > > disallows any range higher than it.
> > > > 
> > > > Persistent memory may be located at lower and/or higher
> > > > address of __pa(high_memory) depending on their memory slots.
> > > > When using crash(8) via /dev/mem for analyzing data in
> > > > persistent memory, it can only access to the one lower than
> > > > __pa(high_memory).
> > > > 
> > > > Add x86 valid_phys_addr_range() and valid_mmap_phys_addr_range()
> > > > to provide better checking:
> > > >  - Physical address range is valid when it is fully backed by
> > > >    IORESOURCE_MEM, regardless of __pa(high_memory).
> > > >  - Other ranges, including holes, are invalid.
> > > > 
> > > > This also allows crash(8) to access persistent memory ranges
> > > > via /dev/mem (with a minor change to remove high_memory check
> > > > from crash itself).
> > > 
> > > If we're modifying crash(8) can't we also teach it to mmap /dev/pmemX
> > > directly?  With commit 90a545e98126 "restrict /dev/mem to idle io
> > > memory ranges" /dev/mem should not have access to active pmem ranges.
> > 
> > Yes, I am aware of the commit.  Unloading drivers while using crash(8)
> > to analyze NVDIMM via /dev/mem makes sense.  /dev/mem does not require
> > any other drivers be loaded.
> 
> Ah, ok.  I thought this patch was bypassing that safety check.  If it
> requires the driver to be unloaded first then I'm fine with this.

Yes, crash(8) is used for analyzing static data (such as a crashdump file).
 It does not allow writing data unless user specifically enable it.

> > Using /dev/pmemX, on the other hand, requires the driver to be loaded,
> > which can be problematic.  For instance, when btt_init() fails due to
> > some corruption in arena, it fails to create any pmem device file.  A
> > dev file also restricts access range within the dev file.
> > 
> > Thanks,
> > -Toshi
> > 
> > ps.
> > Looking at iomem_is_exclusive(), it only checks the top-level iomem
> > entries.  I think the pmem/btt driver only marks a child entry busy...
> > 
> 
> It looks to me that next_resource(), via r_next(), walks child ranges.

Oh, sorry, I missed the r_next().

Thanks,
-Toshi

  reply	other threads:[~2016-02-17 20:15 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-10  2:06 [PATCH] x86/mm: Add x86 valid_phys_addr_range() for /dev/mem Toshi Kani
2016-02-10  2:06 ` Toshi Kani
2016-02-17  9:29 ` Ingo Molnar
2016-02-17  9:29   ` Ingo Molnar
2016-02-17 16:58   ` Toshi Kani
2016-02-17 16:58     ` Toshi Kani
2016-02-17 17:58 ` Dan Williams
2016-02-17 17:58   ` Dan Williams
2016-02-17 19:35   ` Toshi Kani
2016-02-17 19:35     ` Toshi Kani
2016-02-17 19:05     ` Dan Williams
2016-02-17 19:05       ` Dan Williams
2016-02-17 20:15       ` Toshi Kani [this message]
2016-02-17 20:15         ` Toshi Kani

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=1455740121.2925.286.camel@hpe.com \
    --to=toshi.kani@hpe.com \
    --cc=bp@suse.de \
    --cc=dan.j.williams@intel.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nvdimm@lists.01.org \
    --cc=mingo@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    /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: link
Be 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.