]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
Merge branch 'linus' into x86/urgent
authorIngo Molnar <mingo@elte.hu>
Mon, 20 Apr 2009 16:08:07 +0000 (18:08 +0200)
committerIngo Molnar <mingo@elte.hu>
Mon, 20 Apr 2009 16:08:12 +0000 (18:08 +0200)
Merge reason: We need the x86/uv updates from upstream, to queue up
              dependent fix.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
1  2 
Documentation/kernel-parameters.txt
arch/x86/kernel/apic/x2apic_uv_x.c

index 9e4fe724c87ca27245df9823ca8c413d84781991,600cdd72900c868a311e4d642b425612cd9202e1..90b3924071b6c35f69ece1feba26ae9f92c5ab37
@@@ -231,6 -231,35 +231,35 @@@ and is between 256 and 4096 characters
                        power state again in power transition.
                        1 : disable the power state check
  
+       acpi_sci=       [HW,ACPI] ACPI System Control Interrupt trigger mode
+                       Format: { level | edge | high | low }
+       acpi_serialize  [HW,ACPI] force serialization of AML methods
+       acpi_skip_timer_override [HW,ACPI]
+                       Recognize and ignore IRQ0/pin2 Interrupt Override.
+                       For broken nForce2 BIOS resulting in XT-PIC timer.
+       acpi_sleep=     [HW,ACPI] Sleep options
+                       Format: { s3_bios, s3_mode, s3_beep, s4_nohwsig,
+                                 old_ordering, s4_nonvs }
+                       See Documentation/power/video.txt for information on
+                       s3_bios and s3_mode.
+                       s3_beep is for debugging; it makes the PC's speaker beep
+                       as soon as the kernel's real-mode entry point is called.
+                       s4_nohwsig prevents ACPI hardware signature from being
+                       used during resume from hibernation.
+                       old_ordering causes the ACPI 1.0 ordering of the _PTS
+                       control method, with respect to putting devices into
+                       low power states, to be enforced (the ACPI 2.0 ordering
+                       of _PTS is used by default).
+                       s4_nonvs prevents the kernel from saving/restoring the
+                       ACPI NVS memory during hibernation.
+       acpi_use_timer_override [HW,ACPI]
+                       Use timer override. For some broken Nvidia NF5 boards
+                       that require a timer override, but don't have HPET
        acpi_enforce_resources= [ACPI]
                        { strict | lax | no }
                        Check for resource conflicts between native drivers
        ad1848=         [HW,OSS]
                        Format: <io>,<irq>,<dma>,<dma2>,<type>
  
+       add_efi_memmap  [EFI; X86] Include EFI memory map in
+                       kernel's map of available physical RAM.
        advansys=       [HW,SCSI]
                        See header of drivers/scsi/advansys.c.
  
  
        nowb            [ARM]
  
 +      nox2apic        [X86-64,APIC] Do not enable x2APIC mode.
 +
        nptcg=          [IA64] Override max number of concurrent global TLB
                        purges which is reported from either PAL_VM_SUMMARY or
                        SAL PALO.
                        autoconfiguration.
                        Ranges are in pairs (memory base and size).
  
+       ports=          [IP_VS_FTP] IPVS ftp helper module
+                       Default is 21.
+                       Up to 8 (IP_VS_APP_MAX_PORTS) ports
+                       may be specified.
+                       Format: <port>,<port>....
        print-fatal-signals=
                        [KNL] debug: print fatal signals
                        print-fatal-signals=1: print segfault info to
index 49d2f5c739b721b290e94f7d7c94da2f90004c36,de1a50af807b8b72c85a45e62422b5142c6d8899..d6712334ce4bb795b2e29632c8ab547fb6ea5de8
@@@ -19,7 -19,6 +19,7 @@@
  #include <linux/timer.h>
  #include <linux/cpu.h>
  #include <linux/init.h>
 +#include <linux/io.h>
  
  #include <asm/uv/uv_mmrs.h>
  #include <asm/uv/uv_hub.h>
@@@ -35,17 -34,6 +35,17 @@@ DEFINE_PER_CPU(int, x2apic_extra_bits)
  
  static enum uv_system_type uv_system_type;
  
 +static int early_get_nodeid(void)
 +{
 +      union uvh_node_id_u node_id;
 +      unsigned long *mmr;
 +
 +      mmr = early_ioremap(UV_LOCAL_MMR_BASE | UVH_NODE_ID, sizeof(*mmr));
 +      node_id.v = *mmr;
 +      early_iounmap(mmr, sizeof(*mmr));
 +      return node_id.s.node_id;
 +}
 +
  static int uv_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
  {
        if (!strcmp(oem_id, "SGI")) {
@@@ -54,8 -42,6 +54,8 @@@
                else if (!strcmp(oem_table_id, "UVX"))
                        uv_system_type = UV_X2APIC;
                else if (!strcmp(oem_table_id, "UVH")) {
 +                      __get_cpu_var(x2apic_extra_bits) =
 +                              early_get_nodeid() << (UV_APIC_PNODE_SHIFT - 1);
                        uv_system_type = UV_NON_UNIQUE_APIC;
                        return 1;
                }
@@@ -563,7 -549,8 +563,8 @@@ void __init uv_system_init(void
        unsigned long gnode_upper, lowmem_redir_base, lowmem_redir_size;
        int bytes, nid, cpu, lcpu, pnode, blade, i, j, m_val, n_val;
        int max_pnode = 0;
-       unsigned long mmr_base, present;
+       unsigned long mmr_base, present, paddr;
+       unsigned short pnode_mask;
  
        map_low_mmrs();
  
                }
        }
  
+       pnode_mask = (1 << n_val) - 1;
        node_id.v = uv_read_local_mmr(UVH_NODE_ID);
        gnode_upper = (((unsigned long)node_id.s.node_id) &
                       ~((1 << n_val) - 1)) << m_val;
                uv_cpu_hub_info(cpu)->numa_blade_id = blade;
                uv_cpu_hub_info(cpu)->blade_processor_id = lcpu;
                uv_cpu_hub_info(cpu)->pnode = pnode;
-               uv_cpu_hub_info(cpu)->pnode_mask = (1 << n_val) - 1;
+               uv_cpu_hub_info(cpu)->pnode_mask = pnode_mask;
                uv_cpu_hub_info(cpu)->gpa_mask = (1 << (m_val + n_val)) - 1;
                uv_cpu_hub_info(cpu)->gnode_upper = gnode_upper;
                uv_cpu_hub_info(cpu)->global_mmr_base = mmr_base;
                        lcpu, blade);
        }
  
+       /* Add blade/pnode info for nodes without cpus */
+       for_each_online_node(nid) {
+               if (uv_node_to_blade[nid] >= 0)
+                       continue;
+               paddr = node_start_pfn(nid) << PAGE_SHIFT;
+               pnode = (paddr >> m_val) & pnode_mask;
+               blade = boot_pnode_to_blade(pnode);
+               uv_node_to_blade[nid] = blade;
+       }
        map_gru_high(max_pnode);
        map_mmr_high(max_pnode);
        map_config_high(max_pnode);