Skip to content

Commit

Permalink
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel…
Browse files Browse the repository at this point in the history
…/git/x86/linux-2.6-x86-fixes3

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86-fixes3: (21 commits)
  x86: numaq fix
  x86: 8K stacks by default
  x86: ioremap ram check fix
  x86: fix HT cpu booting on 32-bit
  x86: optimize inlining off
  x86: CONFIG_X86_ELAN fix
  x86: Kconfig fix
  x86 PAT: fix performance drop for glx, use UC minus for ioremap(), ioremap_nocache() and pci_mmap_page_range()
  x86: use defconfigs from x86/configs/*
  toshiba: use ioremap_cached
  revert: "x86: ioremap(), extend check to all RAM pages"
  x86: don't bother printing compat vdso address
  fix: x86: support for new UV apic
  x86: fix early-BUG message
  x86: iommu_sac_force can become static
  x86: add proper header for reboot_force
  x86 VISWS: build fix
  x86, voyager: fix ioremap_nocache()
  hpet: fix
  x86: unexport kmap_atomic_to_page
  ...
  • Loading branch information
torvalds committed May 1, 2008
2 parents 6de3d58 + 895d309 commit 958a2f2
Show file tree
Hide file tree
Showing 20 changed files with 82 additions and 51 deletions.
16 changes: 14 additions & 2 deletions arch/x86/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,18 @@ config X86
select HAVE_KVM if ((X86_32 && !X86_VOYAGER && !X86_VISWS && !X86_NUMAQ) || X86_64)
select HAVE_ARCH_KGDB if !X86_VOYAGER

config DEFCONFIG_LIST
string
depends on X86_32
option defconfig_list
default "arch/x86/configs/i386_defconfig"

config DEFCONFIG_LIST
string
depends on X86_64
option defconfig_list
default "arch/x86/configs/x86_64_defconfig"


config GENERIC_LOCKBREAK
def_bool n
Expand Down Expand Up @@ -180,7 +192,7 @@ config X86_HT

config X86_BIOS_REBOOT
bool
depends on X86_32 && !(X86_VISWS || X86_VOYAGER)
depends on !X86_VISWS && !X86_VOYAGER
default y

config X86_TRAMPOLINE
Expand Down Expand Up @@ -1161,7 +1173,7 @@ source kernel/Kconfig.hz

config KEXEC
bool "kexec system call"
depends on X86_64 || X86_BIOS_REBOOT
depends on X86_BIOS_REBOOT
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
Expand Down
10 changes: 5 additions & 5 deletions arch/x86/Kconfig.cpu
Original file line number Diff line number Diff line change
Expand Up @@ -278,11 +278,6 @@ config GENERIC_CPU

endchoice

config X86_CPU
def_bool y
select GENERIC_FIND_FIRST_BIT
select GENERIC_FIND_NEXT_BIT

config X86_GENERIC
bool "Generic x86 support"
depends on X86_32
Expand All @@ -297,6 +292,11 @@ config X86_GENERIC

endif

config X86_CPU
def_bool y
select GENERIC_FIND_FIRST_BIT
select GENERIC_FIND_NEXT_BIT

#
# Define implied options from the CPU selection here
config X86_L1_CACHE_BYTES
Expand Down
7 changes: 3 additions & 4 deletions arch/x86/Kconfig.debug
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,6 @@ config DEBUG_NX_TEST
config 4KSTACKS
bool "Use 4Kb for kernel stacks instead of 8Kb"
depends on X86_32
default y
help
If you say Y here the kernel will use a 4Kb stacksize for the
kernel stack attached to each process/thread. This facilitates
Expand Down Expand Up @@ -256,11 +255,8 @@ config CPA_DEBUG
help
Do change_page_attr() self-tests every 30 seconds.

endmenu

config OPTIMIZE_INLINING
bool "Allow gcc to uninline functions marked 'inline'"
default y
help
This option determines if the kernel forces gcc to inline the functions
developers have marked 'inline'. Doing so takes away freedom from gcc to
Expand All @@ -270,3 +266,6 @@ config OPTIMIZE_INLINING
this algorithm is so good that allowing gcc4 to make the decision can
become the default in the future, until then this option is there to
test gcc for this.

endmenu

1 change: 0 additions & 1 deletion arch/x86/kernel/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ obj-$(CONFIG_STACKTRACE) += stacktrace.o
obj-y += cpu/
obj-y += acpi/
obj-$(CONFIG_X86_BIOS_REBOOT) += reboot.o
obj-$(CONFIG_X86_64) += reboot.o
obj-$(CONFIG_MCA) += mca_32.o
obj-$(CONFIG_X86_MSR) += msr.o
obj-$(CONFIG_X86_CPUID) += cpuid.o
Expand Down
2 changes: 1 addition & 1 deletion arch/x86/kernel/genapic_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ unsigned int read_apic_id(void)
{
unsigned int id;

WARN_ON(preemptible());
WARN_ON(preemptible() && num_online_cpus() > 1);
id = apic_read(APIC_ID);
if (uv_system_type >= UV_X2APIC)
id |= __get_cpu_var(x2apic_extra_bits);
Expand Down
19 changes: 10 additions & 9 deletions arch/x86/kernel/head_32.S
Original file line number Diff line number Diff line change
Expand Up @@ -656,15 +656,16 @@ int_msg:
.asciz "Unknown interrupt or fault at EIP %p %p %p\n"

fault_msg:
.asciz \
/* fault info: */ "BUG: Int %d: CR2 %p\n" \
/* pusha regs: */ " EDI %p ESI %p EBP %p ESP %p\n" \
" EBX %p EDX %p ECX %p EAX %p\n" \
/* fault frame: */ " err %p EIP %p CS %p flg %p\n" \
\
"Stack: %p %p %p %p %p %p %p %p\n" \
" %p %p %p %p %p %p %p %p\n" \
" %p %p %p %p %p %p %p %p\n"
/* fault info: */
.ascii "BUG: Int %d: CR2 %p\n"
/* pusha regs: */
.ascii " EDI %p ESI %p EBP %p ESP %p\n"
.ascii " EBX %p EDX %p ECX %p EAX %p\n"
/* fault frame: */
.ascii " err %p EIP %p CS %p flg %p\n"
.ascii "Stack: %p %p %p %p %p %p %p %p\n"
.ascii " %p %p %p %p %p %p %p %p\n"
.asciz " %p %p %p %p %p %p %p %p\n"

