Author: zbyniu                       Date: Tue Sep 19 08:27:45 2006 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- xen for 2.6.17

---- Files affected:
SOURCES:
   linux-2.6-xen.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/linux-2.6-xen.patch
diff -u /dev/null SOURCES/linux-2.6-xen.patch:1.1
--- /dev/null   Tue Sep 19 10:27:45 2006
+++ SOURCES/linux-2.6-xen.patch Tue Sep 19 10:27:40 2006
@@ -0,0 +1,89908 @@
+diff -urNp linux-2.6/arch/i386/boot-xen/Makefile 
new/arch/i386/boot-xen/Makefile
+--- linux-2.6/arch/i386/boot-xen/Makefile      1970-01-01 01:00:00.000000000 
+0100
++++ new/arch/i386/boot-xen/Makefile    2006-05-09 12:32:33.000000000 +0200
+@@ -0,0 +1,21 @@
++
++OBJCOPYFLAGS := -g --strip-unneeded
++
++vmlinuz: vmlinux-stripped FORCE
++      $(call if_changed,gzip)
++
++vmlinux-stripped: vmlinux FORCE
++      $(call if_changed,objcopy)
++
++INSTALL_ROOT := $(patsubst %/boot,%,$(INSTALL_PATH))
++
++XINSTALL_NAME ?= $(KERNELRELEASE)
++install:
++      mkdir -p $(INSTALL_ROOT)/boot
++      ln -f -s vmlinuz-$(XINSTALL_NAME)$(INSTALL_SUFFIX) 
$(INSTALL_ROOT)/boot/vmlinuz-$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(XENGUEST)$(INSTALL_SUFFIX)
++      rm -f $(INSTALL_ROOT)/boot/vmlinuz-$(XINSTALL_NAME)$(INSTALL_SUFFIX)
++      install -m0644 vmlinuz 
$(INSTALL_ROOT)/boot/vmlinuz-$(XINSTALL_NAME)$(INSTALL_SUFFIX)
++      install -m0644 vmlinux 
$(INSTALL_ROOT)/boot/vmlinux-syms-$(XINSTALL_NAME)$(INSTALL_SUFFIX)
++      install -m0664 .config 
$(INSTALL_ROOT)/boot/config-$(XINSTALL_NAME)$(INSTALL_SUFFIX)
++      install -m0664 System.map 
$(INSTALL_ROOT)/boot/System.map-$(XINSTALL_NAME)$(INSTALL_SUFFIX)
++      ln -f -s vmlinuz-$(XINSTALL_NAME)$(INSTALL_SUFFIX) 
$(INSTALL_ROOT)/boot/vmlinuz-$(VERSION).$(PATCHLEVEL)$(XENGUEST)$(INSTALL_SUFFIX)
+diff -urNp linux-2.6/arch/i386/Kconfig new/arch/i386/Kconfig
+--- linux-2.6/arch/i386/Kconfig        2006-07-03 14:14:14.000000000 +0200
++++ new/arch/i386/Kconfig      2006-05-23 18:37:09.000000000 +0200
+@@ -91,6 +91,15 @@ config X86_PC
+       help
+         Choose this option if your computer is a standard PC or compatible.
+ 
++config X86_XEN
++      bool "Xen-compatible"
++      select X86_UP_APIC if !SMP && XEN_PRIVILEGED_GUEST
++      select X86_UP_IOAPIC if !SMP && XEN_PRIVILEGED_GUEST
++      select SWIOTLB
++      help
++        Choose this option if you plan to run this kernel on top of the
++        Xen Hypervisor.
++
+ config X86_ELAN
+       bool "AMD Elan"
+       help
+@@ -193,6 +202,7 @@ source "arch/i386/Kconfig.cpu"
+ 
+ config HPET_TIMER
+       bool "HPET Timer Support"
++      depends on !X86_XEN
+       help
+         This enables the use of the HPET for the kernel's internal timer.
+         HPET is the next generation timer replacing legacy 8254s.
+@@ -223,7 +233,7 @@ config NR_CPUS
+ 
+ config SCHED_SMT
+       bool "SMT (Hyperthreading) scheduler support"
+-      depends on SMP
++      depends on SMP && !X86_XEN
+       default off
+       help
+         SMT scheduler support improves the CPU scheduler's decision making
+@@ -233,7 +243,7 @@ config SCHED_SMT
+ 
+ config SCHED_MC
+       bool "Multi-core scheduler support"
+-      depends on SMP
++      depends on SMP && !X86_XEN
+       default y
+       help
+         Multi-core scheduler support improves the CPU scheduler's decision
+@@ -244,7 +254,7 @@ source "kernel/Kconfig.preempt"
+ 
+ config X86_UP_APIC
+       bool "Local APIC support on uniprocessors"
+-      depends on !SMP && !(X86_VISWS || X86_VOYAGER)
++      depends on !SMP && !(X86_VISWS || X86_VOYAGER || XEN_UNPRIVILEGED_GUEST)
+       help
+         A local APIC (Advanced Programmable Interrupt Controller) is an
+         integrated interrupt controller in the CPU. If you have a single-CPU
+@@ -269,12 +279,12 @@ config X86_UP_IOAPIC
+ 
+ config X86_LOCAL_APIC
+       bool
+-      depends on X86_UP_APIC || ((X86_VISWS || SMP) && !X86_VOYAGER)
++      depends on X86_UP_APIC || ((X86_VISWS || SMP) && !(X86_VOYAGER || 
XEN_UNPRIVILEGED_GUEST))
+       default y
+ 
+ config X86_IO_APIC
+       bool
+-      depends on X86_UP_IOAPIC || (SMP && !(X86_VISWS || X86_VOYAGER))
++      depends on X86_UP_IOAPIC || (SMP && !(X86_VISWS || X86_VOYAGER || 
XEN_UNPRIVILEGED_GUEST))
+       default y
+ 
+ config X86_VISWS_APIC
+@@ -282,9 +292,14 @@ config X86_VISWS_APIC
+       depends on X86_VISWS
+       default y
+ 
++config X86_TSC
++      bool
++      depends on (MWINCHIP3D || MWINCHIP2 || MCRUSOE || MEFFICEON || 
MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII 
|| M686 || M586MMX || M586TSC || MK8 || MVIAC3_2 || MGEODEGX1) && !X86_NUMAQ && 
!X86_XEN
++      default y
++
+ config X86_MCE
+       bool "Machine Check Exception"
+-      depends on !X86_VOYAGER
++      depends on !(X86_VOYAGER || X86_XEN)
+       ---help---
+         Machine Check Exception support allows the processor to notify the
+         kernel if it detects a problem (e.g. overheating, component failure).
+@@ -374,6 +389,7 @@ config X86_REBOOTFIXUPS
+ 
+ config MICROCODE
+       tristate "/dev/cpu/microcode - Intel IA32 CPU microcode support"
++      depends on !XEN_UNPRIVILEGED_GUEST
+       ---help---
+         If you say Y here and also to "/dev file system support" in the
+         'File systems' section, you will be able to update the microcode on
+@@ -391,6 +407,7 @@ config MICROCODE
+ 
+ config X86_MSR
+       tristate "/dev/cpu/*/msr - Model-specific register support"
++      depends on !X86_XEN
+       help
+         This device gives privileged processes access to the x86
+         Model-Specific Registers (MSRs).  It is a character device with
+@@ -406,6 +423,10 @@ config X86_CPUID
+         with major 203 and minors 0 to 31 for /dev/cpu/0/cpuid to
+         /dev/cpu/31/cpuid.
+ 
++config SWIOTLB
++      bool
++      default n
++
+ source "drivers/firmware/Kconfig"
+ 
+ choice
+@@ -578,7 +599,7 @@ config HAVE_ARCH_EARLY_PFN_TO_NID
+ 
+ config HIGHPTE
+       bool "Allocate 3rd-level pagetables from highmem"
+-      depends on HIGHMEM4G || HIGHMEM64G
++      depends on (HIGHMEM4G || HIGHMEM64G) && !X86_XEN
+       help
+         The VM uses one page table entry for each page of physical memory.
+         For systems with a lot of RAM, this can be wasteful of precious
+@@ -587,6 +608,7 @@ config HIGHPTE
+ 
+ config MATH_EMULATION
+       bool "Math emulation"
++      depends on !X86_XEN
+       ---help---
+         Linux can emulate a math coprocessor (used for floating point
+         operations) if you don't have one. 486DX and Pentium processors have
+@@ -612,6 +634,8 @@ config MATH_EMULATION
+ 
+ config MTRR
+       bool "MTRR (Memory Type Range Register) support"
++      depends on !XEN_UNPRIVILEGED_GUEST
++      default y if X86_XEN
+       ---help---
+         On Intel P6 family processors (Pentium Pro, Pentium II and later)
+         the Memory Type Range Registers (MTRRs) may be used to control
+@@ -646,7 +670,7 @@ config MTRR
+ 
+ config EFI
+       bool "Boot from EFI support (EXPERIMENTAL)"
+-      depends on ACPI
++      depends on ACPI && !X86_XEN
+       default n
+       ---help---
+       This enables the the kernel to boot on EFI platforms using
+@@ -664,7 +688,7 @@ config EFI
+ 
+ config IRQBALANCE
+       bool "Enable kernel irq balancing"
+-      depends on SMP && X86_IO_APIC
++      depends on SMP && X86_IO_APIC && !X86_XEN
+       default y
+       help
+         The default yes will allow the kernel to do irq load balancing.
+@@ -712,7 +736,7 @@ source kernel/Kconfig.hz
+ 
+ config KEXEC
+       bool "kexec system call (EXPERIMENTAL)"
+-      depends on EXPERIMENTAL
++      depends on EXPERIMENTAL && !X86_XEN
+       help
+         kexec is a system call that implements the ability to shutdown your
+         current kernel, and to start another kernel.  It is like a reboot
+@@ -767,18 +791,20 @@ endmenu
+ 
+ 
+ menu "Power management options (ACPI, APM)"
+-      depends on !X86_VOYAGER
++      depends on !(X86_VOYAGER || XEN_UNPRIVILEGED_GUEST)
+ 
++if !X86_XEN
+ source kernel/power/Kconfig
++endif
+ 
+ source "drivers/acpi/Kconfig"
+ 
+ menu "APM (Advanced Power Management) BIOS Support"
+-depends on PM && !X86_VISWS
++depends on PM && !(X86_VISWS || X86_XEN)
+ 
+ config APM
+       tristate "APM (Advanced Power Management) BIOS support"
+-      depends on PM
++      depends on PM && PM_LEGACY
+       ---help---
+         APM is a BIOS specification for saving power using several different
+         techniques. This is mostly useful for battery powered laptops with
+@@ -963,6 +989,7 @@ choice
+ 
+ config PCI_GOBIOS
+       bool "BIOS"
++      depends on !X86_XEN
+ 
+ config PCI_GOMMCONFIG
+       bool "MMConfig"
+@@ -970,6 +997,13 @@ config PCI_GOMMCONFIG
+ config PCI_GODIRECT
+       bool "Direct"
+ 
++config PCI_GOXEN_FE
++      bool "Xen PCI Frontend"
++      depends on X86_XEN
++      help
++        The PCI device frontend driver allows the kernel to import arbitrary
++        PCI devices from a PCI backend to support PCI driver domains.
++
+ config PCI_GOANY
+       bool "Any"
+ 
+@@ -977,7 +1011,7 @@ endchoice
+ 
+ config PCI_BIOS
+       bool
+-      depends on !X86_VISWS && PCI && (PCI_GOBIOS || PCI_GOANY)
++      depends on !(X86_VISWS || X86_XEN) && PCI && (PCI_GOBIOS || PCI_GOANY)
+       default y
+ 
+ config PCI_DIRECT
+@@ -990,6 +1024,18 @@ config PCI_MMCONFIG
+       depends on PCI && ACPI && (PCI_GOMMCONFIG || PCI_GOANY)
+       default y
+ 
++config XEN_PCIDEV_FRONTEND
++      bool
++      depends on PCI && X86_XEN && (PCI_GOXEN_FE || PCI_GOANY)
++      default y
++
++config XEN_PCIDEV_FE_DEBUG
++      bool "Xen PCI Frontend Debugging"
++      depends on XEN_PCIDEV_FRONTEND
++      default n
++      help
++        Enables some debug statements within the PCI Frontend.
++
+ source "drivers/pci/pcie/Kconfig"
+ 
+ source "drivers/pci/Kconfig"
+@@ -1000,7 +1046,7 @@ config ISA_DMA_API
+ 
+ config ISA
+       bool "ISA support"
+-      depends on !(X86_VOYAGER || X86_VISWS)
++      depends on !(X86_VOYAGER || X86_VISWS || X86_XEN)
+       help
+         Find out whether you have ISA slots on your motherboard.  ISA is the
+         name of a bus system, i.e. the way the CPU talks to the other stuff
+@@ -1027,7 +1073,7 @@ config EISA
+ source "drivers/eisa/Kconfig"
+ 
+ config MCA
+-      bool "MCA support" if !(X86_VISWS || X86_VOYAGER)
++      bool "MCA support" if !(X86_VISWS || X86_VOYAGER || X86_XEN)
+       default y if X86_VOYAGER
+       help
+         MicroChannel Architecture is found in some IBM PS/2 machines and
+@@ -1089,6 +1135,8 @@ source "security/Kconfig"
+ 
+ source "crypto/Kconfig"
+ 
++source "drivers/xen/Kconfig"
++
+ source "lib/Kconfig"
+ 
+ #
+@@ -1114,7 +1162,7 @@ config X86_SMP
+ 
+ config X86_HT
+       bool
+-      depends on SMP && !(X86_VISWS || X86_VOYAGER)
++      depends on SMP && !(X86_VISWS || X86_VOYAGER || X86_XEN)
+       default y
+ 
+ config X86_BIOS_REBOOT
+@@ -1127,6 +1175,16 @@ config X86_TRAMPOLINE
+       depends on X86_SMP || (X86_VOYAGER && SMP)
+       default y
+ 
++config X86_NO_TSS
++      bool
++      depends on X86_XEN
++      default y
++
++config X86_NO_IDT
++      bool
++      depends on X86_XEN
++      default y
++
+ config KTIME_SCALAR
+       bool
+       default y
+diff -urNp linux-2.6/arch/i386/Kconfig.cpu new/arch/i386/Kconfig.cpu
+--- linux-2.6/arch/i386/Kconfig.cpu    2006-07-03 14:14:14.000000000 +0200
++++ new/arch/i386/Kconfig.cpu  2006-05-09 12:32:33.000000000 +0200
+@@ -251,7 +251,7 @@ config X86_PPRO_FENCE
+ 
+ config X86_F00F_BUG
+       bool
+-      depends on M586MMX || M586TSC || M586 || M486 || M386
++      depends on (M586MMX || M586TSC || M586 || M486 || M386) && !X86_NO_IDT
+       default y
+ 
+ config X86_WP_WORKS_OK
+diff -urNp linux-2.6/arch/i386/Kconfig.debug new/arch/i386/Kconfig.debug
+--- linux-2.6/arch/i386/Kconfig.debug  2006-07-03 14:14:14.000000000 +0200
++++ new/arch/i386/Kconfig.debug        2006-05-09 12:32:33.000000000 +0200
+@@ -84,6 +84,7 @@ config X86_MPPARSE
+ config DOUBLEFAULT
+       default y
+       bool "Enable doublefault exception handler" if EMBEDDED
++      depends on !X86_NO_TSS
+       help
+           This option allows trapping of rare doublefault exceptions that
+           would otherwise cause a system to silently reboot. Disabling this
+diff -urNp linux-2.6/arch/i386/kernel/acpi/boot-xen.c 
new/arch/i386/kernel/acpi/boot-xen.c
+--- linux-2.6/arch/i386/kernel/acpi/boot-xen.c 1970-01-01 01:00:00.000000000 
+0100
++++ new/arch/i386/kernel/acpi/boot-xen.c       2006-05-23 18:37:09.000000000 
+0200
+@@ -0,0 +1,1167 @@
++/*
++ *  boot.c - Architecture-Specific Low-Level ACPI Boot Support
++ *
++ *  Copyright (C) 2001, 2002 Paul Diefenbaugh <[EMAIL PROTECTED]>
++ *  Copyright (C) 2001 Jun Nakajima <[EMAIL PROTECTED]>
++ *
++ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ *
++ *  This program is free software; you can redistribute it and/or modify
++ *  it under the terms of the GNU General Public License as published by
++ *  the Free Software Foundation; either version 2 of the License, or
++ *  (at your option) any later version.
++ *
++ *  This program is distributed in the hope that it will be useful,
++ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *  GNU General Public License for more details.
++ *
++ *  You should have received a copy of the GNU General Public License
++ *  along with this program; if not, write to the Free Software
++ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ *
++ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++ */
++
++#include <linux/init.h>
++#include <linux/config.h>
++#include <linux/acpi.h>
++#include <linux/efi.h>
++#include <linux/module.h>
++#include <linux/dmi.h>
++#include <linux/irq.h>
++
++#include <asm/pgtable.h>
++#include <asm/io_apic.h>
++#include <asm/apic.h>
++#include <asm/io.h>
++#include <asm/mpspec.h>
++
++#ifdef        CONFIG_X86_64
++
++extern void __init clustered_apic_check(void);
++
++extern int gsi_irq_sharing(int gsi);
++#include <asm/proto.h>
++
++static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) { 
return 0; }
++
++
++#else                         /* X86 */
++
++#ifdef        CONFIG_X86_LOCAL_APIC
++#include <mach_apic.h>
++#include <mach_mpparse.h>
++#endif                                /* CONFIG_X86_LOCAL_APIC */
++
++static inline int gsi_irq_sharing(int gsi) { return gsi; }
++
++#endif                                /* X86 */
++
++#define BAD_MADT_ENTRY(entry, end) (                                      \
++              (!entry) || (unsigned long)entry + sizeof(*entry) > end ||  \
++              ((acpi_table_entry_header *)entry)->length != sizeof(*entry))
++
++#define PREFIX                        "ACPI: "
++
++int acpi_noirq __initdata;    /* skip ACPI IRQ initialization */
++int acpi_pci_disabled __initdata;     /* skip ACPI PCI scan and IRQ 
initialization */
++int acpi_ht __initdata = 1;   /* enable HT */
++
++int acpi_lapic;
++int acpi_ioapic;
++int acpi_strict;
++EXPORT_SYMBOL(acpi_strict);
++
++acpi_interrupt_flags acpi_sci_flags __initdata;
++int acpi_sci_override_gsi __initdata;
++int acpi_skip_timer_override __initdata;
++
++#ifdef CONFIG_X86_LOCAL_APIC
++static u64 acpi_lapic_addr __initdata = APIC_DEFAULT_PHYS_BASE;
++#endif
++
++#ifndef __HAVE_ARCH_CMPXCHG
++#warning ACPI uses CMPXCHG, i486 and later hardware
++#endif
++
++#define MAX_MADT_ENTRIES      256
++u8 x86_acpiid_to_apicid[MAX_MADT_ENTRIES] =
++    {[0 ... MAX_MADT_ENTRIES - 1] = 0xff };
++EXPORT_SYMBOL(x86_acpiid_to_apicid);
++
++/* --------------------------------------------------------------------------
++                              Boot-time Configuration
++   -------------------------------------------------------------------------- 
*/
++
++/*
++ * The default interrupt routing model is PIC (8259).  This gets
++ * overriden if IOAPICs are enumerated (below).
++ */
++enum acpi_irq_model_id acpi_irq_model = ACPI_IRQ_MODEL_PIC;
++
++#if defined(CONFIG_X86_64) && !defined(CONFIG_XEN)
++
++/* rely on all ACPI tables being in the direct mapping */
++char *__acpi_map_table(unsigned long phys_addr, unsigned long size)
++{
++      if (!phys_addr || !size)
++              return NULL;
++
++      if (phys_addr+size <= (end_pfn_map << PAGE_SHIFT) + PAGE_SIZE)
++              return __va(phys_addr);
++
++      return NULL;
++}
++
++#else
++
++/*
++ * Temporarily use the virtual area starting from FIX_IO_APIC_BASE_END,
++ * to map the target physical address. The problem is that set_fixmap()
++ * provides a single page, and it is possible that the page is not
++ * sufficient.
++ * By using this area, we can map up to MAX_IO_APICS pages temporarily,
++ * i.e. until the next __va_range() call.
++ *
++ * Important Safety Note:  The fixed I/O APIC page numbers are *subtracted*
++ * from the fixed base.  That's why we start at FIX_IO_APIC_BASE_END and
++ * count idx down while incrementing the phys address.
++ */
++char *__acpi_map_table(unsigned long phys, unsigned long size)
++{
++      unsigned long base, offset, mapped_size;
++      int idx;
++
++#ifndef CONFIG_XEN
++      if (phys + size < 8 * 1024 * 1024)
++              return __va(phys);
++#endif
++
++      offset = phys & (PAGE_SIZE - 1);
++      mapped_size = PAGE_SIZE - offset;
++      set_fixmap(FIX_ACPI_END, phys);
++      base = fix_to_virt(FIX_ACPI_END);
++
++      /*
++       * Most cases can be covered by the below.
++       */
++      idx = FIX_ACPI_END;
++      while (mapped_size < size) {
++              if (--idx < FIX_ACPI_BEGIN)
++                      return NULL;    /* cannot handle this */
++              phys += PAGE_SIZE;
++              set_fixmap(idx, phys);
++              mapped_size += PAGE_SIZE;
++      }
++
++      return ((unsigned char *)base + offset);
++}
++#endif
++
++#ifdef CONFIG_PCI_MMCONFIG
++/* The physical address of the MMCONFIG aperture.  Set from ACPI tables. */
++struct acpi_table_mcfg_config *pci_mmcfg_config;
++int pci_mmcfg_config_num;
++
++int __init acpi_parse_mcfg(unsigned long phys_addr, unsigned long size)
++{
++      struct acpi_table_mcfg *mcfg;
++      unsigned long i;
++      int config_size;
++
++      if (!phys_addr || !size)
++              return -EINVAL;
++
++      mcfg = (struct acpi_table_mcfg *)__acpi_map_table(phys_addr, size);
++      if (!mcfg) {
++              printk(KERN_WARNING PREFIX "Unable to map MCFG\n");
++              return -ENODEV;
++      }
++
++      /* how many config structures do we have */
++      pci_mmcfg_config_num = 0;
++      i = size - sizeof(struct acpi_table_mcfg);
++      while (i >= sizeof(struct acpi_table_mcfg_config)) {
++              ++pci_mmcfg_config_num;
++              i -= sizeof(struct acpi_table_mcfg_config);
++      };
++      if (pci_mmcfg_config_num == 0) {
++              printk(KERN_ERR PREFIX "MMCONFIG has no entries\n");
++              return -ENODEV;
++      }
++
++      config_size = pci_mmcfg_config_num * sizeof(*pci_mmcfg_config);
++      pci_mmcfg_config = kmalloc(config_size, GFP_KERNEL);
++      if (!pci_mmcfg_config) {
++              printk(KERN_WARNING PREFIX
++                     "No memory for MCFG config tables\n");
++              return -ENOMEM;
++      }
++
++      memcpy(pci_mmcfg_config, &mcfg->config, config_size);
++      for (i = 0; i < pci_mmcfg_config_num; ++i) {
++              if (mcfg->config[i].base_reserved) {
++                      printk(KERN_ERR PREFIX
++                             "MMCONFIG not in low 4GB of memory\n");
++                      return -ENODEV;
++              }
++      }
++
++      return 0;
++}
++#endif                                /* CONFIG_PCI_MMCONFIG */
++
++#ifdef CONFIG_X86_LOCAL_APIC
++static int __init acpi_parse_madt(unsigned long phys_addr, unsigned long size)
++{
++      struct acpi_table_madt *madt = NULL;
++
++      if (!phys_addr || !size)
++              return -EINVAL;
++
++      madt = (struct acpi_table_madt *)__acpi_map_table(phys_addr, size);
++      if (!madt) {
++              printk(KERN_WARNING PREFIX "Unable to map MADT\n");
++              return -ENODEV;
++      }
++
++      if (madt->lapic_address) {
++              acpi_lapic_addr = (u64) madt->lapic_address;
++
++              printk(KERN_DEBUG PREFIX "Local APIC address 0x%08x\n",
++                     madt->lapic_address);
++      }
++
++      acpi_madt_oem_check(madt->header.oem_id, madt->header.oem_table_id);
++
++      return 0;
++}
++
++static int __init
++acpi_parse_lapic(acpi_table_entry_header * header, const unsigned long end)
++{
++      struct acpi_table_lapic *processor = NULL;
++
++      processor = (struct acpi_table_lapic *)header;
++
<<Diff was trimmed, longer than 597 lines>>
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to