]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge branch 'x86-efi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 12 Nov 2013 01:48:30 +0000 (10:48 +0900)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 12 Nov 2013 01:48:30 +0000 (10:48 +0900)
Pull x86 EFI changes from Ingo Molnar:
 "Main changes:

   - Add support for earlyprintk=efi which uses the EFI framebuffer.
     Very useful for debugging boot problems.

   - EFI stub support for large memory maps (more than 128 entries)

   - EFI ARM support - this was mostly done by generalizing x86 <-> ARM
     platform differences, such as by moving x86 EFI code into
     drivers/firmware/efi/ and sharing it with ARM.

   - Documentation updates

   - misc fixes"

* 'x86-efi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (26 commits)
  x86/efi: Add EFI framebuffer earlyprintk support
  boot, efi: Remove redundant memset()
  x86/efi: Fix config_table_type array termination
  x86 efi: bugfix interrupt disabling sequence
  x86: EFI stub support for large memory maps
  efi: resolve warnings found on ARM compile
  efi: Fix types in EFI calls to match EFI function definitions.
  efi: Renames in handle_cmdline_files() to complete generalization.
  efi: Generalize handle_ramdisks() and rename to handle_cmdline_files().
  efi: Allow efi_free() to be called with size of 0
  efi: use efi_get_memory_map() to get final map for x86
  efi: generalize efi_get_memory_map()
  efi: Rename __get_map() to efi_get_memory_map()
  efi: Move unicode to ASCII conversion to shared function.
  efi: Generalize relocate_kernel() for use by other architectures.
  efi: Move relocate_kernel() to shared file.
  efi: Enforce minimum alignment of 1 page on allocations.
  efi: Rename memory allocation/free functions
  efi: Add system table pointer argument to shared functions.
  efi: Move common EFI stub code from x86 arch code to common location
  ...

1  2 
Documentation/kernel-parameters.txt
arch/x86/Kconfig
arch/x86/platform/efi/efi.c

index 203f4a9d9efe9ae1b2384c6d040cfd3d6f93a603,7a0f202d482e68420c65646a3c9308b95e703df7..0fbde71a1297a85c7432f4733e97476d43a31484
@@@ -235,61 -235,10 +235,61 @@@ bytes respectively. Such letter suffixe
                        Format: To spoof as Windows 98: ="Microsoft Windows"
  
        acpi_osi=       [HW,ACPI] Modify list of supported OS interface strings
 -                      acpi_osi="string1"      # add string1 -- only one string
 -                      acpi_osi="!string2"     # remove built-in string2
 +                      acpi_osi="string1"      # add string1
 +                      acpi_osi="!string2"     # remove string2
 +                      acpi_osi=!*             # remove all strings
 +                      acpi_osi=!              # disable all built-in OS vendor
 +                                                strings
                        acpi_osi=               # disable all strings
  
 +                      'acpi_osi=!' can be used in combination with single or
 +                      multiple 'acpi_osi="string1"' to support specific OS
 +                      vendor string(s).  Note that such command can only
 +                      affect the default state of the OS vendor strings, thus
 +                      it cannot affect the default state of the feature group
 +                      strings and the current state of the OS vendor strings,
 +                      specifying it multiple times through kernel command line
 +                      is meaningless.  This command is useful when one do not
 +                      care about the state of the feature group strings which
 +                      should be controlled by the OSPM.
 +                      Examples:
 +                        1. 'acpi_osi=! acpi_osi="Windows 2000"' is equivalent
 +                           to 'acpi_osi="Windows 2000" acpi_osi=!', they all
 +                           can make '_OSI("Windows 2000")' TRUE.
 +
 +                      'acpi_osi=' cannot be used in combination with other
 +                      'acpi_osi=' command lines, the _OSI method will not
 +                      exist in the ACPI namespace.  NOTE that such command can
 +                      only affect the _OSI support state, thus specifying it
 +                      multiple times through kernel command line is also
 +                      meaningless.
 +                      Examples:
 +                        1. 'acpi_osi=' can make 'CondRefOf(_OSI, Local1)'
 +                           FALSE.
 +
 +                      'acpi_osi=!*' can be used in combination with single or
 +                      multiple 'acpi_osi="string1"' to support specific
 +                      string(s).  Note that such command can affect the
 +                      current state of both the OS vendor strings and the
 +                      feature group strings, thus specifying it multiple times
 +                      through kernel command line is meaningful.  But it may
 +                      still not able to affect the final state of a string if
 +                      there are quirks related to this string.  This command
 +                      is useful when one want to control the state of the
 +                      feature group strings to debug BIOS issues related to
 +                      the OSPM features.
 +                      Examples:
 +                        1. 'acpi_osi="Module Device" acpi_osi=!*' can make
 +                           '_OSI("Module Device")' FALSE.
 +                        2. 'acpi_osi=!* acpi_osi="Module Device"' can make
 +                           '_OSI("Module Device")' TRUE.
 +                        3. 'acpi_osi=! acpi_osi=!* acpi_osi="Windows 2000"' is
 +                           equivalent to
 +                           'acpi_osi=!* acpi_osi=! acpi_osi="Windows 2000"'
 +                           and
 +                           'acpi_osi=!* acpi_osi="Windows 2000" acpi_osi=!',
 +                           they all will make '_OSI("Windows 2000")' TRUE.
 +
        acpi_pm_good    [X86]
                        Override the pmtimer bug detection: force the kernel
                        to assume that this machine's pmtimer latches its value
                        Format: <io>,<irq>,<mode>
                        See header of drivers/net/hamradio/baycom_ser_hdx.c.
  
 +      blkdevparts=    Manual partition parsing of block device(s) for
 +                      embedded devices based on command line input.
 +                      See Documentation/block/cmdline-partition.txt
 +
        boot_delay=     Milliseconds to delay each printk during boot.
                        Values larger than 10 seconds (10000) are changed to
                        no delay (0).
  
        earlyprintk=    [X86,SH,BLACKFIN,ARM]
                        earlyprintk=vga
