Re: [Qemu-devel] QEMU NVDIMM as type 7 in e820 table

2017-07-31 Thread Igor Mammedov
On Mon, 31 Jul 2017 09:48:08 -0600
Ross Zwisler  wrote:

> On Sat, Jul 29, 2017 at 06:49:33PM +0800, Haozhong Zhang wrote:
> > On 07/28/17 13:45 -0600, Ross Zwisler wrote:  
> > > On Fri, Jul 28, 2017 at 11:11:10AM -0700, Dan Williams wrote:  
> > > > On Fri, Jul 28, 2017 at 11:04 AM, Ross Zwisler
> > > >  wrote:  
> > > > > I've been using the virtualized NVDIMM support in QEMU for testing, 
> > > > > and I
> > > > > noticed that the physical addresses used by the virtual NVDIMMs 
> > > > > aren't present
> > > > > in the guest's e820 table.
> > > > >
> > > > > Here is the e820 table on my QEMU instance where I have one 32 GiB 
> > > > > virtual
> > > > > NVDIMM:
> > > > >
> > > > > [0.00] e820: BIOS-provided physical RAM map:
> > > > > [0.00] BIOS-e820: [mem 0x-0x0009fbff] 
> > > > > usable
> > > > > [0.00] BIOS-e820: [mem 0x0009fc00-0x0009] 
> > > > > reserved
> > > > > [0.00] BIOS-e820: [mem 0x000f-0x000f] 
> > > > > reserved
> > > > > [0.00] BIOS-e820: [mem 0x0010-0xbffdefff] 
> > > > > usable
> > > > > [0.00] BIOS-e820: [mem 0xbffdf000-0xbfff] 
> > > > > reserved
> > > > > [0.00] BIOS-e820: [mem 0xfeffc000-0xfeff] 
> > > > > reserved
> > > > > [0.00] BIOS-e820: [mem 0xfffc-0x] 
> > > > > reserved
> > > > > [0.00] BIOS-e820: [mem 0x0001-0x00023fff] 
> > > > > usable
> > > > >
> > > > > The physical addresses used by the virtual NVDIMM are 
> > > > > 0x24000-0xA4000.
> > > > > You can see this by looking at ndctl and the values we get from the 
> > > > > NFIT:
> > > > >
> > > > > # ndctl list -R
> > > > > {
> > > > >   "dev":"region0",
> > > > >   "size":34359738368,
> > > > >   "available_size":0,
> > > > >   "type":"pmem"
> > > > > }
> > > > >
> > > > > # grep . /sys/bus/nd/devices/region0/{resource,size}
> > > > > region0/resource:0x24000
> > > > > region0/size:34359738368
> > > > >
> > > > > Or you can see the same info by using iasl to dump
> > > > > /sys/firmware/acpi/tables/NFIT:
> > > > >
> > > > > [028h 0040   2]Subtable Type :  [System Physical 
> > > > > Address Range]
> > > > > [02Ah 0042   2]   Length : 0038
> > > > >
> > > > > [02Ch 0044   2]  Range Index : 0002
> > > > > [02Eh 0046   2]Flags (decoded below) : 0003
> > > > >Add/Online Operation Only : 1
> > > > >   Proximity Domain Valid : 1
> > > > > [030h 0048   4] Reserved : 
> > > > > [034h 0052   4] Proximity Domain : 
> > > > > [038h 0056  16]   Address Range GUID : 
> > > > > 66F0D379-B4F3-4074-AC43-0D3318B78CDB
> > > > > [048h 0072   8]   Address Range Base : 00024000
> > > > > [050h 0080   8] Address Range Length : 0008
> > > > > [058h 0088   8] Memory Map Attribute : 8008
> > > > >
> > > > > I expected to see a type 7 region for the NVDIMM physical address 
> > > > > range in the
> > > > > e820 table, so something like:
> > > > >
> > > > > [0.00] e820: BIOS-provided physical RAM map:
> > > > > [0.00] BIOS-e820: [mem 0x-0x0009fbff] 
> > > > > usable
> > > > > [0.00] BIOS-e820: [mem 0x0009fc00-0x0009] 
> > > > > reserved
> > > > > [0.00] BIOS-e820: [mem 0x000f-0x000f] 
> > > > > reserved
> > > > > [0.00] BIOS-e820: [mem 0x0010-0xbffdefff] 
> > > > > usable
> > > > > [0.00] BIOS-e820: [mem 0xbffdf000-0xbfff] 
> > > > > reserved
> > > > > [0.00] BIOS-e820: [mem 0xfeffc000-0xfeff] 
> > > > > reserved
> > > > > [0.00] BIOS-e820: [mem 0xfffc-0x] 
> > > > > reserved
> > > > > [0.00] BIOS-e820: [mem 0x0001-0x00023fff] 
> > > > > usable
> > > > > [0.00] BIOS-e820: [mem 0x00024000-0x000A4000] 
> > > > > persistent (type 7)
> > > > >  
> > > > 
> > > > Do you need that informationin e820? Linux effectively ignores type-7.
> > > > As long as the range is treated as reserved it's not clear that you
> > > > need the e820 entry. We also infect the persistent type back into the
> > > > memory map when the NFIT driver loads. /proc/iomem should show the
> > > > right data.  
> > > 
> > > [ Adding Linda & Toshi to see if they have an opinion. ]
> > > 
> > > I guess maybe we don't need it.  Yep, /proc/iomem looks good:
> > > 
> > >   # cat /proc/iomem
> > >   -0fff : Reserved
> > >   1000-0009fbff : System RAM
> > >   ...
> > >   1-23fff : System RAM
> > >   24000-a3fff : Persistent Memory
> > > 24000-a3fff : 