#include "../../x86/xen/xen-head.S"

Expand Down
5 changes: 3 additions & 2 deletions arch/x86/kernel/hpet.c
Original file line number Diff line number Diff line change
Expand Up @@ -137,9 +137,10 @@ static void hpet_reserve_platform_timers(unsigned long id)
hd.hd_irq[0] = HPET_LEGACY_8254;
hd.hd_irq[1] = HPET_LEGACY_RTC;

for (i = 2; i < nrtimers; timer++, i++)
hd.hd_irq[i] = (timer->hpet_config & Tn_INT_ROUTE_CNF_MASK) >>
for (i = 2; i < nrtimers; timer++, i++) {
hd.hd_irq[i] = (readl(&timer->hpet_config) & Tn_INT_ROUTE_CNF_MASK) >>
Tn_INT_ROUTE_CNF_SHIFT;
}

hpet_alloc(&hd);

Expand Down
2 changes: 1 addition & 1 deletion arch/x86/kernel/pci-dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ EXPORT_SYMBOL(forbid_dac);
const struct dma_mapping_ops *dma_ops;
EXPORT_SYMBOL(dma_ops);

int iommu_sac_force __read_mostly = 0;
static int iommu_sac_force __read_mostly;

#ifdef CONFIG_IOMMU_DEBUG
int panic_on_overflow __read_mostly = 1;
Expand Down
1 change: 1 addition & 0 deletions arch/x86/kernel/reboot.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <asm/desc.h>
#include <asm/hpet.h>
#include <asm/pgtable.h>
#include <asm/proto.h>
#include <asm/reboot_fixups.h>
#include <asm/reboot.h>

Expand Down
2 changes: 1 addition & 1 deletion arch/x86/mach-voyager/voyager_cat.c
Original file line number Diff line number Diff line change
Expand Up @@ -877,7 +877,7 @@ void __init voyager_cat_init(void)
request_resource(&iomem_resource, res);
}

