You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'for-linus' of git://git390.marist.edu/pub/scm/linux-2.6
* 'for-linus' of git://git390.marist.edu/pub/scm/linux-2.6: (72 commits) [S390] 3215/3270 console: remove wrong comment [S390] dasd: remove BKL from extended error reporting code [S390] vmlogrdr: remove BKL [S390] vmur: remove BKL [S390] zcrypt: remove BKL [S390] 3270: remove BKL [S390] vmwatchdog: remove lock_kernel() from open() function [S390] monwriter: remove lock_kernel() from open() function [S390] monreader: remove lock_kernel() from open() function [S390] s390: remove unused nfsd #includes [S390] ftrace: build ftrace.o when CONFIG_FTRACE_SYSCALLS is set for s390 [S390] etr/stp: put correct per cpu variable [S390] tty3270: move keyboard compat ioctls [S390] sclp: improve servicability setting [S390] s390: use change recording override for kernel mapping [S390] MAINTAINERS: Add s390 drivers block [S390] use generic sockios.h header file [S390] use generic termbits.h header file [S390] smp: remove unused typedef and defines [S390] cmm: free pages on hibernate. ...
This commit is contained in:
@@ -3139,6 +3139,7 @@ S: Supported
|
||||
F: Documentation/s390/kvm.txt
|
||||
F: arch/s390/include/asm/kvm*
|
||||
F: arch/s390/kvm/
|
||||
F: drivers/s390/kvm/
|
||||
|
||||
KEXEC
|
||||
M: Eric Biederman <ebiederm@xmission.com>
|
||||
@@ -4553,6 +4554,7 @@ L: linux-s390@vger.kernel.org
|
||||
W: http://www.ibm.com/developerworks/linux/linux390/
|
||||
S: Supported
|
||||
F: arch/s390/
|
||||
F: drivers/s390/
|
||||
|
||||
S390 NETWORK DRIVERS
|
||||
M: Ursula Braun <ursula.braun@de.ibm.com>
|
||||
@@ -4568,6 +4570,7 @@ M: Felix Beck <felix.beck@de.ibm.com>
|
||||
M: Ralph Wuerthner <ralph.wuerthner@de.ibm.com>
|
||||
M: linux390@de.ibm.com
|
||||
L: linux-s390@vger.kernel.org
|
||||
W: http://www.ibm.com/developerworks/linux/linux390/
|
||||
S: Supported
|
||||
F: drivers/s390/crypto/
|
||||
|
||||
|
||||
@@ -220,23 +220,8 @@ config AUDIT_ARCH
|
||||
bool
|
||||
default y
|
||||
|
||||
config S390_SWITCH_AMODE
|
||||
bool "Switch kernel/user addressing modes"
|
||||
help
|
||||
This option allows to switch the addressing modes of kernel and user
|
||||
space. The kernel parameter switch_amode=on will enable this feature,
|
||||
default is disabled. Enabling this (via kernel parameter) on machines
|
||||
earlier than IBM System z9-109 EC/BC will reduce system performance.
|
||||
|
||||
Note that this option will also be selected by selecting the execute
|
||||
protection option below. Enabling the execute protection via the
|
||||
noexec kernel parameter will also switch the addressing modes,
|
||||
independent of the switch_amode kernel parameter.
|
||||
|
||||
|
||||
config S390_EXEC_PROTECT
|
||||
bool "Data execute protection"
|
||||
select S390_SWITCH_AMODE
|
||||
help
|
||||
This option allows to enable a buffer overflow protection for user
|
||||
space programs and it also selects the addressing mode option above.
|
||||
|
||||
@@ -185,7 +185,6 @@ CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_COMPAT=y
|
||||
CONFIG_SYSVIPC_COMPAT=y
|
||||
CONFIG_AUDIT_ARCH=y
|
||||
CONFIG_S390_SWITCH_AMODE=y
|
||||
CONFIG_S390_EXEC_PROTECT=y
|
||||
|
||||
#
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2)
|
||||
|
||||
#define __CS_LOOP(ptr, op_val, op_string) ({ \
|
||||
typeof(ptr->counter) old_val, new_val; \
|
||||
int old_val, new_val; \
|
||||
asm volatile( \
|
||||
" l %0,%2\n" \
|
||||
"0: lr %1,%0\n" \
|
||||
@@ -38,7 +38,7 @@
|
||||
#else /* __GNUC__ */
|
||||
|
||||
#define __CS_LOOP(ptr, op_val, op_string) ({ \
|
||||
typeof(ptr->counter) old_val, new_val; \
|
||||
int old_val, new_val; \
|
||||
asm volatile( \
|
||||
" l %0,0(%3)\n" \
|
||||
"0: lr %1,%0\n" \
|
||||
@@ -143,7 +143,7 @@ static inline int atomic_add_unless(atomic_t *v, int a, int u)
|
||||
#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2)
|
||||
|
||||
#define __CSG_LOOP(ptr, op_val, op_string) ({ \
|
||||
typeof(ptr->counter) old_val, new_val; \
|
||||
long long old_val, new_val; \
|
||||
asm volatile( \
|
||||
" lg %0,%2\n" \
|
||||
"0: lgr %1,%0\n" \
|
||||
@@ -160,7 +160,7 @@ static inline int atomic_add_unless(atomic_t *v, int a, int u)
|
||||
#else /* __GNUC__ */
|
||||
|
||||
#define __CSG_LOOP(ptr, op_val, op_string) ({ \
|
||||
typeof(ptr->counter) old_val, new_val; \
|
||||
long long old_val, new_val; \
|
||||
asm volatile( \
|
||||
" lg %0,0(%3)\n" \
|
||||
"0: lgr %1,%0\n" \
|
||||
|
||||
@@ -142,6 +142,8 @@ struct ccw1;
|
||||
extern int ccw_device_set_options_mask(struct ccw_device *, unsigned long);
|
||||
extern int ccw_device_set_options(struct ccw_device *, unsigned long);
|
||||
extern void ccw_device_clear_options(struct ccw_device *, unsigned long);
|
||||
int ccw_device_is_pathgroup(struct ccw_device *cdev);
|
||||
int ccw_device_is_multipath(struct ccw_device *cdev);
|
||||
|
||||
/* Allow for i/o completion notification after primary interrupt status. */
|
||||
#define CCWDEV_EARLY_NOTIFICATION 0x0001
|
||||
@@ -151,6 +153,8 @@ extern void ccw_device_clear_options(struct ccw_device *, unsigned long);
|
||||
#define CCWDEV_DO_PATHGROUP 0x0004
|
||||
/* Allow forced onlining of boxed devices. */
|
||||
#define CCWDEV_ALLOW_FORCE 0x0008
|
||||
/* Try to use multipath mode. */
|
||||
#define CCWDEV_DO_MULTIPATH 0x0010
|
||||
|
||||
extern int ccw_device_start(struct ccw_device *, struct ccw1 *,
|
||||
unsigned long, __u8, unsigned long);
|
||||
|
||||
@@ -36,7 +36,7 @@ static inline int init_new_context(struct task_struct *tsk,
|
||||
mm->context.has_pgste = 1;
|
||||
mm->context.alloc_pgste = 1;
|
||||
} else {
|
||||
mm->context.noexec = s390_noexec;
|
||||
mm->context.noexec = (user_mode == SECONDARY_SPACE_MODE);
|
||||
mm->context.has_pgste = 0;
|
||||
mm->context.alloc_pgste = 0;
|
||||
}
|
||||
@@ -58,7 +58,7 @@ static inline void update_mm(struct mm_struct *mm, struct task_struct *tsk)
|
||||
pgd_t *pgd = mm->pgd;
|
||||
|
||||
S390_lowcore.user_asce = mm->context.asce_bits | __pa(pgd);
|
||||
if (switch_amode) {
|
||||
if (user_mode != HOME_SPACE_MODE) {
|
||||
/* Load primary space page table origin. */
|
||||
pgd = mm->context.noexec ? get_shadow_table(pgd) : pgd;
|
||||
S390_lowcore.user_exec_asce = mm->context.asce_bits | __pa(pgd);
|
||||
|
||||
@@ -143,7 +143,8 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm)
|
||||
spin_lock_init(&mm->context.list_lock);
|
||||
INIT_LIST_HEAD(&mm->context.crst_list);
|
||||
INIT_LIST_HEAD(&mm->context.pgtable_list);
|
||||
return (pgd_t *) crst_table_alloc(mm, s390_noexec);
|
||||
return (pgd_t *)
|
||||
crst_table_alloc(mm, user_mode == SECONDARY_SPACE_MODE);
|
||||
}
|
||||
#define pgd_free(mm, pgd) crst_table_free(mm, (unsigned long *) pgd)
|
||||
|
||||
|
||||
@@ -169,12 +169,13 @@ extern unsigned long VMALLOC_START;
|
||||
* STL Segment-Table-Length: Segment-table length (STL+1*16 entries -> up to 2048)
|
||||
*
|
||||
* A 64 bit pagetable entry of S390 has following format:
|
||||
* | PFRA |0IP0| OS |
|
||||
* | PFRA |0IPC| OS |
|
||||
* 0000000000111111111122222222223333333333444444444455555555556666
|
||||
* 0123456789012345678901234567890123456789012345678901234567890123
|
||||
*
|
||||
* I Page-Invalid Bit: Page is not available for address-translation
|
||||
* P Page-Protection Bit: Store access not possible for page
|
||||
* C Change-bit override: HW is not required to set change bit
|
||||
*
|
||||
* A 64 bit segmenttable entry of S390 has following format:
|
||||
* | P-table origin | TT
|
||||
@@ -218,6 +219,7 @@ extern unsigned long VMALLOC_START;
|
||||
*/
|
||||
|
||||
/* Hardware bits in the page table entry */
|
||||
#define _PAGE_CO 0x100 /* HW Change-bit override */
|
||||
#define _PAGE_RO 0x200 /* HW read-only bit */
|
||||
#define _PAGE_INVALID 0x400 /* HW invalid bit */
|
||||
|
||||
|
||||
@@ -49,17 +49,12 @@ extern unsigned long memory_end;
|
||||
|
||||
void detect_memory_layout(struct mem_chunk chunk[]);
|
||||
|
||||
#ifdef CONFIG_S390_SWITCH_AMODE
|
||||
extern unsigned int switch_amode;
|
||||
#else
|
||||
#define switch_amode (0)
|
||||
#endif
|
||||
#define PRIMARY_SPACE_MODE 0
|
||||
#define ACCESS_REGISTER_MODE 1
|
||||
#define SECONDARY_SPACE_MODE 2
|
||||
#define HOME_SPACE_MODE 3
|
||||
|
||||
#ifdef CONFIG_S390_EXEC_PROTECT
|
||||
extern unsigned int s390_noexec;
|
||||
#else
|
||||
#define s390_noexec (0)
|
||||
#endif
|
||||
extern unsigned int user_mode;
|
||||
|
||||
/*
|
||||
* Machine features detected in head.S
|
||||
|
||||
+10
-44
@@ -1,57 +1,22 @@
|
||||
/*
|
||||
* include/asm-s390/smp.h
|
||||
*
|
||||
* S390 version
|
||||
* Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
|
||||
* Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com),
|
||||
* Martin Schwidefsky (schwidefsky@de.ibm.com)
|
||||
* Heiko Carstens (heiko.carstens@de.ibm.com)
|
||||
* Copyright IBM Corp. 1999,2009
|
||||
* Author(s): Denis Joseph Barrow,
|
||||
* Martin Schwidefsky <schwidefsky@de.ibm.com>,
|
||||
* Heiko Carstens <heiko.carstens@de.ibm.com>,
|
||||
*/
|
||||
#ifndef __ASM_SMP_H
|
||||
#define __ASM_SMP_H
|
||||
|
||||
#include <linux/threads.h>
|
||||
#include <linux/cpumask.h>
|
||||
#include <linux/bitops.h>
|
||||
#ifdef CONFIG_SMP
|
||||
|
||||
#if defined(__KERNEL__) && defined(CONFIG_SMP) && !defined(__ASSEMBLY__)
|
||||
|
||||
#include <asm/lowcore.h>
|
||||
#include <asm/sigp.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
/*
|
||||
s390 specific smp.c headers
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
int intresting;
|
||||
sigp_ccode ccode;
|
||||
__u32 status;
|
||||
__u16 cpu;
|
||||
} sigp_info;
|
||||
#include <asm/sigp.h>
|
||||
|
||||
extern void machine_restart_smp(char *);
|
||||
extern void machine_halt_smp(void);
|
||||
extern void machine_power_off_smp(void);
|
||||
|
||||
#define NO_PROC_ID 0xFF /* No processor magic marker */
|
||||
|
||||
/*
|
||||
* This magic constant controls our willingness to transfer
|
||||
* a process across CPUs. Such a transfer incurs misses on the L1
|
||||
* cache, and on a P6 or P5 with multiple L2 caches L2 hits. My
|
||||
* gut feeling is this will vary by board in value. For a board
|
||||
* with separate L2 cache it probably depends also on the RSS, and
|
||||
* for a board with shared L2 cache it ought to decay fast as other
|
||||
* processes are run.
|
||||
*/
|
||||
|
||||
#define PROC_CHANGE_PENALTY 20 /* Schedule penalty */
|
||||
|
||||
#define raw_smp_processor_id() (S390_lowcore.cpu_nr)
|
||||
#define cpu_logical_map(cpu) (cpu)
|
||||
|
||||
extern int __cpu_disable (void);
|
||||
extern void __cpu_die (unsigned int cpu);
|
||||
@@ -64,7 +29,9 @@ extern int smp_cpu_polarization[];
|
||||
extern void arch_send_call_function_single_ipi(int cpu);
|
||||
extern void arch_send_call_function_ipi_mask(const struct cpumask *mask);
|
||||
|
||||
#endif
|
||||
extern union save_area *zfcpdump_save_areas[NR_CPUS + 1];
|
||||
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
extern int smp_rescan_cpus(void);
|
||||
@@ -72,5 +39,4 @@ extern int smp_rescan_cpus(void);
|
||||
static inline int smp_rescan_cpus(void) { return 0; }
|
||||
#endif
|
||||
|
||||
extern union save_area *zfcpdump_save_areas[NR_CPUS + 1];
|
||||
#endif
|
||||
#endif /* __ASM_SMP_H */
|
||||
|
||||
@@ -1,21 +1,6 @@
|
||||
/*
|
||||
* include/asm-s390/sockios.h
|
||||
*
|
||||
* S390 version
|
||||
*
|
||||
* Derived from "include/asm-i386/sockios.h"
|
||||
*/
|
||||
#ifndef _ASM_S390_SOCKIOS_H
|
||||
#define _ASM_S390_SOCKIOS_H
|
||||
|
||||
#ifndef __ARCH_S390_SOCKIOS__
|
||||
#define __ARCH_S390_SOCKIOS__
|
||||
|
||||
/* Socket-level I/O control calls. */
|
||||
#define FIOSETOWN 0x8901
|
||||
#define SIOCSPGRP 0x8902
|
||||
#define FIOGETOWN 0x8903
|
||||
#define SIOCGPGRP 0x8904
|
||||
#define SIOCATMARK 0x8905
|
||||
#define SIOCGSTAMP 0x8906 /* Get stamp (timeval) */
|
||||
#define SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */
|
||||
#include <asm-generic/sockios.h>
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,206 +1,6 @@
|
||||
/*
|
||||
* include/asm-s390/termbits.h
|
||||
*
|
||||
* S390 version
|
||||
*
|
||||
* Derived from "include/asm-i386/termbits.h"
|
||||
*/
|
||||
#ifndef _ASM_S390_TERMBITS_H
|
||||
#define _ASM_S390_TERMBITS_H
|
||||
|
||||
#ifndef __ARCH_S390_TERMBITS_H__
|
||||
#define __ARCH_S390_TERMBITS_H__
|
||||
|
||||
#include <linux/posix_types.h>
|
||||
|
||||
typedef unsigned char cc_t;
|
||||
typedef unsigned int speed_t;
|
||||
typedef unsigned int tcflag_t;
|
||||
|
||||
#define NCCS 19
|
||||
struct termios {
|
||||
tcflag_t c_iflag; /* input mode flags */
|
||||
tcflag_t c_oflag; /* output mode flags */
|
||||
tcflag_t c_cflag; /* control mode flags */
|
||||
tcflag_t c_lflag; /* local mode flags */
|
||||
cc_t c_line; /* line discipline */
|
||||
cc_t c_cc[NCCS]; /* control characters */
|
||||
};
|
||||
|
||||
struct termios2 {
|
||||
tcflag_t c_iflag; /* input mode flags */
|
||||
tcflag_t c_oflag; /* output mode flags */
|
||||
tcflag_t c_cflag; /* control mode flags */
|
||||
tcflag_t c_lflag; /* local mode flags */
|
||||
cc_t c_line; /* line discipline */
|
||||
cc_t c_cc[NCCS]; /* control characters */
|
||||
speed_t c_ispeed; /* input speed */
|
||||
speed_t c_ospeed; /* output speed */
|
||||
};
|
||||
|
||||
struct ktermios {
|
||||
tcflag_t c_iflag; /* input mode flags */
|
||||
tcflag_t c_oflag; /* output mode flags */
|
||||
tcflag_t c_cflag; /* control mode flags */
|
||||
tcflag_t c_lflag; /* local mode flags */
|
||||
cc_t c_line; /* line discipline */
|
||||
cc_t c_cc[NCCS]; /* control characters */
|
||||
speed_t c_ispeed; /* input speed */
|
||||
speed_t c_ospeed; /* output speed */
|
||||
};
|
||||
|
||||
/* c_cc characters */
|
||||
#define VINTR 0
|
||||
#define VQUIT 1
|
||||
#define VERASE 2
|
||||
#define VKILL 3
|
||||
#define VEOF 4
|
||||
#define VTIME 5
|
||||
#define VMIN 6
|
||||
#define VSWTC 7
|
||||
#define VSTART 8
|
||||
#define VSTOP 9
|
||||
#define VSUSP 10
|
||||
#define VEOL 11
|
||||
#define VREPRINT 12
|
||||
#define VDISCARD 13
|
||||
#define VWERASE 14
|
||||
#define VLNEXT 15
|
||||
#define VEOL2 16
|
||||
|
||||
/* c_iflag bits */
|
||||
#define IGNBRK 0000001
|
||||
#define BRKINT 0000002
|
||||
#define IGNPAR 0000004
|
||||
#define PARMRK 0000010
|
||||
#define INPCK 0000020
|
||||
#define ISTRIP 0000040
|
||||
#define INLCR 0000100
|
||||
#define IGNCR 0000200
|
||||
#define ICRNL 0000400
|
||||
#define IUCLC 0001000
|
||||
#define IXON 0002000
|
||||
#define IXANY 0004000
|
||||
#define IXOFF 0010000
|
||||
#define IMAXBEL 0020000
|
||||
#define IUTF8 0040000
|
||||
|
||||
/* c_oflag bits */
|
||||
#define OPOST 0000001
|
||||
#define OLCUC 0000002
|
||||
#define ONLCR 0000004
|
||||
#define OCRNL 0000010
|
||||
#define ONOCR 0000020
|
||||
#define ONLRET 0000040
|
||||
#define OFILL 0000100
|
||||
#define OFDEL 0000200
|
||||
#define NLDLY 0000400
|
||||
#define NL0 0000000
|
||||
#define NL1 0000400
|
||||
#define CRDLY 0003000
|
||||
#define CR0 0000000
|
||||
#define CR1 0001000
|
||||
#define CR2 0002000
|
||||
#define CR3 0003000
|
||||
#define TABDLY 0014000
|
||||
#define TAB0 0000000
|
||||
#define TAB1 0004000
|
||||
#define TAB2 0010000
|
||||
#define TAB3 0014000
|
||||
#define XTABS 0014000
|
||||
#define BSDLY 0020000
|
||||
#define BS0 0000000
|
||||
#define BS1 0020000
|
||||
#define VTDLY 0040000
|
||||
#define VT0 0000000
|
||||
#define VT1 0040000
|
||||
#define FFDLY 0100000
|
||||
#define FF0 0000000
|
||||
#define FF1 0100000
|
||||
|
||||
/* c_cflag bit meaning */
|
||||
#define CBAUD 0010017
|
||||
#define B0 0000000 /* hang up */
|
||||
#define B50 0000001
|
||||
#define B75 0000002
|
||||
#define B110 0000003
|
||||
#define B134 0000004
|
||||
#define B150 0000005
|
||||
#define B200 0000006
|
||||
#define B300 0000007
|
||||
#define B600 0000010
|
||||
#define B1200 0000011
|
||||
#define B1800 0000012
|
||||
#define B2400 0000013
|
||||
#define B4800 0000014
|
||||
#define B9600 0000015
|
||||
#define B19200 0000016
|
||||
#define B38400 0000017
|
||||
#define EXTA B19200
|
||||
#define EXTB B38400
|
||||
#define CSIZE 0000060
|
||||
#define CS5 0000000
|
||||
#define CS6 0000020
|
||||
#define CS7 0000040
|
||||
#define CS8 0000060
|
||||
#define CSTOPB 0000100
|
||||
#define CREAD 0000200
|
||||
#define PARENB 0000400
|
||||
#define PARODD 0001000
|
||||
#define HUPCL 0002000
|
||||
#define CLOCAL 0004000
|
||||
#define CBAUDEX 0010000
|
||||
#define BOTHER 0010000
|
||||
#define B57600 0010001
|
||||
#define B115200 0010002
|
||||
#define B230400 0010003
|
||||
#define B460800 0010004
|
||||
#define B500000 0010005
|
||||
#define B576000 0010006
|
||||
#define B921600 0010007
|
||||
#define B1000000 0010010
|
||||
#define B1152000 0010011
|
||||
#define B1500000 0010012
|
||||
#define B2000000 0010013
|
||||
#define B2500000 0010014
|
||||
#define B3000000 0010015
|
||||
#define B3500000 0010016
|
||||
#define B4000000 0010017
|
||||
#define CIBAUD 002003600000 /* input baud rate */
|
||||
#define CMSPAR 010000000000 /* mark or space (stick) parity */
|
||||
#define CRTSCTS 020000000000 /* flow control */
|
||||
|
||||
#define IBSHIFT 16 /* Shift from CBAUD to CIBAUD */
|
||||
|
||||
/* c_lflag bits */
|
||||
#define ISIG 0000001
|
||||
#define ICANON 0000002
|
||||
#define XCASE 0000004
|
||||
#define ECHO 0000010
|
||||
#define ECHOE 0000020
|
||||
#define ECHOK 0000040
|
||||
#define ECHONL 0000100
|
||||
#define NOFLSH 0000200
|
||||
#define TOSTOP 0000400
|
||||
#define ECHOCTL 0001000
|
||||
#define ECHOPRT 0002000
|
||||
#define ECHOKE 0004000
|
||||
#define FLUSHO 0010000
|
||||
#define PENDIN 0040000
|
||||
#define IEXTEN 0100000
|
||||
|
||||
/* tcflow() and TCXONC use these */
|
||||
#define TCOOFF 0
|
||||
#define TCOON 1
|
||||
#define TCIOFF 2
|
||||
#define TCION 3
|
||||
|
||||
/* tcflush() and TCFLSH use these */
|
||||
#define TCIFLUSH 0
|
||||
#define TCOFLUSH 1
|
||||
#define TCIOFLUSH 2
|
||||
|
||||
/* tcsetattr uses these */
|
||||
#define TCSANOW 0
|
||||
#define TCSADRAIN 1
|
||||
#define TCSAFLUSH 2
|
||||
#include <asm-generic/termbits.h>
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
/*
|
||||
* File...........: linux/include/asm/todclk.h
|
||||
* Author(s)......: Holger Smolinski <Holger.Smolinski@de.ibm.com>
|
||||
* Bugreports.to..: <Linux390@de.ibm.com>
|
||||
* (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000
|
||||
*
|
||||
* History of changes (starts July 2000)
|
||||
*/
|
||||
|
||||
#ifndef __ASM_TODCLK_H
|
||||
#define __ASM_TODCLK_H
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#define TOD_uSEC (0x1000ULL)
|
||||
#define TOD_mSEC (1000 * TOD_uSEC)
|
||||
#define TOD_SEC (1000 * TOD_mSEC)
|
||||
#define TOD_MIN (60 * TOD_SEC)
|
||||
#define TOD_HOUR (60 * TOD_MIN)
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -93,6 +93,8 @@ extern struct uaccess_ops uaccess_mvcos;
|
||||
extern struct uaccess_ops uaccess_mvcos_switch;
|
||||
extern struct uaccess_ops uaccess_pt;
|
||||
|
||||
extern int __handle_fault(unsigned long, unsigned long, int);
|
||||
|
||||
static inline int __put_user_fn(size_t size, void __user *ptr, void *x)
|
||||
{
|
||||
size = uaccess.copy_to_user_small(size, ptr, x);
|
||||
|
||||
@@ -44,6 +44,7 @@ obj-$(CONFIG_KPROBES) += kprobes.o
|
||||
obj-$(CONFIG_FUNCTION_TRACER) += $(if $(CONFIG_64BIT),mcount64.o,mcount.o)
|
||||
obj-$(CONFIG_DYNAMIC_FTRACE) += ftrace.o
|
||||
obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o
|
||||
obj-$(CONFIG_FTRACE_SYSCALLS) += ftrace.o
|
||||
|
||||
# Kexec part
|
||||
S390_KEXEC_OBJS := machine_kexec.o crash.o
|
||||
|
||||
@@ -31,14 +31,8 @@
|
||||
#include <linux/shm.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/uio.h>
|
||||
#include <linux/nfs_fs.h>
|
||||
#include <linux/quota.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/sunrpc/svc.h>
|
||||
#include <linux/nfsd/nfsd.h>
|
||||
#include <linux/nfsd/cache.h>
|
||||
#include <linux/nfsd/xdr.h>
|
||||
#include <linux/nfsd/syscall.h>
|
||||
#include <linux/poll.h>
|
||||
#include <linux/personality.h>
|
||||
#include <linux/stat.h>
|
||||
|
||||
@@ -4,10 +4,6 @@
|
||||
#include <linux/compat.h>
|
||||
#include <linux/socket.h>
|
||||
#include <linux/syscalls.h>
|
||||
#include <linux/nfs_fs.h>
|
||||
#include <linux/sunrpc/svc.h>
|
||||
#include <linux/nfsd/nfsd.h>
|
||||
#include <linux/nfsd/export.h>
|
||||
|
||||
/* Macro that masks the high order bit of an 32 bit pointer and converts it*/
|
||||
/* to a 64 bit pointer */
|
||||
|
||||
@@ -83,6 +83,8 @@ startup_continue:
|
||||
slr %r0,%r0 # set cpuid to zero
|
||||
sigp %r1,%r0,0x12 # switch to esame mode
|
||||
sam64 # switch to 64 bit mode
|
||||
llgfr %r13,%r13 # clear high-order half of base reg
|
||||
lmh %r0,%r15,.Lzero64-.LPG1(%r13) # clear high-order half
|
||||
lctlg %c0,%c15,.Lctl-.LPG1(%r13) # load control registers
|
||||
lg %r12,.Lparmaddr-.LPG1(%r13) # pointer to parameter area
|
||||
# move IPL device to lowcore
|
||||
@@ -127,6 +129,7 @@ startup_continue:
|
||||
.L4malign:.quad 0xffffffffffc00000
|
||||
.Lscan2g:.quad 0x80000000 + 0x20000 - 8 # 2GB + 128K - 8
|
||||
.Lnop: .long 0x07000700
|
||||
.Lzero64:.fill 16,4,0x0
|
||||
#ifdef CONFIG_ZFCPDUMP
|
||||
.Lcurrent_cpu:
|
||||
.long 0x0
|
||||
|
||||
+20
-16
@@ -305,9 +305,8 @@ static int __init early_parse_mem(char *p)
|
||||
}
|
||||
early_param("mem", early_parse_mem);
|
||||
|
||||
#ifdef CONFIG_S390_SWITCH_AMODE
|
||||
unsigned int switch_amode = 0;
|
||||
EXPORT_SYMBOL_GPL(switch_amode);
|
||||
unsigned int user_mode = HOME_SPACE_MODE;
|
||||
EXPORT_SYMBOL_GPL(user_mode);
|
||||
|
||||
static int set_amode_and_uaccess(unsigned long user_amode,
|
||||
unsigned long user32_amode)
|
||||
@@ -340,23 +339,29 @@ static int set_amode_and_uaccess(unsigned long user_amode,
|
||||
*/
|
||||
static int __init early_parse_switch_amode(char *p)
|
||||
{
|
||||
switch_amode = 1;
|
||||
if (user_mode != SECONDARY_SPACE_MODE)
|
||||
user_mode = PRIMARY_SPACE_MODE;
|
||||
return 0;
|
||||
}
|
||||
early_param("switch_amode", early_parse_switch_amode);
|
||||
|
||||
#else /* CONFIG_S390_SWITCH_AMODE */
|
||||
static inline int set_amode_and_uaccess(unsigned long user_amode,
|
||||
unsigned long user32_amode)
|
||||
static int __init early_parse_user_mode(char *p)
|
||||
{
|
||||
if (p && strcmp(p, "primary") == 0)
|
||||
user_mode = PRIMARY_SPACE_MODE;
|
||||
#ifdef CONFIG_S390_EXEC_PROTECT
|
||||
else if (p && strcmp(p, "secondary") == 0)
|
||||
user_mode = SECONDARY_SPACE_MODE;
|
||||
#endif
|
||||
else if (!p || strcmp(p, "home") == 0)
|
||||
user_mode = HOME_SPACE_MODE;
|
||||
else
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_S390_SWITCH_AMODE */
|
||||
early_param("user_mode", early_parse_user_mode);
|
||||
|
||||
#ifdef CONFIG_S390_EXEC_PROTECT
|
||||
unsigned int s390_noexec = 0;
|
||||
EXPORT_SYMBOL_GPL(s390_noexec);
|
||||
|
||||
/*
|
||||
* Enable execute protection?
|
||||
*/
|
||||
@@ -364,8 +369,7 @@ static int __init early_parse_noexec(char *p)
|
||||
{
|
||||
if (!strncmp(p, "off", 3))
|
||||
return 0;
|
||||
switch_amode = 1;
|
||||
s390_noexec = 1;
|
||||
user_mode = SECONDARY_SPACE_MODE;
|
||||
return 0;
|
||||
}
|
||||
early_param("noexec", early_parse_noexec);
|
||||
@@ -373,7 +377,7 @@ early_param("noexec", early_parse_noexec);
|
||||
|
||||
static void setup_addressing_mode(void)
|
||||
{
|
||||
if (s390_noexec) {
|
||||
if (user_mode == SECONDARY_SPACE_MODE) {
|
||||
if (set_amode_and_uaccess(PSW_ASC_SECONDARY,
|
||||
PSW32_ASC_SECONDARY))
|
||||
pr_info("Execute protection active, "
|
||||
@@ -381,7 +385,7 @@ static void setup_addressing_mode(void)
|
||||
else
|
||||
pr_info("Execute protection active, "
|
||||
"mvcos not available\n");
|
||||
} else if (switch_amode) {
|
||||
} else if (user_mode == PRIMARY_SPACE_MODE) {
|
||||
if (set_amode_and_uaccess(PSW_ASC_PRIMARY, PSW32_ASC_PRIMARY))
|
||||
pr_info("Address spaces switched, "
|
||||
"mvcos available\n");
|
||||
@@ -411,7 +415,7 @@ setup_lowcore(void)
|
||||
lc->restart_psw.mask = PSW_BASE_BITS | PSW_DEFAULT_KEY;
|
||||
lc->restart_psw.addr =
|
||||
PSW_ADDR_AMODE | (unsigned long) restart_int_handler;
|
||||
if (switch_amode)
|
||||
if (user_mode != HOME_SPACE_MODE)
|
||||
lc->restart_psw.mask |= PSW_ASC_HOME;
|
||||
lc->external_new_psw.mask = psw_kernel_bits;
|
||||
lc->external_new_psw.addr =
|
||||
|
||||
@@ -335,7 +335,7 @@ int get_sync_clock(unsigned long long *clock)
|
||||
sw0 = atomic_read(sw_ptr);
|
||||
*clock = get_clock();
|
||||
sw1 = atomic_read(sw_ptr);
|
||||
put_cpu_var(clock_sync_sync);
|
||||
put_cpu_var(clock_sync_word);
|
||||
if (sw0 == sw1 && (sw0 & 0x80000000U))
|
||||
/* Success: time is in sync. */
|
||||
return 0;
|
||||
@@ -385,7 +385,7 @@ static inline int check_sync_clock(void)
|
||||
|
||||
sw_ptr = &get_cpu_var(clock_sync_word);
|
||||
rc = (atomic_read(sw_ptr) & 0x80000000U) != 0;
|
||||
put_cpu_var(clock_sync_sync);
|
||||
put_cpu_var(clock_sync_word);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user