[SeaBIOS] [RFC PATCH v2 04/21] acpi: generate hotplug memory devices

Vasilis Liaskovitis vasilis.liaskovitis at profitbricks.com
Wed Jul 11 18:39:37 CEST 2012


Hi,

On Wed, Jul 11, 2012 at 06:48:38PM +0800, Wen Congyang wrote:
> > +        if (enabled)
> > +            add_e820(mem_base, mem_len, E820_RAM);
> 
> add_e820() is declared in memmap.h. You should include this header file,
> otherwise, seabios cannot be built.

thanks. you had the same comment on v1 but I forgot to address it. I will
update.

- Vasilis
> 
> Thanks
> Wen Congyang
> 
> > +        memslot_status = memslot_status >> 1;
> > +        entry++;
> > +    }
> > +    build_header((void*)ssdt, SSDT_SIGNATURE, ssdt_ptr - ssdt, 1);
> > +
> > +    return ssdt;
> > +}
> > +
> >  #include "ssdt-pcihp.hex"
> >  
> >  #define PCI_RMV_BASE 0xae0c
> > @@ -618,9 +739,6 @@ build_srat(void)
> >  {
> >      int nb_numa_nodes = qemu_cfg_get_numa_nodes();
> >  
> > -    if (nb_numa_nodes == 0)
> > -        return NULL;
> > -
> >      u64 *numadata = malloc_tmphigh(sizeof(u64) * (MaxCountCPUs + nb_numa_nodes));
> >      if (!numadata) {
> >          warn_noalloc();
> > @@ -629,10 +747,11 @@ build_srat(void)
> >  
> >      qemu_cfg_get_numa_data(numadata, MaxCountCPUs + nb_numa_nodes);
> >  
> > +    qemu_cfg_get_numa_data(&nb_hp_memslots, 1);
> >      struct system_resource_affinity_table *srat;
> >      int srat_size = sizeof(*srat) +
> >          sizeof(struct srat_processor_affinity) * MaxCountCPUs +
> > -        sizeof(struct srat_memory_affinity) * (nb_numa_nodes + 2);
> > +        sizeof(struct srat_memory_affinity) * (nb_numa_nodes + nb_hp_memslots + 2);
> >  
> >      srat = malloc_high(srat_size);
> >      if (!srat) {
> > @@ -667,7 +786,7 @@ build_srat(void)
> >       * from 640k-1M and possibly another one from 3.5G-4G.
> >       */
> >      struct srat_memory_affinity *numamem = (void*)core;
> > -    int slots = 0;
> > +    int slots = 0, node;
> >      u64 mem_len, mem_base, next_base = 0;
> >  
> >      acpi_build_srat_memory(numamem, 0, 640*1024, 0, 1);
> > @@ -694,10 +813,36 @@ build_srat(void)
> >              next_base += (1ULL << 32) - RamSize;
> >          }
> >          acpi_build_srat_memory(numamem, mem_base, mem_len, i-1, 1);
> > +
> >          numamem++;
> >          slots++;
> > +
> > +    }
> > +    mem = (void*)numamem;
> > +
> > +    if (nb_hp_memslots) {
> > +        u64 *hpmemdata = malloc_tmphigh(sizeof(u64) * (3 * nb_hp_memslots));
> > +        if (!hpmemdata) {
> > +            warn_noalloc();
> > +            free(hpmemdata);
> > +            free(numadata);
> > +            return NULL;
> > +        }
> > +
> > +        qemu_cfg_get_numa_data(hpmemdata, 3 * nb_hp_memslots);
> > +
> > +        for (i = 1; i < nb_hp_memslots + 1; ++i) {
> > +            mem_base = *hpmemdata++;
> > +            mem_len = *hpmemdata++;
> > +            node = *hpmemdata++;
> > +            acpi_build_srat_memory(numamem, mem_base, mem_len, node, 1);
> > +            numamem++;
> > +            slots++;
> > +        }
> > +        free(hpmemdata);
> >      }
> > -    for (; slots < nb_numa_nodes + 2; slots++) {
> > +
> > +    for (; slots < nb_numa_nodes + nb_hp_memslots + 2; slots++) {
> >          acpi_build_srat_memory(numamem, 0, 0, 0, 0);
> >          numamem++;
> >      }
> > @@ -748,6 +893,7 @@ acpi_bios_init(void)
> >      ACPI_INIT_TABLE(build_madt());
> >      ACPI_INIT_TABLE(build_hpet());
> >      ACPI_INIT_TABLE(build_srat());
> > +    ACPI_INIT_TABLE(build_memssdt());
> >      ACPI_INIT_TABLE(build_pcihp());
> >  
> >      u16 i, external_tables = qemu_cfg_acpi_additional_tables();
> 



More information about the SeaBIOS mailing list