Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
#ifndef __ASMS390_AUXVEC_H
|
||||
#define __ASMS390_AUXVEC_H
|
||||
|
||||
#define AT_SYSINFO_EHDR 33
|
||||
|
||||
#endif
|
||||
|
@@ -47,7 +47,10 @@
|
||||
|
||||
#endif /* CONFIG_DEBUG_BUGVERBOSE */
|
||||
|
||||
#define BUG() __EMIT_BUG(0)
|
||||
#define BUG() do { \
|
||||
__EMIT_BUG(0); \
|
||||
for (;;); \
|
||||
} while (0)
|
||||
|
||||
#define WARN_ON(x) ({ \
|
||||
int __ret_warn_on = !!(x); \
|
||||
|
@@ -11,32 +11,39 @@
|
||||
|
||||
#include <asm/types.h>
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define __BIG_ENDIAN
|
||||
|
||||
#ifndef __s390x__
|
||||
# define __SWAB_64_THRU_32__
|
||||
#endif
|
||||
|
||||
#ifdef __s390x__
|
||||
static inline __u64 ___arch__swab64p(const __u64 *x)
|
||||
static inline __u64 __arch_swab64p(const __u64 *x)
|
||||
{
|
||||
__u64 result;
|
||||
|
||||
asm volatile("lrvg %0,%1" : "=d" (result) : "m" (*x));
|
||||
return result;
|
||||
}
|
||||
#define __arch_swab64p __arch_swab64p
|
||||
|
||||
static inline __u64 ___arch__swab64(__u64 x)
|
||||
static inline __u64 __arch_swab64(__u64 x)
|
||||
{
|
||||
__u64 result;
|
||||
|
||||
asm volatile("lrvgr %0,%1" : "=d" (result) : "d" (x));
|
||||
return result;
|
||||
}
|
||||
#define __arch_swab64 __arch_swab64
|
||||
|
||||
static inline void ___arch__swab64s(__u64 *x)
|
||||
static inline void __arch_swab64s(__u64 *x)
|
||||
{
|
||||
*x = ___arch__swab64p(x);
|
||||
*x = __arch_swab64p(x);
|
||||
}
|
||||
#define __arch_swab64s __arch_swab64s
|
||||
#endif /* __s390x__ */
|
||||
|
||||
static inline __u32 ___arch__swab32p(const __u32 *x)
|
||||
static inline __u32 __arch_swab32p(const __u32 *x)
|
||||
{
|
||||
__u32 result;
|
||||
|
||||
@@ -53,25 +60,20 @@ static inline __u32 ___arch__swab32p(const __u32 *x)
|
||||
#endif /* __s390x__ */
|
||||
return result;
|
||||
}
|
||||
#define __arch_swab32p __arch_swab32p
|
||||
|
||||
static inline __u32 ___arch__swab32(__u32 x)
|
||||
#ifdef __s390x__
|
||||
static inline __u32 __arch_swab32(__u32 x)
|
||||
{
|
||||
#ifndef __s390x__
|
||||
return ___arch__swab32p(&x);
|
||||
#else /* __s390x__ */
|
||||
__u32 result;
|
||||
|
||||
asm volatile("lrvr %0,%1" : "=d" (result) : "d" (x));
|
||||
return result;
|
||||
}
|
||||
#define __arch_swab32 __arch_swab32
|
||||
#endif /* __s390x__ */
|
||||
}
|
||||
|
||||
static __inline__ void ___arch__swab32s(__u32 *x)
|
||||
{
|
||||
*x = ___arch__swab32p(x);
|
||||
}
|
||||
|
||||
static __inline__ __u16 ___arch__swab16p(const __u16 *x)
|
||||
static inline __u16 __arch_swab16p(const __u16 *x)
|
||||
{
|
||||
__u16 result;
|
||||
|
||||
@@ -86,40 +88,8 @@ static __inline__ __u16 ___arch__swab16p(const __u16 *x)
|
||||
#endif /* __s390x__ */
|
||||
return result;
|
||||
}
|
||||
#define __arch_swab16p __arch_swab16p
|
||||
|
||||
static __inline__ __u16 ___arch__swab16(__u16 x)
|
||||
{
|
||||
return ___arch__swab16p(&x);
|
||||
}
|
||||
|
||||
static __inline__ void ___arch__swab16s(__u16 *x)
|
||||
{
|
||||
*x = ___arch__swab16p(x);
|
||||
}
|
||||
|
||||
#ifdef __s390x__
|
||||
#define __arch__swab64(x) ___arch__swab64(x)
|
||||
#define __arch__swab64p(x) ___arch__swab64p(x)
|
||||
#define __arch__swab64s(x) ___arch__swab64s(x)
|
||||
#endif /* __s390x__ */
|
||||
#define __arch__swab32(x) ___arch__swab32(x)
|
||||
#define __arch__swab16(x) ___arch__swab16(x)
|
||||
#define __arch__swab32p(x) ___arch__swab32p(x)
|
||||
#define __arch__swab16p(x) ___arch__swab16p(x)
|
||||
#define __arch__swab32s(x) ___arch__swab32s(x)
|
||||
#define __arch__swab16s(x) ___arch__swab16s(x)
|
||||
|
||||
#ifndef __s390x__
|
||||
#if !defined(__STRICT_ANSI__) || defined(__KERNEL__)
|
||||
# define __BYTEORDER_HAS_U64__
|
||||
# define __SWAB_64_THRU_32__
|
||||
#endif
|
||||
#else /* __s390x__ */
|
||||
#define __BYTEORDER_HAS_U64__
|
||||
#endif /* __s390x__ */
|
||||
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
#include <linux/byteorder/big_endian.h>
|
||||
#include <linux/byteorder.h>
|
||||
|
||||
#endif /* _S390_BYTEORDER_H */
|
||||
|
@@ -120,6 +120,10 @@ typedef s390_compat_regs compat_elf_gregset_t;
|
||||
#include <asm/system.h> /* for save_access_regs */
|
||||
#include <asm/mmu_context.h>
|
||||
|
||||
#include <asm/vdso.h>
|
||||
|
||||
extern unsigned int vdso_enabled;
|
||||
|
||||
/*
|
||||
* This is used to ensure we don't load something for the wrong architecture.
|
||||
*/
|
||||
@@ -191,4 +195,16 @@ do { \
|
||||
current->mm->context.noexec == 0; \
|
||||
})
|
||||
|
||||
#define ARCH_DLINFO \
|
||||
do { \
|
||||
if (vdso_enabled) \
|
||||
NEW_AUX_ENT(AT_SYSINFO_EHDR, \
|
||||
(unsigned long)current->mm->context.vdso_base); \
|
||||
} while (0)
|
||||
|
||||
struct linux_binprm;
|
||||
|
||||
#define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1
|
||||
int arch_setup_additional_pages(struct linux_binprm *, int);
|
||||
|
||||
#endif
|
||||
|
@@ -248,8 +248,8 @@ struct dcw {
|
||||
#define TCCB_MAX_SIZE (sizeof(struct tccb_tcah) + \
|
||||
TCCB_MAX_DCW * sizeof(struct dcw) + \
|
||||
sizeof(struct tccb_tcat))
|
||||
#define TCCB_SAC_DEFAULT 0xf901
|
||||
#define TCCB_SAC_INTRG 0xf902
|
||||
#define TCCB_SAC_DEFAULT 0x1ffe
|
||||
#define TCCB_SAC_INTRG 0x1fff
|
||||
|
||||
/**
|
||||
* struct tccb_tcah - Transport-Command-Area Header (TCAH)
|
||||
|
8
arch/s390/include/asm/ftrace.h
Normal file
8
arch/s390/include/asm/ftrace.h
Normal file
@@ -0,0 +1,8 @@
|
||||
#ifndef _ASM_S390_FTRACE_H
|
||||
#define _ASM_S390_FTRACE_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
extern void _mcount(void);
|
||||
#endif
|
||||
|
||||
#endif /* _ASM_S390_FTRACE_H */
|
@@ -17,6 +17,7 @@
|
||||
#define CHSC_SCH_ISC 7 /* CHSC subchannels */
|
||||
/* Adapter interrupts. */
|
||||
#define QDIO_AIRQ_ISC IO_SCH_ISC /* I/O subchannel in qdio mode */
|
||||
#define AP_ISC 6 /* adjunct processor (crypto) devices */
|
||||
|
||||
/* Functions for registration of I/O interruption subclasses */
|
||||
void isc_register(unsigned int isc);
|
||||
|
@@ -6,6 +6,7 @@ typedef struct {
|
||||
struct list_head pgtable_list;
|
||||
unsigned long asce_bits;
|
||||
unsigned long asce_limit;
|
||||
unsigned long vdso_base;
|
||||
int noexec;
|
||||
int has_pgste; /* The mmu context has extended page tables */
|
||||
int alloc_pgste; /* cloned contexts will have extended page tables */
|
||||
|
@@ -152,4 +152,6 @@ void arch_alloc_page(struct page *page, int order);
|
||||
#include <asm-generic/memory_model.h>
|
||||
#include <asm-generic/page.h>
|
||||
|
||||
#define __HAVE_ARCH_GATE_AREA 1
|
||||
|
||||
#endif /* _S390_PAGE_H */
|
||||
|
@@ -28,6 +28,8 @@ void disable_noexec(struct mm_struct *, struct task_struct *);
|
||||
|
||||
static inline void clear_table(unsigned long *s, unsigned long val, size_t n)
|
||||
{
|
||||
typedef struct { char _[n]; } addrtype;
|
||||
|
||||
*s = val;
|
||||
n = (n / 256) - 1;
|
||||
asm volatile(
|
||||
@@ -39,7 +41,8 @@ static inline void clear_table(unsigned long *s, unsigned long val, size_t n)
|
||||
"0: mvc 256(256,%0),0(%0)\n"
|
||||
" la %0,256(%0)\n"
|
||||
" brct %1,0b\n"
|
||||
: "+a" (s), "+d" (n));
|
||||
: "+a" (s), "+d" (n), "=m" (*(addrtype *) s)
|
||||
: "m" (*(addrtype *) s));
|
||||
}
|
||||
|
||||
static inline void crst_table_init(unsigned long *crst, unsigned long entry)
|
||||
|
@@ -13,6 +13,7 @@
|
||||
#ifndef __ASM_S390_PROCESSOR_H
|
||||
#define __ASM_S390_PROCESSOR_H
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/ptrace.h>
|
||||
|
||||
#ifdef __KERNEL__
|
||||
@@ -258,7 +259,7 @@ static inline void enabled_wait(void)
|
||||
* Function to drop a processor into disabled wait state
|
||||
*/
|
||||
|
||||
static inline void disabled_wait(unsigned long code)
|
||||
static inline void ATTRIB_NORET disabled_wait(unsigned long code)
|
||||
{
|
||||
unsigned long ctl_buf;
|
||||
psw_t dw_psw;
|
||||
@@ -322,6 +323,7 @@ static inline void disabled_wait(unsigned long code)
|
||||
: "=m" (ctl_buf)
|
||||
: "a" (&dw_psw), "a" (&ctl_buf), "m" (dw_psw) : "cc", "0");
|
||||
#endif /* __s390x__ */
|
||||
while (1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@@ -373,16 +373,16 @@ struct qdio_initialize {
|
||||
#define QDIO_FLAG_SYNC_OUTPUT 0x02
|
||||
#define QDIO_FLAG_PCI_OUT 0x10
|
||||
|
||||
extern int qdio_initialize(struct qdio_initialize *init_data);
|
||||
extern int qdio_allocate(struct qdio_initialize *init_data);
|
||||
extern int qdio_establish(struct qdio_initialize *init_data);
|
||||
extern int qdio_initialize(struct qdio_initialize *);
|
||||
extern int qdio_allocate(struct qdio_initialize *);
|
||||
extern int qdio_establish(struct qdio_initialize *);
|
||||
extern int qdio_activate(struct ccw_device *);
|
||||
|
||||
extern int do_QDIO(struct ccw_device*, unsigned int flags,
|
||||
int q_nr, int qidx, int count);
|
||||
extern int qdio_cleanup(struct ccw_device*, int how);
|
||||
extern int qdio_shutdown(struct ccw_device*, int how);
|
||||
extern int do_QDIO(struct ccw_device *cdev, unsigned int callflags,
|
||||
int q_nr, int bufnr, int count);
|
||||
extern int qdio_cleanup(struct ccw_device*, int);
|
||||
extern int qdio_shutdown(struct ccw_device*, int);
|
||||
extern int qdio_free(struct ccw_device *);
|
||||
extern struct qdio_ssqd_desc *qdio_get_ssqd_desc(struct ccw_device *cdev);
|
||||
extern int qdio_get_ssqd_desc(struct ccw_device *dev, struct qdio_ssqd_desc*);
|
||||
|
||||
#endif /* __QDIO_H__ */
|
||||
|
@@ -61,6 +61,7 @@ typedef enum
|
||||
{
|
||||
ec_schedule=0,
|
||||
ec_call_function,
|
||||
ec_call_function_single,
|
||||
ec_bit_last
|
||||
} ec_bit_sig;
|
||||
|
||||
|
@@ -91,8 +91,9 @@ extern int __cpu_up (unsigned int cpu);
|
||||
extern struct mutex smp_cpu_state_mutex;
|
||||
extern int smp_cpu_polarization[];
|
||||
|
||||
extern int smp_call_function_mask(cpumask_t mask, void (*func)(void *),
|
||||
void *info, int wait);
|
||||
extern void arch_send_call_function_single_ipi(int cpu);
|
||||
extern void arch_send_call_function_ipi(cpumask_t mask);
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_SMP
|
||||
|
@@ -118,4 +118,15 @@ static inline int stsi(void *sysinfo, int fc, int sel1, int sel2)
|
||||
return r0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Service level reporting interface.
|
||||
*/
|
||||
struct service_level {
|
||||
struct list_head list;
|
||||
void (*seq_print)(struct seq_file *, struct service_level *);
|
||||
};
|
||||
|
||||
int register_service_level(struct service_level *);
|
||||
int unregister_service_level(struct service_level *);
|
||||
|
||||
#endif /* __ASM_S390_SYSINFO_H */
|
||||
|
@@ -12,6 +12,7 @@
|
||||
#define __ASM_SYSTEM_H
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/errno.h>
|
||||
#include <asm/types.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/setup.h>
|
||||
@@ -98,13 +99,9 @@ static inline void restore_access_regs(unsigned int *acrs)
|
||||
prev = __switch_to(prev,next); \
|
||||
} while (0)
|
||||
|
||||
#ifdef CONFIG_VIRT_CPU_ACCOUNTING
|
||||
extern void account_vtime(struct task_struct *);
|
||||
extern void account_tick_vtime(struct task_struct *);
|
||||
extern void account_system_vtime(struct task_struct *);
|
||||
#else
|
||||
#define account_vtime(x) do { /* empty */ } while (0)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PFAULT
|
||||
extern void pfault_irq_init(void);
|
||||
@@ -413,8 +410,6 @@ __set_psw_mask(unsigned long mask)
|
||||
#define local_mcck_enable() __set_psw_mask(psw_kernel_bits)
|
||||
#define local_mcck_disable() __set_psw_mask(psw_kernel_bits & ~PSW_MASK_MCHECK)
|
||||
|
||||
int stfle(unsigned long long *list, int doublewords);
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
|
||||
extern void smp_ctl_set_bit(int cr, int bit);
|
||||
@@ -438,6 +433,23 @@ static inline unsigned int stfl(void)
|
||||
return S390_lowcore.stfl_fac_list;
|
||||
}
|
||||
|
||||
static inline int __stfle(unsigned long long *list, int doublewords)
|
||||
{
|
||||
typedef struct { unsigned long long _[doublewords]; } addrtype;
|
||||
register unsigned long __nr asm("0") = doublewords - 1;
|
||||
|
||||
asm volatile(".insn s,0xb2b00000,%0" /* stfle */
|
||||
: "=m" (*(addrtype *) list), "+d" (__nr) : : "cc");
|
||||
return __nr + 1;
|
||||
}
|
||||
|
||||
static inline int stfle(unsigned long long *list, int doublewords)
|
||||
{
|
||||
if (!(stfl() & (1UL << 24)))
|
||||
return -EOPNOTSUPP;
|
||||
return __stfle(list, doublewords);
|
||||
}
|
||||
|
||||
static inline unsigned short stap(void)
|
||||
{
|
||||
unsigned short cpu_address;
|
||||
|
@@ -48,18 +48,9 @@ extern int del_virt_timer(struct vtimer_list *timer);
|
||||
extern void init_cpu_vtimer(void);
|
||||
extern void vtime_init(void);
|
||||
|
||||
#ifdef CONFIG_VIRT_TIMER
|
||||
|
||||
extern void vtime_start_cpu_timer(void);
|
||||
extern void vtime_stop_cpu_timer(void);
|
||||
|
||||
#else
|
||||
|
||||
static inline void vtime_start_cpu_timer(void) { }
|
||||
static inline void vtime_stop_cpu_timer(void) { }
|
||||
|
||||
#endif /* CONFIG_VIRT_TIMER */
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _ASM_S390_TIMER_H */
|
||||
|
39
arch/s390/include/asm/vdso.h
Normal file
39
arch/s390/include/asm/vdso.h
Normal file
@@ -0,0 +1,39 @@
|
||||
#ifndef __S390_VDSO_H__
|
||||
#define __S390_VDSO_H__
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
/* Default link addresses for the vDSOs */
|
||||
#define VDSO32_LBASE 0
|
||||
#define VDSO64_LBASE 0
|
||||
|
||||
#define VDSO_VERSION_STRING LINUX_2.6.26
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
/*
|
||||
* Note about this structure:
|
||||
*
|
||||
* NEVER USE THIS IN USERSPACE CODE DIRECTLY. The layout of this
|
||||
* structure is supposed to be known only to the function in the vdso
|
||||
* itself and may change without notice.
|
||||
*/
|
||||
|
||||
struct vdso_data {
|
||||
__u64 tb_update_count; /* Timebase atomicity ctr 0x00 */
|
||||
__u64 xtime_tod_stamp; /* TOD clock for xtime 0x08 */
|
||||
__u64 xtime_clock_sec; /* Kernel time 0x10 */
|
||||
__u64 xtime_clock_nsec; /* 0x18 */
|
||||
__u64 wtom_clock_sec; /* Wall to monotonic clock 0x20 */
|
||||
__u64 wtom_clock_nsec; /* 0x28 */
|
||||
__u32 tz_minuteswest; /* Minutes west of Greenwich 0x30 */
|
||||
__u32 tz_dsttime; /* Type of dst correction 0x34 */
|
||||
};
|
||||
|
||||
extern struct vdso_data *vdso_data;
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* __S390_VDSO_H__ */
|
Reference in New Issue
Block a user