Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

* 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
x86: MCE: make cmci_discover_lock irq-safe
x86: xen, i386: reserve Xen pagetables
x86, kexec: fix crashdump panic with CONFIG_KEXEC_JUMP
x86-64: finish cleanup_highmaps()'s job wrt. _brk_end
x86: fix boot hang in early_reserve_e820()
x86: Fix a typo in a printk message
x86, srat: do not register nodes beyond e820 map

+40 -15
+6 -4
arch/x86/kernel/cpu/mcheck/mce_intel_64.c
··· 151 151 static void cmci_discover(int banks, int boot) 152 152 { 153 153 unsigned long *owned = (void *)&__get_cpu_var(mce_banks_owned); 154 + unsigned long flags; 154 155 int hdr = 0; 155 156 int i; 156 157 157 - spin_lock(&cmci_discover_lock); 158 + spin_lock_irqsave(&cmci_discover_lock, flags); 158 159 for (i = 0; i < banks; i++) { 159 160 u64 val; 160 161 ··· 185 184 WARN_ON(!test_bit(i, __get_cpu_var(mce_poll_banks))); 186 185 } 187 186 } 188 - spin_unlock(&cmci_discover_lock); 187 + spin_unlock_irqrestore(&cmci_discover_lock, flags); 189 188 if (hdr) 190 189 printk(KERN_CONT "\n"); 191 190 } ··· 212 211 */ 213 212 void cmci_clear(void) 214 213 { 214 + unsigned long flags; 215 215 int i; 216 216 int banks; 217 217 u64 val; 218 218 219 219 if (!cmci_supported(&banks)) 220 220 return; 221 - spin_lock(&cmci_discover_lock); 221 + spin_lock_irqsave(&cmci_discover_lock, flags); 222 222 for (i = 0; i < banks; i++) { 223 223 if (!test_bit(i, __get_cpu_var(mce_banks_owned))) 224 224 continue; ··· 229 227 wrmsrl(MSR_IA32_MC0_CTL2 + i, val); 230 228 __clear_bit(i, __get_cpu_var(mce_banks_owned)); 231 229 } 232 - spin_unlock(&cmci_discover_lock); 230 + spin_unlock_irqrestore(&cmci_discover_lock, flags); 233 231 } 234 232 235 233 /*
+6 -5
arch/x86/kernel/e820.c
··· 1074 1074 u64 addr; 1075 1075 u64 start; 1076 1076 1077 - start = startt; 1078 - while (size < sizet && (start + 1)) 1077 + for (start = startt; ; start += size) { 1079 1078 start = find_e820_area_size(start, &size, align); 1080 - 1081 - if (size < sizet) 1082 - return 0; 1079 + if (!(start + 1)) 1080 + return 0; 1081 + if (size >= sizet) 1082 + break; 1083 + } 1083 1084 1084 1085 #ifdef CONFIG_X86_32 1085 1086 if (start >= MAXMEM)
+2 -2
arch/x86/kernel/machine_kexec_32.c
··· 194 194 unsigned int preserve_context); 195 195 196 196 #ifdef CONFIG_KEXEC_JUMP 197 - if (kexec_image->preserve_context) 197 + if (image->preserve_context) 198 198 save_processor_state(); 199 199 #endif 200 200 ··· 253 253 image->preserve_context); 254 254 255 255 #ifdef CONFIG_KEXEC_JUMP 256 - if (kexec_image->preserve_context) 256 + if (image->preserve_context) 257 257 restore_processor_state(); 258 258 #endif 259 259
+2 -2
arch/x86/kernel/machine_kexec_64.c
··· 274 274 int save_ftrace_enabled; 275 275 276 276 #ifdef CONFIG_KEXEC_JUMP 277 - if (kexec_image->preserve_context) 277 + if (image->preserve_context) 278 278 save_processor_state(); 279 279 #endif 280 280 ··· 333 333 image->preserve_context); 334 334 335 335 #ifdef CONFIG_KEXEC_JUMP 336 - if (kexec_image->preserve_context) 336 + if (image->preserve_context) 337 337 restore_processor_state(); 338 338 #endif 339 339
+17 -1
arch/x86/mm/init.c
··· 7 7 #include <asm/page.h> 8 8 #include <asm/page_types.h> 9 9 #include <asm/sections.h> 10 + #include <asm/setup.h> 10 11 #include <asm/system.h> 11 12 #include <asm/tlbflush.h> 12 13 ··· 305 304 #endif 306 305 307 306 #ifdef CONFIG_X86_64 308 - if (!after_bootmem) 307 + if (!after_bootmem && !start) { 308 + pud_t *pud; 309 + pmd_t *pmd; 310 + 309 311 mmu_cr4_features = read_cr4(); 312 + 313 + /* 314 + * _brk_end cannot change anymore, but it and _end may be 315 + * located on different 2M pages. cleanup_highmap(), however, 316 + * can only consider _end when it runs, so destroy any 317 + * mappings beyond _brk_end here. 318 + */ 319 + pud = pud_offset(pgd_offset_k(_brk_end), _brk_end); 320 + pmd = pmd_offset(pud, _brk_end - 1); 321 + while (++pmd <= pmd_offset(pud, (unsigned long)_end - 1)) 322 + pmd_clear(pmd); 323 + } 310 324 #endif 311 325 __flush_tlb_all(); 312 326
+1 -1
arch/x86/mm/srat_32.c
··· 216 216 217 217 if (num_memory_chunks == 0) { 218 218 printk(KERN_WARNING 219 - "could not finy any ACPI SRAT memory areas.\n"); 219 + "could not find any ACPI SRAT memory areas.\n"); 220 220 goto out_fail; 221 221 } 222 222
+1
arch/x86/mm/srat_64.c
··· 361 361 { 362 362 int i; 363 363 node_clear(node, nodes_parsed); 364 + node_clear(node, cpu_nodes_parsed); 364 365 for (i = 0; i < MAX_LOCAL_APIC; i++) { 365 366 if (apicid_to_node[i] == node) 366 367 apicid_to_node[i] = NUMA_NO_NODE;
+5
arch/x86/xen/mmu.c
··· 1794 1794 1795 1795 pin_pagetable_pfn(MMUEXT_PIN_L3_TABLE, PFN_DOWN(__pa(swapper_pg_dir))); 1796 1796 1797 + reserve_early(__pa(xen_start_info->pt_base), 1798 + __pa(xen_start_info->pt_base + 1799 + xen_start_info->nr_pt_frames * PAGE_SIZE), 1800 + "XEN PAGETABLES"); 1801 + 1797 1802 return swapper_pg_dir; 1798 1803 } 1799 1804 #endif /* CONFIG_X86_64 */