Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-tip
* 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-tip: x86, irq: Check move_in_progress before freeing the vector mapping x86: copy_from_user() should not return -EFAULT Revert "x86: Side-step lguest problem by only building cmpxchg8b_emu for pre-Pentium" x86/pci: Intel ioh bus num reg accessing fix x86: Fix size for ex trampoline with 32bit
This commit is contained in:
commit
80e23b7cea
@ -205,14 +205,13 @@ static inline unsigned long __must_check copy_from_user(void *to,
|
|||||||
unsigned long n)
|
unsigned long n)
|
||||||
{
|
{
|
||||||
int sz = __compiletime_object_size(to);
|
int sz = __compiletime_object_size(to);
|
||||||
int ret = -EFAULT;
|
|
||||||
|
|
||||||
if (likely(sz == -1 || sz >= n))
|
if (likely(sz == -1 || sz >= n))
|
||||||
ret = _copy_from_user(to, from, n);
|
n = _copy_from_user(to, from, n);
|
||||||
else
|
else
|
||||||
copy_from_user_overflow();
|
copy_from_user_overflow();
|
||||||
|
|
||||||
return ret;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
long __must_check strncpy_from_user(char *dst, const char __user *src,
|
long __must_check strncpy_from_user(char *dst, const char __user *src,
|
||||||
|
@ -30,16 +30,15 @@ static inline unsigned long __must_check copy_from_user(void *to,
|
|||||||
unsigned long n)
|
unsigned long n)
|
||||||
{
|
{
|
||||||
int sz = __compiletime_object_size(to);
|
int sz = __compiletime_object_size(to);
|
||||||
int ret = -EFAULT;
|
|
||||||
|
|
||||||
might_fault();
|
might_fault();
|
||||||
if (likely(sz == -1 || sz >= n))
|
if (likely(sz == -1 || sz >= n))
|
||||||
ret = _copy_from_user(to, from, n);
|
n = _copy_from_user(to, from, n);
|
||||||
#ifdef CONFIG_DEBUG_VM
|
#ifdef CONFIG_DEBUG_VM
|
||||||
else
|
else
|
||||||
WARN(1, "Buffer overflow detected!\n");
|
WARN(1, "Buffer overflow detected!\n");
|
||||||
#endif
|
#endif
|
||||||
return ret;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __always_inline __must_check
|
static __always_inline __must_check
|
||||||
|
@ -2434,6 +2434,13 @@ asmlinkage void smp_irq_move_cleanup_interrupt(void)
|
|||||||
cfg = irq_cfg(irq);
|
cfg = irq_cfg(irq);
|
||||||
raw_spin_lock(&desc->lock);
|
raw_spin_lock(&desc->lock);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if the irq migration is in progress. If so, we
|
||||||
|
* haven't received the cleanup request yet for this irq.
|
||||||
|
*/
|
||||||
|
if (cfg->move_in_progress)
|
||||||
|
goto unlock;
|
||||||
|
|
||||||
if (vector == cfg->vector && cpumask_test_cpu(me, cfg->domain))
|
if (vector == cfg->vector && cpumask_test_cpu(me, cfg->domain))
|
||||||
goto unlock;
|
goto unlock;
|
||||||
|
|
||||||
|
@ -733,13 +733,13 @@ struct early_res {
|
|||||||
};
|
};
|
||||||
static struct early_res early_res[MAX_EARLY_RES] __initdata = {
|
static struct early_res early_res[MAX_EARLY_RES] __initdata = {
|
||||||
{ 0, PAGE_SIZE, "BIOS data page", 1 }, /* BIOS data page */
|
{ 0, PAGE_SIZE, "BIOS data page", 1 }, /* BIOS data page */
|
||||||
#ifdef CONFIG_X86_32
|
#if defined(CONFIG_X86_32) && defined(CONFIG_X86_TRAMPOLINE)
|
||||||
/*
|
/*
|
||||||
* But first pinch a few for the stack/trampoline stuff
|
* But first pinch a few for the stack/trampoline stuff
|
||||||
* FIXME: Don't need the extra page at 4K, but need to fix
|
* FIXME: Don't need the extra page at 4K, but need to fix
|
||||||
* trampoline before removing it. (see the GDT stuff)
|
* trampoline before removing it. (see the GDT stuff)
|
||||||
*/
|
*/
|
||||||
{ PAGE_SIZE, PAGE_SIZE, "EX TRAMPOLINE", 1 },
|
{ PAGE_SIZE, PAGE_SIZE + PAGE_SIZE, "EX TRAMPOLINE", 1 },
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
{}
|
{}
|
||||||
|
@ -49,6 +49,10 @@ static void __devinit pci_root_bus_res(struct pci_dev *dev)
|
|||||||
u64 mmioh_base, mmioh_end;
|
u64 mmioh_base, mmioh_end;
|
||||||
int bus_base, bus_end;
|
int bus_base, bus_end;
|
||||||
|
|
||||||
|
/* some sys doesn't get mmconf enabled */
|
||||||
|
if (dev->cfg_size < 0x120)
|
||||||
|
return;
|
||||||
|
|
||||||
if (pci_root_num >= PCI_ROOT_NR) {
|
if (pci_root_num >= PCI_ROOT_NR) {
|
||||||
printk(KERN_DEBUG "intel_bus.c: PCI_ROOT_NR is too small\n");
|
printk(KERN_DEBUG "intel_bus.c: PCI_ROOT_NR is too small\n");
|
||||||
return;
|
return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user