Re: [Qemu-devel] QEMU NVDIMM as type 7 in e820 table

2017-07-31 Thread Ross Zwisler
On Sat, Jul 29, 2017 at 06:49:33PM +0800, Haozhong Zhang wrote:
> On 07/28/17 13:45 -0600, Ross Zwisler wrote:
> > On Fri, Jul 28, 2017 at 11:11:10AM -0700, Dan Williams wrote:
> > > On Fri, Jul 28, 2017 at 11:04 AM, Ross Zwisler
> > >  wrote:
> > > > I've been using the virtualized NVDIMM support in QEMU for testing, and 
> > > > I
> > > > noticed that the physical addresses used by the virtual NVDIMMs aren't 
> > > > present
> > > > in the guest's e820 table.
> > > >
> > > > Here is the e820 table on my QEMU instance where I have one 32 GiB 
> > > > virtual
> > > > NVDIMM:
> > > >
> > > > [0.00] e820: BIOS-provided physical RAM map:
> > > > [0.00] BIOS-e820: [mem 0x-0x0009fbff] 
> > > > usable
> > > > [0.00] BIOS-e820: [mem 0x0009fc00-0x0009] 
> > > > reserved
> > > > [0.00] BIOS-e820: [mem 0x000f-0x000f] 
> > > > reserved
> > > > [0.00] BIOS-e820: [mem 0x0010-0xbffdefff] 
> > > > usable
> > > > [0.00] BIOS-e820: [mem 0xbffdf000-0xbfff] 
> > > > reserved
> > > > [0.00] BIOS-e820: [mem 0xfeffc000-0xfeff] 
> > > > reserved
> > > > [0.00] BIOS-e820: [mem 0xfffc-0x] 
> > > > reserved
> > > > [0.00] BIOS-e820: [mem 0x0001-0x00023fff] 
> > > > usable
> > > >
> > > > The physical addresses used by the virtual NVDIMM are 
> > > > 0x24000-0xA4000.
> > > > You can see this by looking at ndctl and the values we get from the 
> > > > NFIT:
> > > >
> > > > # ndctl list -R
> > > > {
> > > >   "dev":"region0",
> > > >   "size":34359738368,
> > > >   "available_size":0,
> > > >   "type":"pmem"
> > > > }
> > > >
> > > > # grep . /sys/bus/nd/devices/region0/{resource,size}
> > > > region0/resource:0x24000
> > > > region0/size:34359738368
> > > >
> > > > Or you can see the same info by using iasl to dump
> > > > /sys/firmware/acpi/tables/NFIT:
> > > >
> > > > [028h 0040   2]Subtable Type :  [System Physical 
> > > > Address Range]
> > > > [02Ah 0042   2]   Length : 0038
> > > >
> > > > [02Ch 0044   2]  Range Index : 0002
> > > > [02Eh 0046   2]Flags (decoded below) : 0003
> > > >Add/Online Operation Only : 1
> > > >   Proximity Domain Valid : 1
> > > > [030h 0048   4] Reserved : 
> > > > [034h 0052   4] Proximity Domain : 
> > > > [038h 0056  16]   Address Range GUID : 
> > > > 66F0D379-B4F3-4074-AC43-0D3318B78CDB
> > > > [048h 0072   8]   Address Range Base : 00024000
> > > > [050h 0080   8] Address Range Length : 0008
> > > > [058h 0088   8] Memory Map Attribute : 8008
> > > >
> > > > I expected to see a type 7 region for the NVDIMM physical address range 
> > > > in the
> > > > e820 table, so something like:
> > > >
> > > > [0.00] e820: BIOS-provided physical RAM map:
> > > > [0.00] BIOS-e820: [mem 0x-0x0009fbff] 
> > > > usable
> > > > [0.00] BIOS-e820: [mem 0x0009fc00-0x0009] 
> > > > reserved
> > > > [0.00] BIOS-e820: [mem 0x000f-0x000f] 
> > > > reserved
> > > > [0.00] BIOS-e820: [mem 0x0010-0xbffdefff] 
> > > > usable
> > > > [0.00] BIOS-e820: [mem 0xbffdf000-0xbfff] 
> > > > reserved
> > > > [0.00] BIOS-e820: [mem 0xfeffc000-0xfeff] 
> > > > reserved
> > > > [0.00] BIOS-e820: [mem 0xfffc-0x] 
> > > > reserved
> > > > [0.00] BIOS-e820: [mem 0x0001-0x00023fff] 
> > > > usable
> > > > [0.00] BIOS-e820: [mem 0x00024000-0x000A4000] 
> > > > persistent (type 7)
> > > >
> > > 
> > > Do you need that informationin e820? Linux effectively ignores type-7.
> > > As long as the range is treated as reserved it's not clear that you
> > > need the e820 entry. We also infect the persistent type back into the
> > > memory map when the NFIT driver loads. /proc/iomem should show the
> > > right data.
> > 
> > [ Adding Linda & Toshi to see if they have an opinion. ]
> > 
> > I guess maybe we don't need it.  Yep, /proc/iomem looks good:
> > 
> >   # cat /proc/iomem
> >   -0fff : Reserved
> >   1000-0009fbff : System RAM
> >   ...
> >   1-23fff : System RAM
> >   24000-a3fff : Persistent Memory
> > 24000-a3fff : namespace0.0
> > 
> > I was just worried that this was an inconsistency between the way that 
> > virtual
> > NVDIMMs are presented vs the way that they will be presented on bare metal. 
> >  I
> > at least look at the e820 table to get my bearings of how memory is laid 
> > out -
> > maybe I just need to look at 