+                       earlyprintk=efi
                        earlyprintk=xen
                        earlyprintk=serial[,ttySn[,baudrate]]
                        earlyprintk=serial[,0x...[,baudrate]]
                        Append ",keep" to not disable it when the real console
                        takes over.
  
-                       Only vga or serial or usb debug port at a time.
+                       Only one of vga, efi, serial, or usb debug port can
+                       be used at a time.
  
                        Currently only ttyS0 and ttyS1 may be specified by
                        name.  Other I/O ports may be explicitly specified
                        Interaction with the standard serial driver is not
                        very good.
  
-                       The VGA output is eventually overwritten by the real
-                       console.
+                       The VGA and EFI output is eventually overwritten by
+                       the real console.
  
                        The xen output can only be used by Xen PV guests.
  
                        pages. In the event, a node is too small to have both
                        kernelcore and Movable pages, kernelcore pages will
                        take priority and other nodes will have a larger number
 -                      of kernelcore pages.  The Movable zone is used for the
 +                      of Movable pages.  The Movable zone is used for the
                        allocation of pages that may be reclaimed or moved
                        by the page migration subsystem.  This means that
                        HugeTLB pages may not be allocated from this zone.
                        will be sent.
                        The default is to send the implementation identification
                        information.
 +      
 +      nfs.recover_lost_locks =
 +                      [NFSv4] Attempt to recover locks that were lost due
 +                      to a lease timeout on the server. Please note that
 +                      doing this risks data corruption, since there are
 +                      no guarantees that the file will remain unchanged
 +                      after the locks are lost.
 +                      If you want to enable the kernel legacy behaviour of
 +                      attempting to recover these locks, then set this
 +                      parameter to '1'.
 +                      The default parameter value of '0' causes the kernel
 +                      not to attempt recovery of lost locks.
  
        nfsd.nfs4_disable_idmapping=
                        [NFSv4] When set to the default of '1', the NFSv4
        ramdisk_size=   [RAM] Sizes of RAM disks in kilobytes
                        See Documentation/blockdev/ramdisk.txt.
  
 -      rcu_nocbs=      [KNL,BOOT]
 +      rcu_nocbs=      [KNL]
                        In kernels built with CONFIG_RCU_NOCB_CPU=y, set
                        the specified list of CPUs to be no-callback CPUs.
                        Invocation of these CPUs' RCU callbacks will
                        real-time workloads.  It can also improve energy
                        efficiency for asymmetric multiprocessors.
  
 -      rcu_nocb_poll   [KNL,BOOT]
 +      rcu_nocb_poll   [KNL]
                        Rather than requiring that offloaded CPUs
                        (specified by rcu_nocbs= above) explicitly
                        awaken the corresponding "rcuoN" kthreads,
                        energy efficiency by requiring that the kthreads
                        periodically wake up to do the polling.
  
 -      rcutree.blimit= [KNL,BOOT]
 +      rcutree.blimit= [KNL]
                        Set maximum number of finished RCU callbacks to process
                        in one batch.
  
 -      rcutree.fanout_leaf=    [KNL,BOOT]
 +      rcutree.rcu_fanout_leaf= [KNL]
                        Increase the number of CPUs assigned to each
                        leaf rcu_node structure.  Useful for very large
                        systems.
  
 -      rcutree.jiffies_till_first_fqs= [KNL,BOOT]
 +      rcutree.jiffies_till_first_fqs= [KNL]
                        Set delay from grace-period initialization to
                        first attempt to force quiescent states.
                        Units are jiffies, minimum value is zero,
                        and maximum value is HZ.
  
 -      rcutree.jiffies_till_next_fqs= [KNL,BOOT]
 +      rcutree.jiffies_till_next_fqs= [KNL]
                        Set delay between subsequent attempts to force
                        quiescent states.  Units are jiffies, minimum
                        value is one, and maximum value is HZ.
  
 -      rcutree.qhimark=        [KNL,BOOT]
 +      rcutree.qhimark= [KNL]
                        Set threshold of queued
                        RCU callbacks over which batch limiting is disabled.
  
 -      rcutree.qlowmark=       [KNL,BOOT]
 +      rcutree.qlowmark= [KNL]
                        Set threshold of queued RCU callbacks below which
                        batch limiting is re-enabled.
  
 -      rcutree.rcu_cpu_stall_suppress= [KNL,BOOT]
 -                      Suppress RCU CPU stall warning messages.
 -
 -      rcutree.rcu_cpu_stall_timeout= [KNL,BOOT]
 -                      Set timeout for RCU CPU stall warning messages.
 -
 -      rcutree.rcu_idle_gp_delay=      [KNL,BOOT]
 +      rcutree.rcu_idle_gp_delay= [KNL]
                        Set wakeup interval for idle CPUs that have
                        RCU callbacks (RCU_FAST_NO_HZ=y).
  
 -      rcutree.rcu_idle_lazy_gp_delay= [KNL,BOOT]
 +      rcutree.rcu_idle_lazy_gp_delay= [KNL]
                        Set wakeup interval for idle CPUs that have
                        only "lazy" RCU callbacks (RCU_FAST_NO_HZ=y).
                        Lazy RCU callbacks are those which RCU can
                        prove do nothing more than free memory.
  
 -      rcutorture.fqs_duration= [KNL,BOOT]
 +      rcutorture.fqs_duration= [KNL]
                        Set duration of force_quiescent_state bursts.
  
 -      rcutorture.fqs_holdoff= [KNL,BOOT]
 +      rcutorture.fqs_holdoff= [KNL]
                        Set holdoff time within force_quiescent_state bursts.
  
 -      rcutorture.fqs_stutter= [KNL,BOOT]
 +      rcutorture.fqs_stutter= [KNL]
                        Set wait time between force_quiescent_state bursts.
  
 -      rcutorture.irqreader= [KNL,BOOT]
 -                      Test RCU readers from irq handlers.
 +      rcutorture.gp_exp= [KNL]
 +                      Use expedited update-side primitives.
 +
 +      rcutorture.gp_normal= [KNL]
 +                      Use normal (non-expedited) update-side primitives.
 +                      If both gp_exp and gp_normal are set, do both.
 +                      If neither gp_exp nor gp_normal are set, still
 +                      do both.
  
 -      rcutorture.n_barrier_cbs= [KNL,BOOT]
 +      rcutorture.n_barrier_cbs= [KNL]
                        Set callbacks/threads for rcu_barrier() testing.
  
 -      rcutorture.nfakewriters= [KNL,BOOT]
 +      rcutorture.nfakewriters= [KNL]
                        Set number of concurrent RCU writers.  These just
                        stress RCU, they don't participate in the actual
                        test, hence the "fake".
  
 -      rcutorture.nreaders= [KNL,BOOT]
 +      rcutorture.nreaders= [KNL]
                        Set number of RCU readers.
  
 -      rcutorture.onoff_holdoff= [KNL,BOOT]
 +      rcutorture.object_debug= [KNL]
 +                      Enable debug-object double-call_rcu() testing.
 +
 +      rcutorture.onoff_holdoff= [KNL]
                        Set time (s) after boot for CPU-hotplug testing.
  
 -      rcutorture.onoff_interval= [KNL,BOOT]
 +      rcutorture.onoff_interval= [KNL]
                        Set time (s) between CPU-hotplug operations, or
                        zero to disable CPU-hotplug testing.
  
 -      rcutorture.shuffle_interval= [KNL,BOOT]
 +      rcutorture.rcutorture_runnable= [BOOT]
 +                      Start rcutorture running at boot time.
 +
 +      rcutorture.shuffle_interval= [KNL]
                        Set task-shuffle interval (s).  Shuffling tasks
                        allows some CPUs to go into dyntick-idle mode
                        during the rcutorture test.
  
 -      rcutorture.shutdown_secs= [KNL,BOOT]
 +      rcutorture.shutdown_secs= [KNL]
                        Set time (s) after boot system shutdown.  This
                        is useful for hands-off automated testing.
  
 -      rcutorture.stall_cpu= [KNL,BOOT]
 +      rcutorture.stall_cpu= [KNL]
                        Duration of CPU stall (s) to test RCU CPU stall
                        warnings, zero to disable.
  
 -      rcutorture.stall_cpu_holdoff= [KNL,BOOT]
 +      rcutorture.stall_cpu_holdoff= [KNL]
                        Time to wait (s) after boot before inducing stall.
  
 -      rcutorture.stat_interval= [KNL,BOOT]
 +      rcutorture.stat_interval= [KNL]
                        Time (s) between statistics printk()s.
  
 -      rcutorture.stutter= [KNL,BOOT]
 +      rcutorture.stutter= [KNL]
                        Time (s) to stutter testing, for example, specifying
                        five seconds causes the test to run for five seconds,
                        wait for five seconds, and so on.  This tests RCU's
                        ability to transition abruptly to and from idle.
  
 -      rcutorture.test_boost= [KNL,BOOT]
 +      rcutorture.test_boost= [KNL]
                        Test RCU priority boosting?  0=no, 1=maybe, 2=yes.
                        "Maybe" means test if the RCU implementation
                        under test support RCU priority boosting.
  
 -      rcutorture.test_boost_duration= [KNL,BOOT]
 +      rcutorture.test_boost_duration= [KNL]
                        Duration (s) of each individual boost test.
  
 -      rcutorture.test_boost_interval= [KNL,BOOT]
 +      rcutorture.test_boost_interval= [KNL]
                        Interval (s) between each boost test.
  
 -      rcutorture.test_no_idle_hz= [KNL,BOOT]
 +      rcutorture.test_no_idle_hz= [KNL]
                        Test RCU's dyntick-idle handling.  See also the
                        rcutorture.shuffle_interval parameter.
  
 -      rcutorture.torture_type= [KNL,BOOT]
 +      rcutorture.torture_type= [KNL]
                        Specify the RCU implementation to test.
  
 -      rcutorture.verbose= [KNL,BOOT]
 +      rcutorture.verbose= [KNL]
                        Enable additional printk() statements.
  
 +      rcupdate.rcu_expedited= [KNL]
 +                      Use expedited grace-period primitives, for
 +                      example, synchronize_rcu_expedited() instead
 +                      of synchronize_rcu().  This reduces latency,
 +                      but can increase CPU utilization, degrade
 +                      real-time latency, and degrade energy efficiency.
 +
 +      rcupdate.rcu_cpu_stall_suppress= [KNL]
 +                      Suppress RCU CPU stall warning messages.
 +
 +      rcupdate.rcu_cpu_stall_timeout= [KNL]
 +                      Set timeout for RCU CPU stall warning messages.
 +
        rdinit=         [KNL]
                        Format: <full_path>
                        Run specified binary instead of /init from the ramdisk,
                                    them quite hard to use for exploits but
                                    might break your system.
  
 +      vt.color=       [VT] Default text color.
 +                      Format: 0xYX, X = foreground, Y = background.
 +                      Default: 0x07 = light gray on black.
 +
        vt.cur_default= [VT] Default cursor shape.
                        Format: 0xCCBBAA, where AA, BB, and CC are the same as
                        the parameters of the <Esc>[?A;B;Cc escape sequence;
                        overridden by individual drivers. 0 will hide
                        cursors, 1 will display them.
  
 +      vt.italic=      [VT] Default color for italic text; 0-15.
 +                      Default: 2 = green.
 +
 +      vt.underline=   [VT] Default color for underlined text; 0-15.
 +                      Default: 3 = cyan.
 +
        watchdog timers [HW,WDT] For information on watchdog timers,
                        see Documentation/watchdog/watchdog-parameters.txt
                        or other driver-specific files in the
                                the unplug protocol
                        never -- do not unplug even if version check succeeds
  
 +      xen_nopvspin    [X86,XEN]
 +                      Disables the ticketlock slowpath using Xen PV
 +                      optimizations.
 +
        xirc2ps_cs=     [NET,PCMCIA]
                        Format:
                        <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
diff --combined arch/x86/Kconfig
index e6dde05e7eb0859866c15fd4891e4d92cf78ae9e,ec65b51af95900a608f0429fda57603555fc21a1..dddba2663bbfe2e5f91e238a166b90ba32535034
@@@ -16,7 -16,6 +16,7 @@@ config X86_6
        def_bool y
        depends on 64BIT
        select X86_DEV_DMA_OPS
 +      select ARCH_USE_CMPXCHG_LOCKREF
  
  ### Arch settings
  config X86
@@@ -82,6 -81,8 +82,6 @@@
        select HAVE_USER_RETURN_NOTIFIER
        select ARCH_BINFMT_ELF_RANDOMIZE_PIE
        select HAVE_ARCH_JUMP_LABEL
 -      select HAVE_TEXT_POKE_SMP
 -      select HAVE_GENERIC_HARDIRQS
        select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
        select SPARSE_IRQ
        select GENERIC_FIND_FIRST_BIT
        select COMPAT_OLD_SIGACTION if IA32_EMULATION
        select RTC_LIB
        select HAVE_DEBUG_STACKOVERFLOW
 +      select HAVE_IRQ_EXIT_ON_IRQ_STACK if X86_64
  
  config INSTRUCTION_DECODER
        def_bool y
@@@ -482,12 -482,11 +482,12 @@@ config X86_INTEL_LPS
        bool "Intel Low Power Subsystem Support"
        depends on ACPI
        select COMMON_CLK
 +      select PINCTRL
        ---help---
          Select to build support for Intel Low Power Subsystem such as
          found on Intel Lynxpoint PCH. Selecting this option enables
 -        things like clock tree (common clock framework) which are needed
 -        by the LPSS peripheral drivers.
 +        things like clock tree (common clock framework) and pincontrol
 +        which are needed by the LPSS peripheral drivers.
  
  config X86_RDC321X
        bool "RDC R-321x SoC"
@@@ -633,7 -632,6 +633,7 @@@ config PARAVIRT_DEBU
  config PARAVIRT_SPINLOCKS
        bool "Paravirtualization layer for spinlocks"
        depends on PARAVIRT && SMP
 +      select UNINLINE_SPIN_UNLOCK
        ---help---
          Paravirtualized spinlocks allow a pvops backend to replace the
          spinlock implementation with something virtualization-friendly
@@@ -658,15 -656,6 +658,15 @@@ config KVM_GUES
          underlying device model, the host provides the guest with
          timing infrastructure such as time of day, and system time
  
 +config KVM_DEBUG_FS
 +      bool "Enable debug information for KVM Guests in debugfs"
 +      depends on KVM_GUEST && DEBUG_FS
 +      default n
 +      ---help---
 +        This option enables collection of various statistics for KVM guest.
 +        Statistics are displayed in debugfs filesystem. Enabling this option
 +        may incur significant overhead.
 +
  source "arch/x86/lguest/Kconfig"
  
  config PARAVIRT_TIME_ACCOUNTING
@@@ -826,16 -815,14 +826,16 @@@ config MAXSM
  config NR_CPUS
        int "Maximum number of CPUs" if SMP && !MAXSMP
        range 2 8 if SMP && X86_32 && !X86_BIGSMP
 -      range 2 512 if SMP && !MAXSMP
 +      range 2 512 if SMP && !MAXSMP && !CPUMASK_OFFSTACK
 +      range 2 8192 if SMP && !MAXSMP && CPUMASK_OFFSTACK && X86_64
        default "1" if !SMP
 -      default "4096" if MAXSMP
 +      default "8192" if MAXSMP
        default "32" if SMP && (X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000)
        default "8" if SMP
        ---help---
          This allows you to specify the maximum number of CPUs which this
 -        kernel will support.  The maximum supported value is 512 and the
 +        kernel will support.  If CPUMASK_OFFSTACK is enabled, the maximum
 +        supported value is 4096, otherwise the maximum value is 512.  The
          minimum value which makes sense is 2.
  
          This is purely to save memory - each supported CPU adds
@@@ -863,7 -850,7 +863,7 @@@ source "kernel/Kconfig.preempt
  
  config X86_UP_APIC
        bool "Local APIC support on uniprocessors"
 -      depends on X86_32 && !SMP && !X86_32_NON_STANDARD
 +      depends on X86_32 && !SMP && !X86_32_NON_STANDARD && !PCI_MSI
        ---help---
          A local APIC (Advanced Programmable Interrupt Controller) is an
          integrated interrupt controller in the CPU. If you have a single-CPU
@@@ -888,11 -875,11 +888,11 @@@ config X86_UP_IOAPI
  
  config X86_LOCAL_APIC
        def_bool y
 -      depends on X86_64 || SMP || X86_32_NON_STANDARD || X86_UP_APIC
 +      depends on X86_64 || SMP || X86_32_NON_STANDARD || X86_UP_APIC || PCI_MSI
  
  config X86_IO_APIC
        def_bool y
 -      depends on X86_64 || SMP || X86_32_NON_STANDARD || X86_UP_IOAPIC
 +      depends on X86_64 || SMP || X86_32_NON_STANDARD || X86_UP_IOAPIC || PCI_MSI
  
  config X86_VISWS_APIC
        def_bool y
@@@ -1036,7 -1023,6 +1036,7 @@@ config X86_REBOOTFIXUP
  
  config MICROCODE
        tristate "CPU microcode loading support"
 +      depends on CPU_SUP_AMD || CPU_SUP_INTEL
        select FW_LOADER
        ---help---
  
@@@ -1358,12 -1344,8 +1358,12 @@@ config ARCH_SELECT_MEMORY_MODE
        depends on ARCH_SPARSEMEM_ENABLE
  
  config ARCH_MEMORY_PROBE
 -      def_bool y
 +      bool "Enable sysfs memory/probe interface"
        depends on X86_64 && MEMORY_HOTPLUG
 +      help
 +        This option enables a sysfs memory/probe interface for testing.
 +        See Documentation/memory-hotplug.txt for more information.
 +        If you are unsure how to answer this question, answer N.
  
  config ARCH_PROC_KCORE_TEXT
        def_bool y
@@@ -1597,7 -1579,7 +1597,7 @@@ config EFI_STU
            This kernel feature allows a bzImage to be loaded directly
          by EFI firmware without the use of a bootloader.
  
-         See Documentation/x86/efi-stub.txt for more information.
+         See Documentation/efi-stub.txt for more information.
  
  config SECCOMP
        def_bool y
@@@ -1645,9 -1627,9 +1645,9 @@@ config KEXE
  
          It is an ongoing process to be certain the hardware in a machine
          is properly shutdown, so do not be surprised if this code does not
 -        initially work for you.  It may help to enable device hotplugging
 -        support.  As of this writing the exact hardware interface is
 -        strongly in flux, so no good recommendation can be made.
 +        initially work for you.  As of this writing the exact hardware
 +        interface is strongly in flux, so no good recommendation can be
 +        made.
  
  config CRASH_DUMP
        bool "kernel crash dumps"
@@@ -1734,10 -1716,9 +1734,10 @@@ config X86_NEED_RELOC
        depends on X86_32 && RELOCATABLE
  
  config PHYSICAL_ALIGN
 -      hex "Alignment value to which kernel should be aligned" if X86_32
 +      hex "Alignment value to which kernel should be aligned"
        default "0x1000000"
 -      range 0x2000 0x1000000
 +      range 0x2000 0x1000000 if X86_32
 +      range 0x200000 0x1000000 if X86_64
        ---help---
          This value puts the alignment restrictions on physical address
          where kernel is loaded and run from. Kernel is compiled for an
          end result is that kernel runs from a physical address meeting
          above alignment restrictions.
  
 +        On 32-bit this value must be a multiple of 0x2000. On 64-bit
 +        this value must be a multiple of 0x200000.
 +
          Don't change this unless you know what you are doing.
  
  config HOTPLUG_CPU
@@@ -2036,6 -2014,7 +2036,6 @@@ menu "Bus options (PCI etc.)
  config PCI
        bool "PCI support"
        default y
 -      select ARCH_SUPPORTS_MSI if (X86_LOCAL_APIC && X86_IO_APIC)
        ---help---
          Find out whether you have a PCI motherboard. PCI is the name of a
          bus system, i.e. the way the CPU talks to the other stuff inside
@@@ -2291,32 -2270,6 +2291,32 @@@ config RAPIDI
  
  source "drivers/rapidio/Kconfig"
  
 +config X86_SYSFB
 +      bool "Mark VGA/VBE/EFI FB as generic system framebuffer"
 +      help
 +        Firmwares often provide initial graphics framebuffers so the BIOS,
 +        bootloader or kernel can show basic video-output during boot for
 +        user-guidance and debugging. Historically, x86 used the VESA BIOS
 +        Extensions and EFI-framebuffers for this, which are mostly limited
 +        to x86.
 +        This option, if enabled, marks VGA/VBE/EFI framebuffers as generic
 +        framebuffers so the new generic system-framebuffer drivers can be
 +        used on x86. If the framebuffer is not compatible with the generic
 +        modes, it is adverticed as fallback platform framebuffer so legacy
 +        drivers like efifb, vesafb and uvesafb can pick it up.
 +        If this option is not selected, all system framebuffers are always
 +        marked as fallback platform framebuffers as usual.
 +
 +        Note: Legacy fbdev drivers, including vesafb, efifb, uvesafb, will
 +        not be able to pick up generic system framebuffers if this option
 +        is selected. You are highly encouraged to enable simplefb as
 +        replacement if you select this option. simplefb can correctly deal
 +        with generic system framebuffers. But you should still keep vesafb
 +        and others enabled as fallback if a system framebuffer is
 +        incompatible with simplefb.
 +
 +        If unsure, say Y.
 +
  endmenu
  
  
@@@ -2379,6 -2332,10 +2379,6 @@@ config HAVE_ATOMIC_IOMA
        def_bool y
        depends on X86_32
  
 -config HAVE_TEXT_POKE_SMP
 -      bool
 -      select STOP_MACHINE if SMP
 -
  config X86_DEV_DMA_OPS
        bool
        depends on X86_64 || STA2X11
index c7e22ab29a5a2eb6ce3dd75f0fd3e0b26be2d61b,1d3372ac9c660305466d09973114da0b5c194836..92c02344a060f2dacc7997185d6fd6bc04ed225e
  
  static efi_char16_t efi_dummy_name[6] = { 'D', 'U', 'M', 'M', 'Y', 0 };
  
- struct efi __read_mostly efi = {
-       .mps        = EFI_INVALID_TABLE_ADDR,
-       .acpi       = EFI_INVALID_TABLE_ADDR,
-       .acpi20     = EFI_INVALID_TABLE_ADDR,
-       .smbios     = EFI_INVALID_TABLE_ADDR,
-       .sal_systab = EFI_INVALID_TABLE_ADDR,
-       .boot_info  = EFI_INVALID_TABLE_ADDR,
-       .hcdp       = EFI_INVALID_TABLE_ADDR,
-       .uga        = EFI_INVALID_TABLE_ADDR,
-       .uv_systab  = EFI_INVALID_TABLE_ADDR,
- };
- EXPORT_SYMBOL(efi);
  struct efi_memory_map memmap;
  
  static struct efi efi_phys __initdata;
@@@ -80,6 -67,13 +67,13 @@@ static efi_system_table_t efi_systab __
  
  unsigned long x86_efi_facility;
  
+ static __initdata efi_config_table_type_t arch_tables[] = {
+ #ifdef CONFIG_X86_UV
+       {UV_SYSTEM_TABLE_GUID, "UVsystab", &efi.uv_systab},
+ #endif
+       {NULL_GUID, NULL, NULL},
+ };
  /*
   * Returns 1 if 'facility' is enabled, 0 otherwise.
   */
@@@ -399,6 -393,8 +393,8 @@@ int __init efi_memblock_x86_reserve_ran
  
        memblock_reserve(pmap, memmap.nr_map * memmap.desc_size);
  
+       efi.memmap = &memmap;
        return 0;
  }
  
