Re: [PATCH v3 3/3] device-dax: Add memory via add_memory_driver_managed()

2020-05-06 Thread Pankaj Gupta
> Currently, when adding memory, we create entries in /sys/firmware/memmap/
> as "System RAM". This will lead to kexec-tools to add that memory to the
> fixed-up initial memmap for a kexec kernel (loaded via kexec_load()). The
> memory will be considered initial System RAM by the kexec'd kernel and
> can no longer be reconfigured. This is not what happens during a real
> reboot.
>
> Let's add our memory via add_memory_driver_managed() now, so we won't
> create entries in /sys/firmware/memmap/ and indicate the memory as
> "System RAM (kmem)" in /proc/iomem. This allows everybody (especially
> kexec-tools) to identify that this memory is special and has to be treated
> differently than ordinary (hotplugged) System RAM.
>
> Before configuring the namespace:
> [root@localhost ~]# cat /proc/iomem
> ...
> 14000-33fff : Persistent Memory
>   14000-33fff : namespace0.0
> 328000-32 : PCI Bus :00
>
> After configuring the namespace:
> [root@localhost ~]# cat /proc/iomem
> ...
> 14000-33fff : Persistent Memory
>   14000-1481f : namespace0.0
>   14820-33fff : dax0.0
> 328000-32 : PCI Bus :00
>
> After loading kmem before this change:
> [root@localhost ~]# cat /proc/iomem
> ...
> 14000-33fff : Persistent Memory
>   14000-1481f : namespace0.0
>   15000-33fff : dax0.0
> 15000-33fff : System RAM
> 328000-32 : PCI Bus :00
>
> After loading kmem after this change:
> [root@localhost ~]# cat /proc/iomem
> ...
> 14000-33fff : Persistent Memory
>   14000-1481f : namespace0.0
>   15000-33fff : dax0.0
> 15000-33fff : System RAM (kmem)
> 328000-32 : PCI Bus :00
>
> After a proper reboot:
> [root@localhost ~]# cat /proc/iomem
> ...
> 14000-33fff : Persistent Memory
>   14000-1481f : namespace0.0
>   14820-33fff : dax0.0
> 328000-32 : PCI Bus :00
>
> Within the kexec kernel before this change:
> [root@localhost ~]# cat /proc/iomem
> ...
> 14000-33fff : Persistent Memory
>   14000-1481f : namespace0.0
>   15000-33fff : System RAM
> 328000-32 : PCI Bus :00
>
> Within the kexec kernel after this change:
> [root@localhost ~]# cat /proc/iomem
> ...
> 14000-33fff : Persistent Memory
>   14000-1481f : namespace0.0
>   14820-33fff : dax0.0
> 328000-32 : PCI Bus :00
>
> /sys/firmware/memmap/ before this change:
> -0009fc00 (System RAM)
> 0009fc00-000a (Reserved)
> 000f-0010 (Reserved)
> 0010-bffdf000 (System RAM)
> bffdf000-c000 (Reserved)
> feffc000-ff00 (Reserved)
> fffc-0001 (Reserved)
> 0001-00014000 (System RAM)
> 00015000-00034000 (System RAM)
>
> /sys/firmware/memmap/ after a proper reboot:
> -0009fc00 (System RAM)
> 0009fc00-000a (Reserved)
> 000f-0010 (Reserved)
> 0010-bffdf000 (System RAM)
> bffdf000-c000 (Reserved)
> feffc000-ff00 (Reserved)
> fffc-0001 (Reserved)
> 0001-00014000 (System RAM)
>
> /sys/firmware/memmap/ after this change:
> -0009fc00 (System RAM)
> 0009fc00-000a (Reserved)
> 000f-0010 (Reserved)
> 0010-bffdf000 (System RAM)
> bffdf000-c000 (Reserved)
> feffc000-ff00 (Reserved)
> fffc-0001 (Reserved)
> 0001-00014000 (System RAM)
>
> kexec-tools already seem to basically ignore any System RAM that's not
> on top level when searching for areas to place kexec images - but also
> for determining crash areas to dump via kdump. Changing the resource name
> won't have an impact.
>
> Cc: Andrew Morton 
> Cc: Michal Hocko 
> Cc: Pankaj Gupta 
> Cc: Wei Yang 
> Cc: Baoquan He 
> Cc: Dave Hansen 
> Cc: Eric Biederman 
> Cc: Pavel Tatashin 
> Cc: Dan Williams 
> Signed-off-by: David Hildenbrand 
> ---
>  drivers/dax/kmem.c | 8 +++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/dax/kmem.c b/drivers/dax/kmem.c
> index 3d0a7e702c94..5a645a24e359 100644