Re: [Qemu-devel] QEMU NVDIMM as type 7 in e820 table

2017-07-29 Thread Haozhong Zhang
On 07/28/17 13:45 -0600, Ross Zwisler wrote:
> On Fri, Jul 28, 2017 at 11:11:10AM -0700, Dan Williams wrote:
> > On Fri, Jul 28, 2017 at 11:04 AM, Ross Zwisler
> >  wrote:
> > > I've been using the virtualized NVDIMM support in QEMU for testing, and I
> > > noticed that the physical addresses used by the virtual NVDIMMs aren't 
> > > present
> > > in the guest's e820 table.
> > >
> > > Here is the e820 table on my QEMU instance where I have one 32 GiB virtual
> > > NVDIMM:
> > >
> > > [0.00] e820: BIOS-provided physical RAM map:
> > > [0.00] BIOS-e820: [mem 0x-0x0009fbff] 
> > > usable
> > > [0.00] BIOS-e820: [mem 0x0009fc00-0x0009] 
> > > reserved
> > > [0.00] BIOS-e820: [mem 0x000f-0x000f] 
> > > reserved
> > > [0.00] BIOS-e820: [mem 0x0010-0xbffdefff] 
> > > usable
> > > [0.00] BIOS-e820: [mem 0xbffdf000-0xbfff] 
> > > reserved
> > > [0.00] BIOS-e820: [mem 0xfeffc000-0xfeff] 
> > > reserved
> > > [0.00] BIOS-e820: [mem 0xfffc-0x] 
> > > reserved
> > > [0.00] BIOS-e820: [mem 0x0001-0x00023fff] 
> > > usable
> > >
> > > The physical addresses used by the virtual NVDIMM are 
> > > 0x24000-0xA4000.
> > > You can see this by looking at ndctl and the values we get from the NFIT:
> > >
> > > # ndctl list -R
> > > {
> > >   "dev":"region0",
> > >   "size":34359738368,
> > >   "available_size":0,
> > >   "type":"pmem"
> > > }
> > >
> > > # grep . /sys/bus/nd/devices/region0/{resource,size}
> > > region0/resource:0x24000
> > > region0/size:34359738368
> > >
> > > Or you can see the same info by using iasl to dump
> > > /sys/firmware/acpi/tables/NFIT:
> > >
> > > [028h 0040   2]Subtable Type :  [System Physical 
> > > Address Range]
> > > [02Ah 0042   2]   Length : 0038
> > >
> > > [02Ch 0044   2]  Range Index : 0002
> > > [02Eh 0046   2]Flags (decoded below) : 0003
> > >Add/Online Operation Only : 1
> > >   Proximity Domain Valid : 1
> > > [030h 0048   4] Reserved : 
> > > [034h 0052   4] Proximity Domain : 
> > > [038h 0056  16]   Address Range GUID : 
> > > 66F0D379-B4F3-4074-AC43-0D3318B78CDB
> > > [048h 0072   8]   Address Range Base : 00024000
> > > [050h 0080   8] Address Range Length : 0008
> > > [058h 0088   8] Memory Map Attribute : 8008
> > >
> > > I expected to see a type 7 region for the NVDIMM physical address range 
> > > in the
> > > e820 table, so something like:
> > >
> > > [0.00] e820: BIOS-provided physical RAM map:
> > > [0.00] BIOS-e820: [mem 0x-0x0009fbff] 
> > > usable
> > > [0.00] BIOS-e820: [mem 0x0009fc00-0x0009] 
> > > reserved
> > > [0.00] BIOS-e820: [mem 0x000f-0x000f] 
> > > reserved
> > > [0.00] BIOS-e820: [mem 0x0010-0xbffdefff] 
> > > usable
> > > [0.00] BIOS-e820: [mem 0xbffdf000-0xbfff] 
> > > reserved
> > > [0.00] BIOS-e820: [mem 0xfeffc000-0xfeff] 
> > > reserved
> > > [0.00] BIOS-e820: [mem 0xfffc-0x] 
> > > reserved
> > > [0.00] BIOS-e820: [mem 0x0001-0x00023fff] 
> > > usable
> > > [0.00] BIOS-e820: [mem 0x00024000-0x000A4000] 
> > > persistent (type 7)
> > >
> > 
> > Do you need that informationin e820? Linux effectively ignores type-7.
> > As long as the range is treated as reserved it's not clear that you
> > need the e820 entry. We also infect the persistent type back into the
> > memory map when the NFIT driver loads. /proc/iomem should show the
> > right data.
> 
> [ Adding Linda & Toshi to see if they have an opinion. ]
> 
> I guess maybe we don't need it.  Yep, /proc/iomem looks good:
> 
>   # cat /proc/iomem
>   -0fff : Reserved
>   1000-0009fbff : System RAM
>   ...
>   1-23fff : System RAM
>   24000-a3fff : Persistent Memory
> 24000-a3fff : namespace0.0
> 
> I was just worried that this was an inconsistency between the way that virtual
> NVDIMMs are presented vs the way that they will be presented on bare metal.  I
> at least look at the e820 table to get my bearings of how memory is laid out -
> maybe I just need to look at /proc/iomem instead?

