Message ID | 20180920103243.28474-16-david@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | memory-device: complete refactoring + virtio-pmem | expand |
On Thu, 20 Sep 2018 12:32:36 +0200 David Hildenbrand <david@redhat.com> wrote: > Once we have other memory devices that are not ACPI devices (e.g. > virtio based), we cannot indicate them via ACPI. So let's skip these > devices. > > Signed-off-by: David Hildenbrand <david@redhat.com> dimm specific entries in SRAT will be removed so this patch is not needed (http://patchwork.ozlabs.org/patch/967512/) > --- > hw/i386/acpi-build.c | 15 +++++++++++++-- > 1 file changed, 13 insertions(+), 2 deletions(-) > > diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c > index e1ee8ae9e0..2278522b87 100644 > --- a/hw/i386/acpi-build.c > +++ b/hw/i386/acpi-build.c > @@ -2266,7 +2266,6 @@ static void build_srat_hotpluggable_memory(GArray *table_data, uint64_t base, > for (cur = base, info = info_list; > cur < end; > cur += size, info = info->next) { > - numamem = acpi_data_push(table_data, sizeof *numamem); > > if (!info) { > /* > @@ -2278,19 +2277,30 @@ static void build_srat_hotpluggable_memory(GArray *table_data, uint64_t base, > * Memory devices may override proximity set by this entry, > * providing _PXM method if necessary. > */ > + numamem = acpi_data_push(table_data, sizeof *numamem); > build_srat_memory(numamem, end - 1, 1, default_node, > MEM_AFFINITY_HOTPLUGGABLE | MEM_AFFINITY_ENABLED); > break; > } > > mi = info->value; > + if (mi->type != MEMORY_DEVICE_INFO_KIND_DIMM && > + mi->type != MEMORY_DEVICE_INFO_KIND_NVDIMM) { > + /* > + * Don't indicate memory devices that are not proper ACPI devices, > + * merge them with the empty ranges. > + */ > + size = 0; > + continue; > + } > + > is_nvdimm = (mi->type == MEMORY_DEVICE_INFO_KIND_NVDIMM); > di = !is_nvdimm ? mi->u.dimm.data : mi->u.nvdimm.data; > > if (cur < di->addr) { > + numamem = acpi_data_push(table_data, sizeof *numamem); > build_srat_memory(numamem, cur, di->addr - cur, default_node, > MEM_AFFINITY_HOTPLUGGABLE | MEM_AFFINITY_ENABLED); > - numamem = acpi_data_push(table_data, sizeof *numamem); > } > > size = di->size; > @@ -2303,6 +2313,7 @@ static void build_srat_hotpluggable_memory(GArray *table_data, uint64_t base, > flags |= MEM_AFFINITY_NON_VOLATILE; > } > > + numamem = acpi_data_push(table_data, sizeof *numamem); > build_srat_memory(numamem, di->addr, size, di->node, flags); > } >
On 24/09/2018 16:22, Igor Mammedov wrote: > On Thu, 20 Sep 2018 12:32:36 +0200 > David Hildenbrand <david@redhat.com> wrote: > >> Once we have other memory devices that are not ACPI devices (e.g. >> virtio based), we cannot indicate them via ACPI. So let's skip these >> devices. >> >> Signed-off-by: David Hildenbrand <david@redhat.com> > dimm specific entries in SRAT will be removed so this patch is not needed > (http://patchwork.ozlabs.org/patch/967512/) Indeed, even better - dropped this patch while rebasing.
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index e1ee8ae9e0..2278522b87 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -2266,7 +2266,6 @@ static void build_srat_hotpluggable_memory(GArray *table_data, uint64_t base, for (cur = base, info = info_list; cur < end; cur += size, info = info->next) { - numamem = acpi_data_push(table_data, sizeof *numamem); if (!info) { /* @@ -2278,19 +2277,30 @@ static void build_srat_hotpluggable_memory(GArray *table_data, uint64_t base, * Memory devices may override proximity set by this entry, * providing _PXM method if necessary. */ + numamem = acpi_data_push(table_data, sizeof *numamem); build_srat_memory(numamem, end - 1, 1, default_node, MEM_AFFINITY_HOTPLUGGABLE | MEM_AFFINITY_ENABLED); break; } mi = info->value; + if (mi->type != MEMORY_DEVICE_INFO_KIND_DIMM && + mi->type != MEMORY_DEVICE_INFO_KIND_NVDIMM) { + /* + * Don't indicate memory devices that are not proper ACPI devices, + * merge them with the empty ranges. + */ + size = 0; + continue; + } + is_nvdimm = (mi->type == MEMORY_DEVICE_INFO_KIND_NVDIMM); di = !is_nvdimm ? mi->u.dimm.data : mi->u.nvdimm.data; if (cur < di->addr) { + numamem = acpi_data_push(table_data, sizeof *numamem); build_srat_memory(numamem, cur, di->addr - cur, default_node, MEM_AFFINITY_HOTPLUGGABLE | MEM_AFFINITY_ENABLED); - numamem = acpi_data_push(table_data, sizeof *numamem); } size = di->size; @@ -2303,6 +2313,7 @@ static void build_srat_hotpluggable_memory(GArray *table_data, uint64_t base, flags |= MEM_AFFINITY_NON_VOLATILE; } + numamem = acpi_data_push(table_data, sizeof *numamem); build_srat_memory(numamem, di->addr, size, di->node, flags); }
Once we have other memory devices that are not ACPI devices (e.g. virtio based), we cannot indicate them via ACPI. So let's skip these devices. Signed-off-by: David Hildenbrand <david@redhat.com> --- hw/i386/acpi-build.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-)