Skip to content

Commit

Permalink
6806 local x2apic enumeration is broken
Browse files Browse the repository at this point in the history
Reviewed by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
Reviewed by: Dan McDonald <danmcd@omniti.com>
Reviewed by: Garrett D'Amore <garrett@damore.org>
Approved by: Robert Mustacchi <rm@joyent.com>
  • Loading branch information
Hans Rosenfeld committed Mar 30, 2016
1 parent e4dcf6b commit 6025f1d
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions usr/src/uts/i86pc/io/mp_platform_common.c
Expand Up @@ -20,6 +20,7 @@
*/
/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright 2016 Nexenta Systems, Inc.
*/
/*
* Copyright (c) 2010, Intel Corporation.
Expand Down Expand Up @@ -752,12 +753,15 @@ acpi_probe(char *modname)
* 255 will have their APIC reported through
* Processor Local APIC.
*/
if ((mpx2a->LapicFlags & ACPI_MADT_ENABLED) &&
(mpx2a->LocalApicId >> 8)) {
if (mpx2a->LocalApicId < 255) {
cmn_err(CE_WARN, "!%s: ignoring invalid entry "
"in MADT: CPU %d has X2APIC Id %d (< 255)",
psm_name, mpx2a->Uid, mpx2a->LocalApicId);
} else if (mpx2a->LapicFlags & ACPI_MADT_ENABLED) {
if (apic_nproc < NCPU && use_mp &&
apic_nproc < boot_ncpus) {
local_ids[index] = mpx2a->LocalApicId;
proc_ids[index] = mpa->ProcessorId;
proc_ids[index] = mpx2a->Uid;
index++;
apic_nproc++;
} else if (apic_nproc == NCPU && !warned) {
Expand Down Expand Up @@ -1332,7 +1336,7 @@ apic_checksum(caddr_t bptr, int len)
/* this is the non-acpi version */
int
apic_handle_pci_pci_bridge(dev_info_t *idip, int child_devno, int child_ipin,
struct apic_io_intr **intrp)
struct apic_io_intr **intrp)
{
dev_info_t *dipp, *dip;
int pci_irq;
Expand Down

0 comments on commit 6025f1d

Please sign in to comment.