Do any OS or applications rely on the E820 information or the
consistency between E820 and NFIT to properly work? If any, I can make
a QEMU patch to build type-7 e820 entries.

Haozhong



Re: [Qemu-devel] QEMU NVDIMM as type 7 in e820 table

2017-07-28 Thread Kani, Toshimitsu
On Fri, 2017-07-28 at 13:45 -0600, Ross Zwisler wrote:
> On Fri, Jul 28, 2017 at 11:11:10AM -0700, Dan Williams wrote:
> > On Fri, Jul 28, 2017 at 11:04 AM, Ross Zwisler
> >  wrote:
 :
> > Do you need that informationin e820? Linux effectively ignores
> > type-7. As long as the range is treated as reserved it's not clear
> > that you need the e820 entry. We also infect the persistent type
> > back into the memory map when the NFIT driver loads. /proc/iomem
> > should show the right data.
> 
> [ Adding Linda & Toshi to see if they have an opinion. ]
> 
> I guess maybe we don't need it.  Yep, /proc/iomem looks good:
> 
>   # cat /proc/iomem
>   -0fff : Reserved
>   1000-0009fbff : System RAM
>   ...
>   1-23fff : System RAM
>   24000-a3fff : Persistent Memory
> 24000-a3fff : namespace0.0
> 
> I was just worried that this was an inconsistency between the way
> that virtual NVDIMMs are presented vs the way that they will be
> presented on bare metal.  I at least look at the e820 table to get my
> bearings of how memory is laid out - maybe I just need to look at
> /proc/iomem instead?

