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-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

* 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86, efi: Calling __pa() with an ioremap()ed address is invalid
x86, hpet: Immediately disable HPET timer 1 if rtc irq is masked
x86/intel_mid: Kconfig select fix
x86/intel_mid: Fix the Kconfig for MID selection

+68 -44
+6 -2
arch/x86/Kconfig
··· 390 390 This option compiles in support for the CE4100 SOC for settop 391 391 boxes and media devices. 392 392 393 - config X86_INTEL_MID 393 + config X86_WANT_INTEL_MID 394 394 bool "Intel MID platform support" 395 395 depends on X86_32 396 396 depends on X86_EXTENDED_PLATFORM ··· 399 399 systems which do not have the PCI legacy interfaces (Moorestown, 400 400 Medfield). If you are building for a PC class system say N here. 401 401 402 - if X86_INTEL_MID 402 + if X86_WANT_INTEL_MID 403 + 404 + config X86_INTEL_MID 405 + bool 403 406 404 407 config X86_MRST 405 408 bool "Moorestown MID platform" ··· 414 411 select SPI 415 412 select INTEL_SCU_IPC 416 413 select X86_PLATFORM_DEVICES 414 + select X86_INTEL_MID 417 415 ---help--- 418 416 Moorestown is Intel's Low Power Intel Architecture (LPIA) based Moblin 419 417 Internet Device(MID) platform. Moorestown consists of two chips:
+8
arch/x86/include/asm/e820.h
··· 53 53 */ 54 54 #define E820_RESERVED_KERN 128 55 55 56 + /* 57 + * Address ranges that need to be mapped by the kernel direct 58 + * mapping. This is used to make sure regions such as 59 + * EFI_RUNTIME_SERVICES_DATA are directly mapped. See setup_arch(). 60 + */ 61 + #define E820_RESERVED_EFI 129 62 + 56 63 #ifndef __ASSEMBLY__ 57 64 #include <linux/types.h> 58 65 struct e820entry { ··· 122 115 } 123 116 #endif 124 117 118 + extern unsigned long e820_end_pfn(unsigned long limit_pfn, unsigned type); 125 119 extern unsigned long e820_end_of_ram_pfn(void); 126 120 extern unsigned long e820_end_of_low_ram_pfn(void); 127 121 extern u64 early_reserve_e820(u64 startt, u64 sizet, u64 align);
-5
arch/x86/include/asm/efi.h
··· 33 33 #define efi_call_virt6(f, a1, a2, a3, a4, a5, a6) \ 34 34 efi_call_virt(f, a1, a2, a3, a4, a5, a6) 35 35 36 - #define efi_ioremap(addr, size, type) ioremap_cache(addr, size) 37 - 38 36 #else /* !CONFIG_X86_32 */ 39 37 40 38 extern u64 efi_call0(void *fp); ··· 81 83 #define efi_call_virt6(f, a1, a2, a3, a4, a5, a6) \ 82 84 efi_call6((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2), \ 83 85 (u64)(a3), (u64)(a4), (u64)(a5), (u64)(a6)) 84 - 85 - extern void __iomem *efi_ioremap(unsigned long addr, unsigned long size, 86 - u32 type); 87 86 88 87 #endif /* CONFIG_X86_32 */ 89 88
+2 -1
arch/x86/kernel/e820.c
··· 135 135 printk(KERN_CONT "(usable)"); 136 136 break; 137 137 case E820_RESERVED: 138 + case E820_RESERVED_EFI: 138 139 printk(KERN_CONT "(reserved)"); 139 140 break; 140 141 case E820_ACPI: ··· 784 783 /* 785 784 * Find the highest page frame number we have available 786 785 */ 787 - static unsigned long __init e820_end_pfn(unsigned long limit_pfn, unsigned type) 786 + unsigned long __init e820_end_pfn(unsigned long limit_pfn, unsigned type) 788 787 { 789 788 int i; 790 789 unsigned long last_pfn = 0;
+14 -7
arch/x86/kernel/hpet.c
··· 1049 1049 } 1050 1050 EXPORT_SYMBOL_GPL(hpet_rtc_timer_init); 1051 1051 1052 + static void hpet_disable_rtc_channel(void) 1053 + { 1054 + unsigned long cfg; 1055 + cfg = hpet_readl(HPET_T1_CFG); 1056 + cfg &= ~HPET_TN_ENABLE; 1057 + hpet_writel(cfg, HPET_T1_CFG); 1058 + } 1059 + 1052 1060 /* 1053 1061 * The functions below are called from rtc driver. 1054 1062 * Return 0 if HPET is not being used. ··· 1068 1060 return 0; 1069 1061 1070 1062 hpet_rtc_flags &= ~bit_mask; 1063 + if (unlikely(!hpet_rtc_flags)) 1064 + hpet_disable_rtc_channel(); 1065 + 1071 1066 return 1; 1072 1067 } 1073 1068 EXPORT_SYMBOL_GPL(hpet_mask_rtc_irq_bit); ··· 1136 1125 1137 1126 static void hpet_rtc_timer_reinit(void) 1138 1127 { 1139 - unsigned int cfg, delta; 1128 + unsigned int delta; 1140 1129 int lost_ints = -1; 1141 1130 1142 - if (unlikely(!hpet_rtc_flags)) { 1143 - cfg = hpet_readl(HPET_T1_CFG); 1144 - cfg &= ~HPET_TN_ENABLE; 1145 - hpet_writel(cfg, HPET_T1_CFG); 1146 - return; 1147 - } 1131 + if (unlikely(!hpet_rtc_flags)) 1132 + hpet_disable_rtc_channel(); 1148 1133 1149 1134 if (!(hpet_rtc_flags & RTC_PIE) || hpet_pie_limit) 1150 1135 delta = hpet_default_delta;
+20 -1
arch/x86/kernel/setup.c
··· 691 691 692 692 void __init setup_arch(char **cmdline_p) 693 693 { 694 + unsigned long end_pfn; 695 + 694 696 #ifdef CONFIG_X86_32 695 697 memcpy(&boot_cpu_data, &new_cpu_data, sizeof(new_cpu_data)); 696 698 visws_early_detect(); ··· 934 932 init_gbpages(); 935 933 936 934 /* max_pfn_mapped is updated here */ 937 - max_low_pfn_mapped = init_memory_mapping(0, max_low_pfn<<PAGE_SHIFT); 935 + end_pfn = max_low_pfn; 936 + 937 + #ifdef CONFIG_X86_64 938 + /* 939 + * There may be regions after the last E820_RAM region that we 940 + * want to include in the kernel direct mapping, such as 941 + * EFI_RUNTIME_SERVICES_DATA. 942 + */ 943 + if (efi_enabled) { 944 + unsigned long efi_end; 945 + 946 + efi_end = e820_end_pfn(MAXMEM>>PAGE_SHIFT, E820_RESERVED_EFI); 947 + if (efi_end > max_low_pfn) 948 + end_pfn = efi_end; 949 + } 950 + #endif 951 + 952 + max_low_pfn_mapped = init_memory_mapping(0, end_pfn << PAGE_SHIFT); 938 953 max_pfn_mapped = max_low_pfn_mapped; 939 954 940 955 #ifdef CONFIG_X86_64
+18 -11
arch/x86/platform/efi/efi.c
··· 323 323 case EFI_UNUSABLE_MEMORY: 324 324 e820_type = E820_UNUSABLE; 325 325 break; 326 + case EFI_RUNTIME_SERVICES_DATA: 327 + e820_type = E820_RESERVED_EFI; 328 + break; 326 329 default: 327 330 /* 328 331 * EFI_RESERVED_TYPE EFI_RUNTIME_SERVICES_CODE 329 - * EFI_RUNTIME_SERVICES_DATA EFI_MEMORY_MAPPED_IO 332 + * EFI_MEMORY_MAPPED_IO 330 333 * EFI_MEMORY_MAPPED_IO_PORT_SPACE EFI_PAL_CODE 331 334 */ 332 335 e820_type = E820_RESERVED; ··· 674 671 end_pfn = PFN_UP(end); 675 672 if (end_pfn <= max_low_pfn_mapped 676 673 || (end_pfn > (1UL << (32 - PAGE_SHIFT)) 677 - && end_pfn <= max_pfn_mapped)) 674 + && end_pfn <= max_pfn_mapped)) { 678 675 va = __va(md->phys_addr); 679 - else 680 - va = efi_ioremap(md->phys_addr, size, md->type); 676 + 677 + if (!(md->attribute & EFI_MEMORY_WB)) { 678 + addr = (u64) (unsigned long)va; 679 + npages = md->num_pages; 680 + memrange_efi_to_native(&addr, &npages); 681 + set_memory_uc(addr, npages); 682 + } 683 + } else { 684 + if (!(md->attribute & EFI_MEMORY_WB)) 685 + va = ioremap_nocache(md->phys_addr, size); 686 + else 687 + va = ioremap_cache(md->phys_addr, size); 688 + } 681 689 682 690 md->virt_addr = (u64) (unsigned long) va; 683 691 ··· 696 682 printk(KERN_ERR PFX "ioremap of 0x%llX failed!\n", 697 683 (unsigned long long)md->phys_addr); 698 684 continue; 699 - } 700 - 701 - if (!(md->attribute & EFI_MEMORY_WB)) { 702 - addr = md->virt_addr; 703 - npages = md->num_pages; 704 - memrange_efi_to_native(&addr, &npages); 705 - set_memory_uc(addr, npages); 706 685 } 707 686 708 687 systab = (u64) (unsigned long) efi_phys.systab;
-17
arch/x86/platform/efi/efi_64.c
··· 80 80 local_irq_restore(efi_flags); 81 81 early_code_mapping_set_exec(0); 82 82 } 83 - 84 - void __iomem *__init efi_ioremap(unsigned long phys_addr, unsigned long size, 85 - u32 type) 86 - { 87 - unsigned long last_map_pfn; 88 - 89 - if (type == EFI_MEMORY_MAPPED_IO) 90 - return ioremap(phys_addr, size); 91 - 92 - last_map_pfn = init_memory_mapping(phys_addr, phys_addr + size); 93 - if ((last_map_pfn << PAGE_SHIFT) < phys_addr + size) { 94 - unsigned long top = last_map_pfn << PAGE_SHIFT; 95 - efi_ioremap(top, size - (top - phys_addr), type); 96 - } 97 - 98 - return (void __iomem *)__va(phys_addr); 99 - }