@@@ -578,80 -574,6 +574,6 @@@ static int __init efi_systab_init(void 
        return 0;
  }
  
- static int __init efi_config_init(u64 tables, int nr_tables)
- {
-       void *config_tables, *tablep;
-       int i, sz;
-       if (efi_enabled(EFI_64BIT))
-               sz = sizeof(efi_config_table_64_t);
-       else
-               sz = sizeof(efi_config_table_32_t);
-       /*
-        * Let's see what config tables the firmware passed to us.
-        */
-       config_tables = early_ioremap(tables, nr_tables * sz);
-       if (config_tables == NULL) {
-               pr_err("Could not map Configuration table!\n");
-               return -ENOMEM;
-       }
-       tablep = config_tables;
-       pr_info("");
-       for (i = 0; i < efi.systab->nr_tables; i++) {
-               efi_guid_t guid;
-               unsigned long table;
-               if (efi_enabled(EFI_64BIT)) {
-                       u64 table64;
-                       guid = ((efi_config_table_64_t *)tablep)->guid;
-                       table64 = ((efi_config_table_64_t *)tablep)->table;
-                       table = table64;
- #ifdef CONFIG_X86_32
-                       if (table64 >> 32) {
-                               pr_cont("\n");
-                               pr_err("Table located above 4GB, disabling EFI.\n");
-                               early_iounmap(config_tables,
-                                             efi.systab->nr_tables * sz);
-                               return -EINVAL;
-                       }
- #endif
-               } else {
-                       guid = ((efi_config_table_32_t *)tablep)->guid;
-                       table = ((efi_config_table_32_t *)tablep)->table;
-               }
-               if (!efi_guidcmp(guid, MPS_TABLE_GUID)) {
-                       efi.mps = table;
-                       pr_cont(" MPS=0x%lx ", table);
-               } else if (!efi_guidcmp(guid, ACPI_20_TABLE_GUID)) {
-                       efi.acpi20 = table;
-                       pr_cont(" ACPI 2.0=0x%lx ", table);
-               } else if (!efi_guidcmp(guid, ACPI_TABLE_GUID)) {
-                       efi.acpi = table;
-                       pr_cont(" ACPI=0x%lx ", table);
-               } else if (!efi_guidcmp(guid, SMBIOS_TABLE_GUID)) {
-                       efi.smbios = table;
-                       pr_cont(" SMBIOS=0x%lx ", table);
- #ifdef CONFIG_X86_UV
-               } else if (!efi_guidcmp(guid, UV_SYSTEM_TABLE_GUID)) {
-                       efi.uv_systab = table;
-                       pr_cont(" UVsystab=0x%lx ", table);
- #endif
-               } else if (!efi_guidcmp(guid, HCDP_TABLE_GUID)) {
-                       efi.hcdp = table;
-                       pr_cont(" HCDP=0x%lx ", table);
-               } else if (!efi_guidcmp(guid, UGA_IO_PROTOCOL_GUID)) {
-                       efi.uga = table;
-                       pr_cont(" UGA=0x%lx ", table);
-               }
-               tablep += sz;
-       }
-       pr_cont("\n");
-       early_iounmap(config_tables, efi.systab->nr_tables * sz);
-       return 0;
- }
  static int __init efi_runtime_init(void)
  {
        efi_runtime_services_t *runtime;
@@@ -745,7 -667,7 +667,7 @@@ void __init efi_init(void
                efi.systab->hdr.revision >> 16,
                efi.systab->hdr.revision & 0xffff, vendor);
  
-       if (efi_config_init(efi.systab->tables, efi.systab->nr_tables))
+       if (efi_config_init(arch_tables))
                return;
  
        set_bit(EFI_CONFIG_TABLES, &x86_efi_facility);
@@@ -816,34 -738,6 +738,6 @@@ static void __init runtime_code_page_mk
        }
  }
  