FW should present a persistent memory range in e820 or UEFI memory
descriptor table.  So, it's a good practice for QEMU to do it as well.

That said, the NFIT driver inserts a persistent memory range to the
kernel IO resource table from NFIT, so we are OK without this info. 
Yes, /proc/iomem shows how the resources are managed by the kernel.

Thanks,
-Toshi


Re: [Qemu-devel] QEMU NVDIMM as type 7 in e820 table

2017-07-28 Thread Dan Williams
On Fri, Jul 28, 2017 at 12:45 PM, Ross Zwisler
 wrote:
> On Fri, Jul 28, 2017 at 11:11:10AM -0700, Dan Williams wrote:
>> On Fri, Jul 28, 2017 at 11:04 AM, Ross Zwisler
[..]
> [ Adding Linda & Toshi to see if they have an opinion. ]
>
> I guess maybe we don't need it.  Yep, /proc/iomem looks good:
>
>   # cat /proc/iomem
>   -0fff : Reserved
>   1000-0009fbff : System RAM
>   ...
>   1-23fff : System RAM
>   24000-a3fff : Persistent Memory
> 24000-a3fff : namespace0.0
>
> I was just worried that this was an inconsistency between the way that virtual
> NVDIMMs are presented vs the way that they will be presented on bare metal.  I
> at least look at the e820 table to get my bearings of how memory is laid out -
> maybe I just need to look at /proc/iomem instead?

I don't think e820 matters as long as /proc/iomem ends up correct, and
the effective type is "reserved" . There's nothing in the
specification that requires the OS to validate e820 ranges vs NFIT.



