Merge git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6: (23 commits) parisc: move dereference_function_descriptor to process.c parisc: Move kernel Elf_Fdesc define to <asm/elf.h> parisc: fix build when ARCH_HAS_KMAP parisc: fix "make tar-pkg" parisc: drivers: fix warnings parisc: select BUG always parisc: asm/pdc.h should include asm/page.h parisc: led: remove proc_dir_entry::owner parisc: fix macro expansion in atomic.h parisc: iosapic: fix build breakage parisc: oops_enter()/oops_exit() in die() parisc: document light weight syscall ABI parisc: blink all or loadavg LEDs on oops parisc: add ftrace (function and graph tracer) functionality parisc: simplify sys_clone() parisc: add LATENCYTOP_SUPPORT and CONFIG_STACKTRACE_SUPPORT parisc: allow to build with 16k default kernel page size parisc: expose 32/64-bit capabilities in cpuinfo parisc: use constants instead of numbers in assembly parisc: fix usage of 32bit PTE page table entries on 32bit kernels ...
Этот коммит содержится в:
@@ -25,7 +25,7 @@
|
||||
* Since "a" is usually an address, use one spinlock per cacheline.
|
||||
*/
|
||||
# define ATOMIC_HASH_SIZE 4
|
||||
# define ATOMIC_HASH(a) (&(__atomic_hash[ (((unsigned long) a)/L1_CACHE_BYTES) & (ATOMIC_HASH_SIZE-1) ]))
|
||||
# define ATOMIC_HASH(a) (&(__atomic_hash[ (((unsigned long) (a))/L1_CACHE_BYTES) & (ATOMIC_HASH_SIZE-1) ]))
|
||||
|
||||
extern raw_spinlock_t __atomic_hash[ATOMIC_HASH_SIZE] __lock_aligned;
|
||||
|
||||
@@ -222,13 +222,13 @@ static __inline__ int atomic_add_unless(atomic_t *v, int a, int u)
|
||||
|
||||
#define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0)
|
||||
|
||||
#define atomic_add(i,v) ((void)(__atomic_add_return( ((int)i),(v))))
|
||||
#define atomic_sub(i,v) ((void)(__atomic_add_return(-((int)i),(v))))
|
||||
#define atomic_add(i,v) ((void)(__atomic_add_return( ((int)(i)),(v))))
|
||||
#define atomic_sub(i,v) ((void)(__atomic_add_return(-((int)(i)),(v))))
|
||||
#define atomic_inc(v) ((void)(__atomic_add_return( 1,(v))))
|
||||
#define atomic_dec(v) ((void)(__atomic_add_return( -1,(v))))
|
||||
|
||||
#define atomic_add_return(i,v) (__atomic_add_return( ((int)i),(v)))
|
||||
#define atomic_sub_return(i,v) (__atomic_add_return(-((int)i),(v)))
|
||||
#define atomic_add_return(i,v) (__atomic_add_return( ((int)(i)),(v)))
|
||||
#define atomic_sub_return(i,v) (__atomic_add_return(-((int)(i)),(v)))
|
||||
#define atomic_inc_return(v) (__atomic_add_return( 1,(v)))
|
||||
#define atomic_dec_return(v) (__atomic_add_return( -1,(v)))
|
||||
|
||||
@@ -289,13 +289,13 @@ atomic64_read(const atomic64_t *v)
|
||||
return v->counter;
|
||||
}
|
||||
|
||||
#define atomic64_add(i,v) ((void)(__atomic64_add_return( ((s64)i),(v))))
|
||||
#define atomic64_sub(i,v) ((void)(__atomic64_add_return(-((s64)i),(v))))
|
||||
#define atomic64_add(i,v) ((void)(__atomic64_add_return( ((s64)(i)),(v))))
|
||||
#define atomic64_sub(i,v) ((void)(__atomic64_add_return(-((s64)(i)),(v))))
|
||||
#define atomic64_inc(v) ((void)(__atomic64_add_return( 1,(v))))
|
||||
#define atomic64_dec(v) ((void)(__atomic64_add_return( -1,(v))))
|
||||
|
||||
#define atomic64_add_return(i,v) (__atomic64_add_return( ((s64)i),(v)))
|
||||
#define atomic64_sub_return(i,v) (__atomic64_add_return(-((s64)i),(v)))
|
||||
#define atomic64_add_return(i,v) (__atomic64_add_return( ((s64)(i)),(v)))
|
||||
#define atomic64_sub_return(i,v) (__atomic64_add_return(-((s64)(i)),(v)))
|
||||
#define atomic64_inc_return(v) (__atomic64_add_return( 1,(v)))
|
||||
#define atomic64_dec_return(v) (__atomic64_add_return( -1,(v)))
|
||||
|
||||
|
@@ -97,6 +97,9 @@ void mark_rodata_ro(void);
|
||||
|
||||
#ifdef CONFIG_PA8X00
|
||||
/* Only pa8800, pa8900 needs this */
|
||||
|
||||
#include <asm/kmap_types.h>
|
||||
|
||||
#define ARCH_HAS_KMAP
|
||||
|
||||
void kunmap_parisc(void *addr);
|
||||
|
@@ -168,6 +168,16 @@ typedef struct elf64_fdesc {
|
||||
__u64 gp;
|
||||
} Elf64_Fdesc;
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
#define Elf_Fdesc Elf64_Fdesc
|
||||
#else
|
||||
#define Elf_Fdesc Elf32_Fdesc
|
||||
#endif /*CONFIG_64BIT*/
|
||||
|
||||
#endif /*__KERNEL__*/
|
||||
|
||||
/* Legal values for p_type field of Elf32_Phdr/Elf64_Phdr. */
|
||||
|
||||
#define PT_HP_TLS (PT_LOOS + 0x0)
|
||||
|
25
arch/parisc/include/asm/ftrace.h
Обычный файл
25
arch/parisc/include/asm/ftrace.h
Обычный файл
@@ -0,0 +1,25 @@
|
||||
#ifndef _ASM_PARISC_FTRACE_H
|
||||
#define _ASM_PARISC_FTRACE_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
extern void mcount(void);
|
||||
|
||||
/*
|
||||
* Stack of return addresses for functions of a thread.
|
||||
* Used in struct thread_info
|
||||
*/
|
||||
struct ftrace_ret_stack {
|
||||
unsigned long ret;
|
||||
unsigned long func;
|
||||
unsigned long long calltime;
|
||||
};
|
||||
|
||||
/*
|
||||
* Primary handler of a function return.
|
||||
* It relays on ftrace_return_to_handler.
|
||||
* Defined in entry.S
|
||||
*/
|
||||
extern void return_to_handler(void);
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#endif /* _ASM_PARISC_FTRACE_H */
|
@@ -36,16 +36,7 @@ void clear_user_page(void *page, unsigned long vaddr, struct page *pg);
|
||||
*/
|
||||
#define STRICT_MM_TYPECHECKS
|
||||
#ifdef STRICT_MM_TYPECHECKS
|
||||
typedef struct { unsigned long pte;
|
||||
#if !defined(CONFIG_64BIT)
|
||||
unsigned long future_flags;
|
||||
/* XXX: it's possible to remove future_flags and change BITS_PER_PTE_ENTRY
|
||||
to 2, but then strangely the identical 32bit kernel boots on a
|
||||
c3000(pa20), but not any longer on a 715(pa11).
|
||||
Still investigating... HelgeD.
|
||||
*/
|
||||
#endif
|
||||
} pte_t; /* either 32 or 64bit */
|
||||
typedef struct { unsigned long pte; } pte_t; /* either 32 or 64bit */
|
||||
|
||||
/* NOTE: even on 64 bits, these entries are __u32 because we allocate
|
||||
* the pmd and pgd in ZONE_DMA (i.e. under 4GB) */
|
||||
@@ -111,7 +102,7 @@ extern int npmem_ranges;
|
||||
#define BITS_PER_PMD_ENTRY 2
|
||||
#define BITS_PER_PGD_ENTRY 2
|
||||
#else
|
||||
#define BITS_PER_PTE_ENTRY 3
|
||||
#define BITS_PER_PTE_ENTRY 2
|
||||
#define BITS_PER_PMD_ENTRY 2
|
||||
#define BITS_PER_PGD_ENTRY BITS_PER_PMD_ENTRY
|
||||
#endif
|
||||
|
@@ -49,6 +49,8 @@
|
||||
#define PDC_MODEL_CPU_ID 6 /* returns cpu-id (only newer machines!) */
|
||||
#define PDC_MODEL_CAPABILITIES 7 /* returns OS32/OS64-flags */
|
||||
/* Values for PDC_MODEL_CAPABILITIES non-equivalent virtual aliasing support */
|
||||
#define PDC_MODEL_OS64 (1 << 0)
|
||||
#define PDC_MODEL_OS32 (1 << 1)
|
||||
#define PDC_MODEL_IOPDIR_FDC (1 << 2)
|
||||
#define PDC_MODEL_NVA_MASK (3 << 4)
|
||||
#define PDC_MODEL_NVA_SUPPORTED (0 << 4)
|
||||
@@ -341,6 +343,8 @@
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <asm/page.h> /* for __PAGE_OFFSET */
|
||||
|
||||
extern int pdc_type;
|
||||
|
||||
/* Values for pdc_type */
|
||||
|
@@ -50,11 +50,7 @@
|
||||
printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, (unsigned long)pgd_val(e))
|
||||
|
||||
/* This is the size of the initially mapped kernel memory */
|
||||
#ifdef CONFIG_64BIT
|
||||
#define KERNEL_INITIAL_ORDER 24 /* 0 to 1<<24 = 16MB */
|
||||
#else
|
||||
#define KERNEL_INITIAL_ORDER 23 /* 0 to 1<<23 = 8MB */
|
||||
#endif
|
||||
#define KERNEL_INITIAL_SIZE (1 << KERNEL_INITIAL_ORDER)
|
||||
|
||||
#if defined(CONFIG_64BIT) && defined(CONFIG_PARISC_PAGE_SIZE_4KB)
|
||||
@@ -91,16 +87,25 @@
|
||||
|
||||
/* Definitions for 1st level */
|
||||
#define PGDIR_SHIFT (PMD_SHIFT + BITS_PER_PMD)
|
||||
#if (PGDIR_SHIFT + PAGE_SHIFT + PGD_ORDER - BITS_PER_PGD_ENTRY) > BITS_PER_LONG
|
||||
#define BITS_PER_PGD (BITS_PER_LONG - PGDIR_SHIFT)
|
||||
#else
|
||||
#define BITS_PER_PGD (PAGE_SHIFT + PGD_ORDER - BITS_PER_PGD_ENTRY)
|
||||
#endif
|
||||
#define PGDIR_SIZE (1UL << PGDIR_SHIFT)
|
||||
#define PGDIR_MASK (~(PGDIR_SIZE-1))
|
||||
#define PTRS_PER_PGD (1UL << BITS_PER_PGD)
|
||||
#define USER_PTRS_PER_PGD PTRS_PER_PGD
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
#define MAX_ADDRBITS (PGDIR_SHIFT + BITS_PER_PGD)
|
||||
#define MAX_ADDRESS (1UL << MAX_ADDRBITS)
|
||||
|
||||
#define SPACEID_SHIFT (MAX_ADDRBITS - 32)
|
||||
#else
|
||||
#define MAX_ADDRBITS (BITS_PER_LONG)
|
||||
#define MAX_ADDRESS (1UL << MAX_ADDRBITS)
|
||||
#define SPACEID_SHIFT 0
|
||||
#endif
|
||||
|
||||
/* This calculates the number of initial pages we need for the initial
|
||||
* page tables */
|
||||
|
@@ -29,7 +29,8 @@ extern void smp_send_reschedule(int cpu);
|
||||
extern void smp_send_all_nop(void);
|
||||
|
||||
extern void arch_send_call_function_single_ipi(int cpu);
|
||||
extern void arch_send_call_function_ipi(cpumask_t mask);
|
||||
extern void arch_send_call_function_ipi_mask(const struct cpumask *mask);
|
||||
#define arch_send_call_function_ipi_mask arch_send_call_function_ipi_mask
|
||||
|
||||
#endif /* !ASSEMBLY */
|
||||
|
||||
|
Ссылка в новой задаче
Block a user