- /*
-  * We can't ioremap data in EFI boot services RAM, because we've already mapped
-  * it as RAM.  So, look it up in the existing EFI memory map instead.  Only
-  * callable after efi_enter_virtual_mode and before efi_free_boot_services.
-  */
- void __iomem *efi_lookup_mapped_addr(u64 phys_addr)
- {
-       void *p;
-       if (WARN_ON(!memmap.map))
-               return NULL;
-       for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) {
-               efi_memory_desc_t *md = p;
-               u64 size = md->num_pages << EFI_PAGE_SHIFT;
-               u64 end = md->phys_addr + size;
-               if (!(md->attribute & EFI_MEMORY_RUNTIME) &&
-                   md->type != EFI_BOOT_SERVICES_CODE &&
-                   md->type != EFI_BOOT_SERVICES_DATA)
-                       continue;
-               if (!md->virt_addr)
-                       continue;
-               if (phys_addr >= md->phys_addr && phys_addr < end) {
-                       phys_addr += md->virt_addr - md->phys_addr;
-                       return (__force void __iomem *)(unsigned long)phys_addr;
-               }
-       }
-       return NULL;
- }
  void efi_memory_uc(u64 addr, unsigned long size)
  {
        unsigned long page_shift = 1UL << EFI_PAGE_SHIFT;
@@@ -912,13 -806,10 +806,13 @@@ void __init efi_enter_virtual_mode(void
  
        for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) {
                md = p;
 -              if (!(md->attribute & EFI_MEMORY_RUNTIME) &&
 -                  md->type != EFI_BOOT_SERVICES_CODE &&
 -                  md->type != EFI_BOOT_SERVICES_DATA)
 -                      continue;
 +              if (!(md->attribute & EFI_MEMORY_RUNTIME)) {
 +#ifdef CONFIG_X86_64
 +                      if (md->type != EFI_BOOT_SERVICES_CODE &&
 +                          md->type != EFI_BOOT_SERVICES_DATA)
 +#endif
 +                              continue;
 +              }
  
                size = md->num_pages << EFI_PAGE_SHIFT;
                end = md->phys_addr + size;