Re: [Qemu-devel] QEMU NVDIMM as type 7 in e820 table

2017-07-28 Thread Ross Zwisler
On Fri, Jul 28, 2017 at 11:11:10AM -0700, Dan Williams wrote:
> On Fri, Jul 28, 2017 at 11:04 AM, Ross Zwisler
>  wrote:
> > I've been using the virtualized NVDIMM support in QEMU for testing, and I
> > noticed that the physical addresses used by the virtual NVDIMMs aren't 
> > present
> > in the guest's e820 table.
> >
> > Here is the e820 table on my QEMU instance where I have one 32 GiB virtual
> > NVDIMM:
> >
> > [0.00] e820: BIOS-provided physical RAM map:
> > [0.00] BIOS-e820: [mem 0x-0x0009fbff] usable
> > [0.00] BIOS-e820: [mem 0x0009fc00-0x0009] 
> > reserved
> > [0.00] BIOS-e820: [mem 0x000f-0x000f] 
> > reserved
> > [0.00] BIOS-e820: [mem 0x0010-0xbffdefff] usable
> > [0.00] BIOS-e820: [mem 0xbffdf000-0xbfff] 
> > reserved
> > [0.00] BIOS-e820: [mem 0xfeffc000-0xfeff] 
> > reserved
> > [0.00] BIOS-e820: [mem 0xfffc-0x] 
> > reserved
> > [0.00] BIOS-e820: [mem 0x0001-0x00023fff] usable
> >
> > The physical addresses used by the virtual NVDIMM are 
> > 0x24000-0xA4000.
> > You can see this by looking at ndctl and the values we get from the NFIT:
> >
> > # ndctl list -R
> > {
> >   "dev":"region0",
> >   "size":34359738368,
> >   "available_size":0,
> >   "type":"pmem"
> > }
> >
> > # grep . /sys/bus/nd/devices/region0/{resource,size}
> > region0/resource:0x24000
> > region0/size:34359738368
> >
> > Or you can see the same info by using iasl to dump
> > /sys/firmware/acpi/tables/NFIT:
> >
> > [028h 0040   2]Subtable Type :  [System Physical 
> > Address Range]
> > [02Ah 0042   2]   Length : 0038
> >
> > [02Ch 0044   2]  Range Index : 0002
> > [02Eh 0046   2]Flags (decoded below) : 0003
> >Add/Online Operation Only : 1
> >   Proximity Domain Valid : 1
> > [030h 0048   4] Reserved : 
> > [034h 0052   4] Proximity Domain : 
> > [038h 0056  16]   Address Range GUID : 
> > 66F0D379-B4F3-4074-AC43-0D3318B78CDB
> > [048h 0072   8]   Address Range Base : 00024000
> > [050h 0080   8] Address Range Length : 0008
> > [058h 0088   8] Memory Map Attribute : 8008
> >
> > I expected to see a type 7 region for the NVDIMM physical address range in 
> > the
> > e820 table, so something like:
> >
> > [0.00] e820: BIOS-provided physical RAM map:
> > [0.00] BIOS-e820: [mem 0x-0x0009fbff] usable
> > [0.00] BIOS-e820: [mem 0x0009fc00-0x0009] 
> > reserved
> > [0.00] BIOS-e820: [mem 0x000f-0x000f] 
> > reserved
> > [0.00] BIOS-e820: [mem 0x0010-0xbffdefff] usable
> > [0.00] BIOS-e820: [mem 0xbffdf000-0xbfff] 
> > reserved
> > [0.00] BIOS-e820: [mem 0xfeffc000-0xfeff] 
> > reserved
> > [0.00] BIOS-e820: [mem 0xfffc-0x] 
> > reserved
> > [0.00] BIOS-e820: [mem 0x0001-0x00023fff] usable
> > [0.00] BIOS-e820: [mem 0x00024000-0x000A4000] 
> > persistent (type 7)
> >
> 
> Do you need that informationin e820? Linux effectively ignores type-7.
> As long as the range is treated as reserved it's not clear that you
> need the e820 entry. We also infect the persistent type back into the
> memory map when the NFIT driver loads. /proc/iomem should show the
> right data.

