Merge branch 'locking/urgent' into locking/core, to pick up fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
@@ -135,6 +135,7 @@ extern void init_apic_mappings(void);
|
||||
void register_lapic_address(unsigned long address);
|
||||
extern void setup_boot_APIC_clock(void);
|
||||
extern void setup_secondary_APIC_clock(void);
|
||||
extern void lapic_update_tsc_freq(void);
|
||||
extern int APIC_init_uniprocessor(void);
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
@@ -170,6 +171,7 @@ static inline void init_apic_mappings(void) { }
|
||||
static inline void disable_local_APIC(void) { }
|
||||
# define setup_boot_APIC_clock x86_init_noop
|
||||
# define setup_secondary_APIC_clock x86_init_noop
|
||||
static inline void lapic_update_tsc_freq(void) { }
|
||||
#endif /* !CONFIG_X86_LOCAL_APIC */
|
||||
|
||||
#ifdef CONFIG_X86_X2APIC
|
||||
|
@@ -22,10 +22,6 @@ typedef struct {
|
||||
#ifdef CONFIG_SMP
|
||||
unsigned int irq_resched_count;
|
||||
unsigned int irq_call_count;
|
||||
/*
|
||||
* irq_tlb_count is double-counted in irq_call_count, so it must be
|
||||
* subtracted from irq_call_count when displaying irq_call_count
|
||||
*/
|
||||
unsigned int irq_tlb_count;
|
||||
#endif
|
||||
#ifdef CONFIG_X86_THERMAL_VECTOR
|
||||
|
@@ -5,10 +5,10 @@ struct x86_mapping_info {
|
||||
void *(*alloc_pgt_page)(void *); /* allocate buf for page table */
|
||||
void *context; /* context for alloc_pgt_page */
|
||||
unsigned long pmd_flag; /* page flag for PMD entry */
|
||||
bool kernel_mapping; /* kernel mapping or ident mapping */
|
||||
unsigned long offset; /* ident mapping offset */
|
||||
};
|
||||
|
||||
int kernel_ident_mapping_init(struct x86_mapping_info *info, pgd_t *pgd_page,
|
||||
unsigned long addr, unsigned long end);
|
||||
unsigned long pstart, unsigned long pend);
|
||||
|
||||
#endif /* _ASM_X86_INIT_H */
|
||||
|
@@ -145,7 +145,7 @@ static inline int pgd_large(pgd_t pgd) { return 0; }
|
||||
*
|
||||
* | ... | 11| 10| 9|8|7|6|5| 4| 3|2|1|0| <- bit number
|
||||
* | ... |SW3|SW2|SW1|G|L|D|A|CD|WT|U|W|P| <- bit names
|
||||
* | OFFSET (14->63) | TYPE (10-13) |0|X|X|X| X| X|X|X|0| <- swp entry
|
||||
* | OFFSET (14->63) | TYPE (9-13) |0|X|X|X| X| X|X|X|0| <- swp entry
|
||||
*
|
||||
* G (8) is aliased and used as a PROT_NONE indicator for
|
||||
* !present ptes. We need to start storing swap entries above
|
||||
@@ -156,7 +156,7 @@ static inline int pgd_large(pgd_t pgd) { return 0; }
|
||||
#define SWP_TYPE_FIRST_BIT (_PAGE_BIT_PROTNONE + 1)
|
||||
#define SWP_TYPE_BITS 5
|
||||
/* Place the offset above the type: */
|
||||
#define SWP_OFFSET_FIRST_BIT (SWP_TYPE_FIRST_BIT + SWP_TYPE_BITS + 1)
|
||||
#define SWP_OFFSET_FIRST_BIT (SWP_TYPE_FIRST_BIT + SWP_TYPE_BITS)
|
||||
|
||||
#define MAX_SWAPFILES_CHECK() BUILD_BUG_ON(MAX_SWAPFILES_SHIFT > SWP_TYPE_BITS)
|
||||
|
||||
|
@@ -58,7 +58,15 @@ extern unsigned char boot_gdt[];
|
||||
extern unsigned char secondary_startup_64[];
|
||||
#endif
|
||||
|
||||
static inline size_t real_mode_size_needed(void)
|
||||
{
|
||||
if (real_mode_header)
|
||||
return 0; /* already allocated. */
|
||||
|
||||
return ALIGN(real_mode_blob_end - real_mode_blob, PAGE_SIZE);
|
||||
}
|
||||
|
||||
void set_real_mode_mem(phys_addr_t mem, size_t size);
|
||||
void reserve_real_mode(void);
|
||||
void setup_real_mode(void);
|
||||
|
||||
#endif /* _ARCH_X86_REALMODE_H */
|
||||
|
@@ -135,7 +135,14 @@ static inline void cr4_set_bits_and_update_boot(unsigned long mask)
|
||||
|
||||
static inline void __native_flush_tlb(void)
|
||||
{
|
||||
/*
|
||||
* If current->mm == NULL then we borrow a mm which may change during a
|
||||
* task switch and therefore we must not be preempted while we write CR3
|
||||
* back:
|
||||
*/
|
||||
preempt_disable();
|
||||
native_write_cr3(native_read_cr3());
|
||||
preempt_enable();
|
||||
}
|
||||
|
||||
static inline void __native_flush_tlb_global_irq_disabled(void)
|
||||
|
@@ -433,7 +433,11 @@ do { \
|
||||
#define __get_user_asm_ex(x, addr, itype, rtype, ltype) \
|
||||
asm volatile("1: mov"itype" %1,%"rtype"0\n" \
|
||||
"2:\n" \
|
||||
_ASM_EXTABLE_EX(1b, 2b) \
|
||||
".section .fixup,\"ax\"\n" \
|
||||
"3:xor"itype" %"rtype"0,%"rtype"0\n" \
|
||||
" jmp 2b\n" \
|
||||
".previous\n" \
|
||||
_ASM_EXTABLE_EX(1b, 3b) \
|
||||
: ltype(x) : "m" (__m(addr)))
|
||||
|
||||
#define __put_user_nocheck(x, ptr, size) \
|
||||
@@ -697,44 +701,15 @@ unsigned long __must_check _copy_from_user(void *to, const void __user *from,
|
||||
unsigned long __must_check _copy_to_user(void __user *to, const void *from,
|
||||
unsigned n);
|
||||
|
||||
#ifdef CONFIG_DEBUG_STRICT_USER_COPY_CHECKS
|
||||
# define copy_user_diag __compiletime_error
|
||||
#else
|
||||
# define copy_user_diag __compiletime_warning
|
||||
#endif
|
||||
extern void __compiletime_error("usercopy buffer size is too small")
|
||||
__bad_copy_user(void);
|
||||
|
||||
extern void copy_user_diag("copy_from_user() buffer size is too small")
|
||||
copy_from_user_overflow(void);
|
||||
extern void copy_user_diag("copy_to_user() buffer size is too small")
|
||||
copy_to_user_overflow(void) __asm__("copy_from_user_overflow");
|
||||
|
||||
#undef copy_user_diag
|
||||
|
||||
#ifdef CONFIG_DEBUG_STRICT_USER_COPY_CHECKS
|
||||
|
||||
extern void
|
||||
__compiletime_warning("copy_from_user() buffer size is not provably correct")
|
||||
__copy_from_user_overflow(void) __asm__("copy_from_user_overflow");
|
||||
#define __copy_from_user_overflow(size, count) __copy_from_user_overflow()
|
||||
|
||||
extern void
|
||||
__compiletime_warning("copy_to_user() buffer size is not provably correct")
|
||||
__copy_to_user_overflow(void) __asm__("copy_from_user_overflow");
|
||||
#define __copy_to_user_overflow(size, count) __copy_to_user_overflow()
|
||||
|
||||
#else
|
||||
|
||||
static inline void
|
||||
__copy_from_user_overflow(int size, unsigned long count)
|
||||
static inline void copy_user_overflow(int size, unsigned long count)
|
||||
{
|
||||
WARN(1, "Buffer overflow detected (%d < %lu)!\n", size, count);
|
||||
}
|
||||
|
||||
#define __copy_to_user_overflow __copy_from_user_overflow
|
||||
|
||||
#endif
|
||||
|
||||
static inline unsigned long __must_check
|
||||
static __always_inline unsigned long __must_check
|
||||
copy_from_user(void *to, const void __user *from, unsigned long n)
|
||||
{
|
||||
int sz = __compiletime_object_size(to);
|
||||
@@ -743,36 +718,18 @@ copy_from_user(void *to, const void __user *from, unsigned long n)
|
||||
|
||||
kasan_check_write(to, n);
|
||||
|
||||
/*
|
||||
* While we would like to have the compiler do the checking for us
|
||||
* even in the non-constant size case, any false positives there are
|
||||
* a problem (especially when DEBUG_STRICT_USER_COPY_CHECKS, but even
|
||||
* without - the [hopefully] dangerous looking nature of the warning
|
||||
* would make people go look at the respecitive call sites over and
|
||||
* over again just to find that there's no problem).
|
||||
*
|
||||
* And there are cases where it's just not realistic for the compiler
|
||||
* to prove the count to be in range. For example when multiple call
|
||||
* sites of a helper function - perhaps in different source files -
|
||||
* all doing proper range checking, yet the helper function not doing
|
||||
* so again.
|
||||
*
|
||||
* Therefore limit the compile time checking to the constant size
|
||||
* case, and do only runtime checking for non-constant sizes.
|
||||
*/
|
||||
|
||||
if (likely(sz < 0 || sz >= n)) {
|
||||
check_object_size(to, n, false);
|
||||
n = _copy_from_user(to, from, n);
|
||||
} else if (__builtin_constant_p(n))
|
||||
copy_from_user_overflow();
|
||||
} else if (!__builtin_constant_p(n))
|
||||
copy_user_overflow(sz, n);
|
||||
else
|
||||
__copy_from_user_overflow(sz, n);
|
||||
__bad_copy_user();
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
static inline unsigned long __must_check
|
||||
static __always_inline unsigned long __must_check
|
||||
copy_to_user(void __user *to, const void *from, unsigned long n)
|
||||
{
|
||||
int sz = __compiletime_object_size(from);
|
||||
@@ -781,21 +738,17 @@ copy_to_user(void __user *to, const void *from, unsigned long n)
|
||||
|
||||
might_fault();
|
||||
|
||||
/* See the comment in copy_from_user() above. */
|
||||
if (likely(sz < 0 || sz >= n)) {
|
||||
check_object_size(from, n, true);
|
||||
n = _copy_to_user(to, from, n);
|
||||
} else if (__builtin_constant_p(n))
|
||||
copy_to_user_overflow();
|
||||
} else if (!__builtin_constant_p(n))
|
||||
copy_user_overflow(sz, n);
|
||||
else
|
||||
__copy_to_user_overflow(sz, n);
|
||||
__bad_copy_user();
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
#undef __copy_from_user_overflow
|
||||
#undef __copy_to_user_overflow
|
||||
|
||||
/*
|
||||
* We rely on the nested NMI work to allow atomic faults from the NMI path; the
|
||||
* nested NMI paths are careful to preserve CR2.
|
||||
|
@@ -79,7 +79,7 @@ struct uv_gam_range_entry {
|
||||
u16 nasid; /* HNasid */
|
||||
u16 sockid; /* Socket ID, high bits of APIC ID */
|
||||
u16 pnode; /* Index to MMR and GRU spaces */
|
||||
u32 pxm; /* ACPI proximity domain number */
|
||||
u32 unused2;
|
||||
u32 limit; /* PA bits 56:26 (UV_GAM_RANGE_SHFT) */
|
||||
};
|
||||
|
||||
@@ -88,7 +88,8 @@ struct uv_gam_range_entry {
|
||||
#define UV_SYSTAB_VERSION_UV4 0x400 /* UV4 BIOS base version */
|
||||
#define UV_SYSTAB_VERSION_UV4_1 0x401 /* + gpa_shift */
|
||||
#define UV_SYSTAB_VERSION_UV4_2 0x402 /* + TYPE_NVRAM/WINDOW/MBOX */
|
||||
#define UV_SYSTAB_VERSION_UV4_LATEST UV_SYSTAB_VERSION_UV4_2
|
||||
#define UV_SYSTAB_VERSION_UV4_3 0x403 /* - GAM Range PXM Value */
|
||||
#define UV_SYSTAB_VERSION_UV4_LATEST UV_SYSTAB_VERSION_UV4_3
|
||||
|
||||
#define UV_SYSTAB_TYPE_UNUSED 0 /* End of table (offset == 0) */
|
||||
#define UV_SYSTAB_TYPE_GAM_PARAMS 1 /* GAM PARAM conversions */
|
||||
|
Reference in New Issue
Block a user