qic_addr = (unsigned long)ioremap(qic_addr, 0x400);
qic_addr = (unsigned long)ioremap_cache(qic_addr, 0x400);

for (j = 0; j < 4; j++) {
__u8 cpu;
Expand Down
1 change: 0 additions & 1 deletion arch/x86/mm/highmem_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -155,4 +155,3 @@ EXPORT_SYMBOL(kmap);
EXPORT_SYMBOL(kunmap);
EXPORT_SYMBOL(kmap_atomic);
EXPORT_SYMBOL(kunmap_atomic);
EXPORT_SYMBOL(kmap_atomic_to_page);
23 changes: 18 additions & 5 deletions arch/x86/mm/ioremap.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,8 @@ static void __iomem *__ioremap_caller(resource_size_t phys_addr,
* Don't allow anybody to remap normal RAM that we're using..
*/
for (pfn = phys_addr >> PAGE_SHIFT;
(pfn << PAGE_SHIFT) < last_addr; pfn++) {
(pfn << PAGE_SHIFT) < (last_addr & PAGE_MASK);
pfn++) {

int is_ram = page_is_ram(pfn);

Expand All @@ -176,11 +177,11 @@ static void __iomem *__ioremap_caller(resource_size_t phys_addr,
/*
* Do not fallback to certain memory types with certain
* requested type:
* - request is uncached, return cannot be write-back
* - request is uncached, return cannot be write-combine
* - request is uc-, return cannot be write-back
* - request is uc-, return cannot be write-combine
* - request is write-combine, return cannot be write-back
*/
if ((prot_val == _PAGE_CACHE_UC &&
if ((prot_val == _PAGE_CACHE_UC_MINUS &&
(new_prot_val == _PAGE_CACHE_WB ||
new_prot_val == _PAGE_CACHE_WC)) ||
(prot_val == _PAGE_CACHE_WC &&
Expand All @@ -201,6 +202,9 @@ static void __iomem *__ioremap_caller(resource_size_t phys_addr,
default:
prot = PAGE_KERNEL_NOCACHE;
break;
case _PAGE_CACHE_UC_MINUS:
prot = PAGE_KERNEL_UC_MINUS;
break;
case _PAGE_CACHE_WC:
prot = PAGE_KERNEL_WC;
break;
Expand Down Expand Up @@ -255,7 +259,16 @@ static void __iomem *__ioremap_caller(resource_size_t phys_addr,
*/
void __iomem *ioremap_nocache(resource_size_t phys_addr, unsigned long size)
{
return __ioremap_caller(phys_addr, size, _PAGE_CACHE_UC,
/*
* Ideally, this should be:
* pat_wc_enabled ? _PAGE_CACHE_UC : _PAGE_CACHE_UC_MINUS;
*
* Till we fix all X drivers to use ioremap_wc(), we will use
* UC MINUS.
*/
unsigned long val = _PAGE_CACHE_UC_MINUS;

return __ioremap_caller(phys_addr, size, val,
__builtin_return_address(0));
}
EXPORT_SYMBOL(ioremap_nocache);
Expand Down
10 changes: 8 additions & 2 deletions arch/x86/mm/pageattr.c
Original file line number Diff line number Diff line change
Expand Up @@ -777,14 +777,20 @@ static inline int change_page_attr_clear(unsigned long addr, int numpages,

int _set_memory_uc(unsigned long addr, int numpages)
{
/*
* for now UC MINUS. see comments in ioremap_nocache()
*/
return change_page_attr_set(addr, numpages,
__pgprot(_PAGE_CACHE_UC));
__pgprot(_PAGE_CACHE_UC_MINUS));
}

int set_memory_uc(unsigned long addr, int numpages)
{
/*
* for now UC MINUS. see comments in ioremap_nocache()
*/
if (reserve_memtype(addr, addr + numpages * PAGE_SIZE,
_PAGE_CACHE_UC, NULL))
_PAGE_CACHE_UC_MINUS, NULL))
return -EINVAL;

return _set_memory_uc(addr, numpages);
Expand Down
4 changes: 2 additions & 2 deletions arch/x86/pci/Makefile_32
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ pci-y := fixup.o
pci-$(CONFIG_ACPI) += acpi.o
pci-y += legacy.o irq.o

pci-$(CONFIG_X86_VISWS) := visws.o fixup.o
pci-$(CONFIG_X86_NUMAQ) := numa.o irq.o
pci-$(CONFIG_X86_VISWS) += visws.o fixup.o
pci-$(CONFIG_X86_NUMAQ) += numa.o irq.o
pci-$(CONFIG_NUMA) += mp_bus_to_node.o

obj-y += $(pci-y) common.o early.o
12 changes: 9 additions & 3 deletions arch/x86/pci/i386.c
Original file line number Diff line number Diff line change
Expand Up @@ -301,6 +301,13 @@ int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
prot = pgprot_val(vma->vm_page_prot);
if (pat_wc_enabled && write_combine)
prot |= _PAGE_CACHE_WC;
else if (pat_wc_enabled)
/*
* ioremap() and ioremap_nocache() defaults to UC MINUS for now.
* To avoid attribute conflicts, request UC MINUS here
* aswell.
*/
prot |= _PAGE_CACHE_UC_MINUS;
else if (boot_cpu_data.x86 > 3)
prot |= _PAGE_CACHE_UC;

Expand All @@ -319,9 +326,8 @@ int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma,
* - request is uncached, return cannot be write-combine
* - request is write-combine, return cannot be write-back
*/
if ((flags == _PAGE_CACHE_UC &&
(new_flags == _PAGE_CACHE_WB ||
new_flags == _PAGE_CACHE_WC)) ||
if ((flags == _PAGE_CACHE_UC_MINUS &&
(new_flags == _PAGE_CACHE_WB)) ||
(flags == _PAGE_CACHE_WC &&
new_flags == _PAGE_CACHE_WB)) {
free_memtype(addr, addr+len);
Expand Down
2 changes: 0 additions & 2 deletions arch/x86/vdso/vdso32-setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -303,8 +303,6 @@ int __init sysenter_setup(void)

#ifdef CONFIG_X86_32
gate_vma_init();

printk("Compat vDSO mapped to %08lx.\n", __fix_to_virt(FIX_VDSO));
#endif

if (!vdso32_sysenter()) {
Expand Down
2 changes: 1 addition & 1 deletion drivers/char/toshiba.c
Original file line number Diff line number Diff line change
Expand Up @@ -426,7 +426,7 @@ static int tosh_probe(void)
int i,major,minor,day,year,month,flag;
unsigned char signature[7] = { 0x54,0x4f,0x53,0x48,0x49,0x42,0x41 };
SMMRegisters regs;
void __iomem *bios = ioremap(0xf0000, 0x10000);
void __iomem *bios = ioremap_cache(0xf0000, 0x10000);

if (!bios)
return -ENOMEM;
Expand Down
7 changes: 1 addition & 6 deletions include/asm-x86/mach-default/mach_apic.h
Original file line number Diff line number Diff line change
Expand Up @@ -109,13 +109,8 @@ static inline int cpu_to_logical_apicid(int cpu)

static inline int cpu_present_to_apicid(int mps_cpu)
{
#ifdef CONFIG_X86_64
if (cpu_present(mps_cpu))
if (mps_cpu < NR_CPUS && cpu_present(mps_cpu))
return (int)per_cpu(x86_bios_cpu_apicid, mps_cpu);
#else
if (mps_cpu < get_physical_broadcast())
return mps_cpu;
#endif
else
return BAD_APICID;
}
Expand Down
3 changes: 0 additions & 3 deletions include/asm-x86/processor.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@

#include <asm/processor-flags.h>

/* migration helper, for KVM - will be removed in 2.6.25: */
#define Xgt_desc_struct desc_ptr

/* Forward declaration, a strange C thing */
struct task_struct;
struct mm_struct;
Expand Down
4 changes: 4 additions & 0 deletions include/asm-x86/proto.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@ extern void syscall32_cpu_init(void);

extern void check_efer(void);

#ifdef CONFIG_X86_BIOS_REBOOT
extern int reboot_force;
#else
static const int reboot_force = 0;
#endif

long do_arch_prctl(struct task_struct *task, int code, unsigned long addr);

Expand Down

0 comments on commit 958a2f2

Please sign in to comment.