[ Adding Linda & Toshi to see if they have an opinion. ]

I guess maybe we don't need it.  Yep, /proc/iomem looks good:

  # cat /proc/iomem
  -0fff : Reserved
  1000-0009fbff : System RAM
  ...
  1-23fff : System RAM
  24000-a3fff : Persistent Memory
24000-a3fff : namespace0.0

I was just worried that this was an inconsistency between the way that virtual
NVDIMMs are presented vs the way that they will be presented on bare metal.  I
at least look at the e820 table to get my bearings of how memory is laid out -
maybe I just need to look at /proc/iomem instead?



Re: [Qemu-devel] QEMU NVDIMM as type 7 in e820 table

2017-07-28 Thread Dan Williams
On Fri, Jul 28, 2017 at 11:04 AM, Ross Zwisler
 wrote:
> I've been using the virtualized NVDIMM support in QEMU for testing, and I
> noticed that the physical addresses used by the virtual NVDIMMs aren't present
> in the guest's e820 table.
>
> Here is the e820 table on my QEMU instance where I have one 32 GiB virtual
> NVDIMM:
>
> [0.00] e820: BIOS-provided physical RAM map:
> [0.00] BIOS-e820: [mem 0x-0x0009fbff] usable
> [0.00] BIOS-e820: [mem 0x0009fc00-0x0009] reserved
> [0.00] BIOS-e820: [mem 0x000f-0x000f] reserved
> [0.00] BIOS-e820: [mem 0x0010-0xbffdefff] usable
> [0.00] BIOS-e820: [mem 0xbffdf000-0xbfff] reserved
> [0.00] BIOS-e820: [mem 0xfeffc000-0xfeff] reserved
> [0.00] BIOS-e820: [mem 0xfffc-0x] reserved
> [0.00] BIOS-e820: [mem 0x0001-0x00023fff] usable
>
> The physical addresses used by the virtual NVDIMM are 0x24000-0xA4000.
> You can see this by looking at ndctl and the values we get from the NFIT:
>
> # ndctl list -R
> {
>   "dev":"region0",
>   "size":34359738368,
>   "available_size":0,
>   "type":"pmem"
> }
>
> # grep . /sys/bus/nd/devices/region0/{resource,size}
> region0/resource:0x24000
> region0/size:34359738368
>
> Or you can see the same info by using iasl to dump
> /sys/firmware/acpi/tables/NFIT:
>
> [028h 0040   2]Subtable Type :  [System Physical Address 
> Range]
> [02Ah 0042   2]   Length : 0038
>
> [02Ch 0044   2]  Range Index : 0002
> [02Eh 0046   2]Flags (decoded below) : 0003
>Add/Online Operation Only : 1
>   Proximity Domain Valid : 1
> [030h 0048   4] Reserved : 
> [034h 0052   4] Proximity Domain : 
> [038h 0056  16]   Address Range GUID : 
> 66F0D379-B4F3-4074-AC43-0D3318B78CDB
> [048h 0072   8]   Address Range Base : 00024000
> [050h 0080   8] Address Range Length : 0008
> [058h 0088   8] Memory Map Attribute : 8008
>
> I expected to see a type 7 region for the NVDIMM physical address range in the
> e820 table, so something like:
>
> [0.00] e820: BIOS-provided physical RAM map:
> [0.00] BIOS-e820: [mem 0x-0x0009fbff] usable
> [0.00] BIOS-e820: [mem 0x0009fc00-0x0009] reserved
> [0.00] BIOS-e820: [mem 0x000f-0x000f] reserved
> [0.00] BIOS-e820: [mem 0x0010-0xbffdefff] usable
> [0.00] BIOS-e820: [mem 0xbffdf000-0xbfff] reserved
> [0.00] BIOS-e820: [mem 0xfeffc000-0xfeff] reserved
> [0.00] BIOS-e820: [mem 0xfffc-0x] reserved
> [0.00] BIOS-e820: [mem 0x0001-0x00023fff] usable
> [0.00] BIOS-e820: [mem 0x00024000-0x000A4000] 
> persistent (type 7)
>

