[SeaBIOS] [PATCH 1/2] seabios: Add Local APIC NMI Structure to ACPI MADT
Gleb Natapov
gleb at redhat.com
Fri Oct 28 14:19:20 CEST 2011
On Fri, Oct 28, 2011 at 09:08:18PM +0900, Kenji Kaneshige wrote:
> Avi, Jan,
>
> Could you comment on these patches?
>
> Inject-NMI doesn't work on Windows guest without these patches. Windows seems
> to setup LVT based on ACPI NMI structure information which is missing in current
> seabios. LVT LINT1 are never unmasked by Windows guest without the patches.
>
> Those patches were already reviewed by seabios people, but need ack from qemu/kvm
> side.
>
> Regards,
> Kenji Kaneshige
>
>
>
Acked-by: Gleb Natapov <gleb at redhat.com>
> (2011/10/10 15:06), Lai Jiangshan wrote:
> > From: Kenji Kaneshige<kaneshige.kenji at jp.fujitsu.com>
> >
> > ACPI NMI Structure describes LINT pin (LINT0 or LINT1) information to
> > which NMI is connected, and it is needed by OS to initialize local APIC.
> >
> > Signed-off-by: Kenji Kaneshige<kaneshige.kenji at jp.fujitsu.com>
> > Reviewed-by: Lai Jiangshan<laijs at cn.fujitsu.com>
> > ---
> > src/acpi.c | 22 ++++++++++++++++++++--
> > 1 file changed, 20 insertions(+), 2 deletions(-)
> >
> > Index: seabios/src/acpi.c
> > ===================================================================
> > --- seabios.orig/src/acpi.c
> > +++ seabios/src/acpi.c
> > @@ -134,6 +134,14 @@ struct madt_intsrcovr {
> > u16 flags;
> > } PACKED;
> >
> > +struct madt_local_nmi {
> > + ACPI_SUB_HEADER_DEF
> > + u8 processor_id; /* ACPI processor id */
> > + u16 flags; /* MPS INTI flags */
> > + u8 lint; /* Local APIC LINT# */
> > +} PACKED;
> > +
> > +
> > /*
> > * ACPI 2.0 Generic Address Space definition.
> > */
> > @@ -288,7 +296,9 @@ build_madt(void)
> > int madt_size = (sizeof(struct multiple_apic_table)
> > + sizeof(struct madt_processor_apic) * MaxCountCPUs
> > + sizeof(struct madt_io_apic)
> > - + sizeof(struct madt_intsrcovr) * 16);
> > + + sizeof(struct madt_intsrcovr) * 16
> > + + sizeof(struct madt_local_nmi));
> > +
> > struct multiple_apic_table *madt = malloc_high(madt_size);
> > if (!madt) {
> > warn_noalloc();
> > @@ -340,7 +350,15 @@ build_madt(void)
> > intsrcovr++;
> > }
> >
> > - build_header((void*)madt, APIC_SIGNATURE, (void*)intsrcovr - (void*)madt, 1);
> > + struct madt_local_nmi *local_nmi = (void*)intsrcovr;
> > + local_nmi->type = APIC_LOCAL_NMI;
> > + local_nmi->length = sizeof(*local_nmi);
> > + local_nmi->processor_id = 0xff; /* all processors */
> > + local_nmi->flags = 0;
> > + local_nmi->lint = 1; /* LINT1 */
> > + local_nmi++;
> > +
> > + build_header((void*)madt, APIC_SIGNATURE, (void*)local_nmi - (void*)madt, 1);
> > return madt;
> > }
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe kvm" in
> > the body of a message to majordomo at vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
> >
> >
--
Gleb.
More information about the SeaBIOS
mailing list