[PATCH v3 3/3] device-dax: Add memory via add_memory_driver_managed()

2020-05-04 Thread David Hildenbrand
Currently, when adding memory, we create entries in /sys/firmware/memmap/
as "System RAM". This will lead to kexec-tools to add that memory to the
fixed-up initial memmap for a kexec kernel (loaded via kexec_load()). The
memory will be considered initial System RAM by the kexec'd kernel and
can no longer be reconfigured. This is not what happens during a real
reboot.

Let's add our memory via add_memory_driver_managed() now, so we won't
create entries in /sys/firmware/memmap/ and indicate the memory as
"System RAM (kmem)" in /proc/iomem. This allows everybody (especially
kexec-tools) to identify that this memory is special and has to be treated
differently than ordinary (hotplugged) System RAM.

Before configuring the namespace:
[root@localhost ~]# cat /proc/iomem
...
14000-33fff : Persistent Memory
  14000-33fff : namespace0.0
328000-32 : PCI Bus :00

After configuring the namespace:
[root@localhost ~]# cat /proc/iomem
...
14000-33fff : Persistent Memory
  14000-1481f : namespace0.0
  14820-33fff : dax0.0
328000-32 : PCI Bus :00

After loading kmem before this change:
[root@localhost ~]# cat /proc/iomem
...
14000-33fff : Persistent Memory
  14000-1481f : namespace0.0
  15000-33fff : dax0.0
15000-33fff : System RAM
328000-32 : PCI Bus :00

After loading kmem after this change:
[root@localhost ~]# cat /proc/iomem
...
14000-33fff : Persistent Memory
  14000-1481f : namespace0.0
  15000-33fff : dax0.0
15000-33fff : System RAM (kmem)
328000-32 : PCI Bus :00

After a proper reboot:
[root@localhost ~]# cat /proc/iomem
...
14000-33fff : Persistent Memory
  14000-1481f : namespace0.0
  14820-33fff : dax0.0
328000-32 : PCI Bus :00

Within the kexec kernel before this change:
[root@localhost ~]# cat /proc/iomem
...
14000-33fff : Persistent Memory
  14000-1481f : namespace0.0
  15000-33fff : System RAM
328000-32 : PCI Bus :00

Within the kexec kernel after this change:
[root@localhost ~]# cat /proc/iomem
...
14000-33fff : Persistent Memory
  14000-1481f : namespace0.0
  14820-33fff : dax0.0
328000-32 : PCI Bus :00

/sys/firmware/memmap/ before this change:
-0009fc00 (System RAM)
0009fc00-000a (Reserved)
000f-0010 (Reserved)
0010-bffdf000 (System RAM)
bffdf000-c000 (Reserved)
feffc000-ff00 (Reserved)
fffc-0001 (Reserved)
0001-00014000 (System RAM)
00015000-00034000 (System RAM)

/sys/firmware/memmap/ after a proper reboot:
-0009fc00 (System RAM)
0009fc00-000a (Reserved)
000f-0010 (Reserved)
0010-bffdf000 (System RAM)
bffdf000-c000 (Reserved)
feffc000-ff00 (Reserved)
fffc-0001 (Reserved)
0001-00014000 (System RAM)

/sys/firmware/memmap/ after this change:
-0009fc00 (System RAM)
0009fc00-000a (Reserved)
000f-0010 (Reserved)
0010-bffdf000 (System RAM)
bffdf000-c000 (Reserved)
feffc000-ff00 (Reserved)
fffc-0001 (Reserved)
0001-00014000 (System RAM)

kexec-tools already seem to basically ignore any System RAM that's not
on top level when searching for areas to place kexec images - but also
for determining crash areas to dump via kdump. Changing the resource name
won't have an impact.

Cc: Andrew Morton 
Cc: Michal Hocko 
Cc: Pankaj Gupta 
Cc: Wei Yang 
Cc: Baoquan He 
Cc: Dave Hansen 
Cc: Eric Biederman 
Cc: Pavel Tatashin 
Cc: Dan Williams 
Signed-off-by: David Hildenbrand 
---
 drivers/dax/kmem.c | 8 +++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/dax/kmem.c b/drivers/dax/kmem.c
index 3d0a7e702c94..5a645a24e359 100644
--- a/drivers/dax/kmem.c
+++ b/drivers/dax/kmem.c
@@ -65,7 +65,13 @@ int dev_dax_kmem_probe(struct device *dev)
new_res->flags = IORESOURCE_SYSTEM_RAM;
new_res->name = dev_name(dev);
 
-   rc =