Do you need that informationin e820? Linux effectively ignores type-7.
As long as the range is treated as reserved it's not clear that you
need the e820 entry. We also infect the persistent type back into the
memory map when the NFIT driver loads. /proc/iomem should show the
right data.



[Qemu-devel] QEMU NVDIMM as type 7 in e820 table

2017-07-28 Thread Ross Zwisler
I've been using the virtualized NVDIMM support in QEMU for testing, and I
noticed that the physical addresses used by the virtual NVDIMMs aren't present
in the guest's e820 table.

Here is the e820 table on my QEMU instance where I have one 32 GiB virtual
NVDIMM:

[0.00] e820: BIOS-provided physical RAM map:
[0.00] BIOS-e820: [mem 0x-0x0009fbff] usable
[0.00] BIOS-e820: [mem 0x0009fc00-0x0009] reserved
[0.00] BIOS-e820: [mem 0x000f-0x000f] reserved
[0.00] BIOS-e820: [mem 0x0010-0xbffdefff] usable
[0.00] BIOS-e820: [mem 0xbffdf000-0xbfff] reserved
[0.00] BIOS-e820: [mem 0xfeffc000-0xfeff] reserved
[0.00] BIOS-e820: [mem 0xfffc-0x] reserved
[0.00] BIOS-e820: [mem 0x0001-0x00023fff] usable

The physical addresses used by the virtual NVDIMM are 0x24000-0xA4000.
You can see this by looking at ndctl and the values we get from the NFIT:

# ndctl list -R 
{
  "dev":"region0",
  "size":34359738368,
  "available_size":0,
  "type":"pmem"
}

# grep . /sys/bus/nd/devices/region0/{resource,size}
region0/resource:0x24000
region0/size:34359738368

Or you can see the same info by using iasl to dump
/sys/firmware/acpi/tables/NFIT:

[028h 0040   2]Subtable Type :  [System Physical Address 
Range]
[02Ah 0042   2]   Length : 0038

[02Ch 0044   2]  Range Index : 0002
[02Eh 0046   2]Flags (decoded below) : 0003
   Add/Online Operation Only : 1
  Proximity Domain Valid : 1
[030h 0048   4] Reserved : 
[034h 0052   4] Proximity Domain : 
[038h 0056  16]   Address Range GUID : 
66F0D379-B4F3-4074-AC43-0D3318B78CDB
[048h 0072   8]   Address Range Base : 00024000
[050h 0080   8] Address Range Length : 0008
[058h 0088   8] Memory Map Attribute : 8008

I expected to see a type 7 region for the NVDIMM physical address range in the
e820 table, so something like:

[0.00] e820: BIOS-provided physical RAM map:
[0.00] BIOS-e820: [mem 0x-0x0009fbff] usable
[0.00] BIOS-e820: [mem 0x0009fc00-0x0009] reserved
[0.00] BIOS-e820: [mem 0x000f-0x000f] reserved
[0.00] BIOS-e820: [mem 0x0010-0xbffdefff] usable
[0.00] BIOS-e820: [mem 0xbffdf000-0xbfff] reserved
[0.00] BIOS-e820: [mem 0xfeffc000-0xfeff] reserved
[0.00] BIOS-e820: [mem 0xfffc-0x] reserved
[0.00] BIOS-e820: [mem 0x0001-0x00023fff] usable
[0.00] BIOS-e820: [mem 0x00024000-0x000A4000] 
persistent (type 7)

Thanks,
- Ross