s390 patches for 3.5 merge window
Subsystems (9)
Hi Linus,
please pull from 'for-linus' branch of
git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux.git for-linus
to receive the s390 patches for the 3.5 merge window. Just a random collection of bug-fixes and cleanups, nothing new in this merge request.
Christian Borntraeger (1):
s390/kvm: bad rss-counter state
Gerald Schaefer (1):
s390/hugepages: clear page table for sw large page emulation
Heiko Carstens (19):
s390/compat: select COMPAT_BINFMT_ELF only if BINFMT_ELF is set s390/crypto des: add missing select statement s390/smp: get rid of compile warning
s390/crash dump: add missing SMP dependency s390/tape: remove tape block leftovers
s390/ipl: remove builtin tape ipl code
s390: add various .gitignore files.
s390/time: always use stckf instead of stck if available s390/pfault: fix task state race
s390/pfault: always search for task with reported pid s390/pfault: use __set_task_state
s390/pfault: add sanity check
s390/entry64: avoid SPP code duplication s390/Kconfig: add HAVE_MARCH_[ARCH]_FEATURES Kconfig symbols s390/time: simply Kconfig dependency
s390/memory hotplug: initialize storage keys s390/claw: remove "eieio" calls
s390/barrier: cleanup barrier functions s390/barrier: make use of fast-bcr facility
Holger Dengler (2):
s390/ap: move receive callback to message struct s390/ap: Fix wrong or missing comments
Jan Glauber (1):
s390/qdio: Cleanup error handling to drivers
Martin Schwidefsky (5):
s390: remove superfluous tpi from wait_cons_dev
s390: make sie intercept independent of thread_info
s390: replace TIF_SIE with PF_VCPU
s390: remove dead code from signal handler
s390: fix race on TIF_MCCK_PENDING
Michael Holzheu (2):
s390: initialize backchain for ext_int_handler()
s390: allow absolute memory access for /dev/mem
Sebastian Ott (13):
s390/ccwgroup: introduce ccwgroup_create_dev s390/ccwgroup: exploit ccwdev_by_dev_id
s390/ctcm: switch to ccwgroup_create_dev
s390/lcs: switch to ccwgroup_create_dev
s390/claw: switch to ccwgroup_create_dev
s390/qeth: switch to ccwgroup_create_dev
s390/qeth: stop using struct ccwgroup driver for discipline callbacks s390/ccwgroup: remove ccwgroup_create_from_string s390/ctc: cleanup drv attr usage
s390/lcs: cleanup drv attr usage
s390/claw: cleanup drv attr usage
s390/qeth: cleanup drv attr usage
s390/qeth: reshuffle initialization
Stefan Haberland (1):
s390/dasd: re-prioritize partition detection message
Steffen Maier (1):
s390/qdio: remove duplicate defines of data div bits
arch/s390/Kconfig | 55 +++++------ arch/s390/boot/.gitignore | 2 + arch/s390/boot/compressed/.gitignore | 3 + arch/s390/defconfig | 1 - arch/s390/include/asm/barrier.h | 37 +++---- arch/s390/include/asm/ccwgroup.h | 14 +-- arch/s390/include/asm/io.h | 7 +- arch/s390/include/asm/qdio.h | 19 ++-- arch/s390/include/asm/setup.h | 3 - arch/s390/include/asm/thread_info.h | 2 - arch/s390/include/asm/timex.h | 17 +--- arch/s390/kernel/.gitignore | 1 + arch/s390/kernel/compat_signal.c | 7 -- arch/s390/kernel/early.c | 2 - arch/s390/kernel/entry.S | 21 ++-- arch/s390/kernel/entry64.S | 51 +++++----- arch/s390/kernel/head.S | 123 ----------------------- arch/s390/kernel/signal.c | 16 --- arch/s390/kernel/smp.c | 4 + arch/s390/kernel/vdso32/.gitignore | 1 + arch/s390/kernel/vdso64/.gitignore | 1 + arch/s390/mm/fault.c | 45 +++++---- arch/s390/mm/hugetlbpage.c | 2 + arch/s390/mm/maccess.c | 67 +++++++++++++ arch/s390/mm/pgtable.c | 2 + block/partitions/ibm.c | 2 +- drivers/crypto/Kconfig | 1 + drivers/s390/char/sclp_cmd.c | 12 ++- drivers/s390/char/tape.h | 43 -------- drivers/s390/char/tape_34xx.c | 136 -------------------------- drivers/s390/char/tape_3590.c | 105 -------------------- drivers/s390/char/tape_char.c | 13 --- drivers/s390/char/tape_core.c | 16 +-- drivers/s390/cio/ccwgroup.c | 112 ++++++++------------- drivers/s390/cio/cio.c | 73 ++++---------- drivers/s390/cio/device.c | 13 ++- drivers/s390/cio/device.h | 1 + drivers/s390/cio/qdio_main.c | 47 ++++----- drivers/s390/crypto/ap_bus.c | 24 +++-- drivers/s390/crypto/ap_bus.h | 7 +- drivers/s390/crypto/zcrypt_cex2a.c | 3 +- drivers/s390/crypto/zcrypt_pcica.c | 3 +- drivers/s390/crypto/zcrypt_pcicc.c | 3 +- drivers/s390/crypto/zcrypt_pcixcc.c | 5 +- drivers/s390/net/claw.c | 165 ++++++++++++------------------- drivers/s390/net/ctcm_main.c | 52 +++------- drivers/s390/net/ctcm_main.h | 8 +- drivers/s390/net/ctcm_sysfs.c | 37 ++----- drivers/s390/net/lcs.c | 52 +++++----- drivers/s390/net/qeth_core.h | 24 +++-- drivers/s390/net/qeth_core_main.c | 178 +++++++++++++++------------------- drivers/s390/net/qeth_core_sys.c | 49 +++------- drivers/s390/net/qeth_l2_main.c | 16 ++- drivers/s390/net/qeth_l3_main.c | 16 ++- 54 files changed, 592 insertions(+), 1127 deletions(-) create mode 100644 arch/s390/boot/.gitignore create mode 100644 arch/s390/boot/compressed/.gitignore create mode 100644 arch/s390/kernel/.gitignore create mode 100644 arch/s390/kernel/vdso32/.gitignore create mode 100644 arch/s390/kernel/vdso64/.gitignore
arch/s390/Kconfig +26 -29
@@ -217,7 +217,7 @@ config COMPAT def_bool y prompt "Kernel support for 31 bit emulation" depends on 64BIT - select COMPAT_BINFMT_ELF + select COMPAT_BINFMT_ELF if BINFMT_ELF select ARCH_WANT_OLD_COMPAT_IPC help Select this option if you want to enable your system kernel to
@@ -234,6 +234,25 @@ config KEYS_COMPAT config AUDIT_ARCH def_bool y +config HAVE_MARCH_Z900_FEATURES + def_bool n + +config HAVE_MARCH_Z990_FEATURES + def_bool n + select HAVE_MARCH_Z900_FEATURES + +config HAVE_MARCH_Z9_109_FEATURES + def_bool n + select HAVE_MARCH_Z990_FEATURES + +config HAVE_MARCH_Z10_FEATURES + def_bool n + select HAVE_MARCH_Z9_109_FEATURES + +config HAVE_MARCH_Z196_FEATURES + def_bool n + select HAVE_MARCH_Z10_FEATURES + comment "Code generation options" choice
@@ -249,6 +268,7 @@ config MARCH_G5 config MARCH_Z900 bool "IBM zSeries model z800 and z900" + select HAVE_MARCH_Z900_FEATURES if 64BIT help Select this to enable optimizations for model z800/z900 (2064 and 2066 series). This will enable some optimizations that are not
@@ -256,6 +276,7 @@ config MARCH_Z900 config MARCH_Z990 bool "IBM zSeries model z890 and z990" + select HAVE_MARCH_Z990_FEATURES if 64BIT help Select this to enable optimizations for model z890/z990 (2084 and 2086 series). The kernel will be slightly faster but will not work
@@ -263,6 +284,7 @@ config MARCH_Z990 config MARCH_Z9_109 bool "IBM System z9" + select HAVE_MARCH_Z9_109_FEATURES if 64BIT help Select this to enable optimizations for IBM System z9 (2094 and 2096 series). The kernel will be slightly faster but will not work
@@ -270,6 +292,7 @@ config MARCH_Z9_109 config MARCH_Z10 bool "IBM System z10" + select HAVE_MARCH_Z10_FEATURES if 64BIT help Select this to enable optimizations for IBM System z10 (2097 and 2098 series). The kernel will be slightly faster but will not work
@@ -277,6 +300,7 @@ config MARCH_Z10 config MARCH_Z196 bool "IBM zEnterprise 114 and 196" + select HAVE_MARCH_Z196_FEATURES if 64BIT help Select this to enable optimizations for IBM zEnterprise 114 and 196 (2818 and 2817 series). The kernel will be slightly faster but will
@@ -406,33 +430,6 @@ config CHSC_SCH comment "Misc" -config IPL - def_bool y - prompt "Builtin IPL record support" - help - If you want to use the produced kernel to IPL directly from a - device, you have to merge a bootsector specific to the device - into the first bytes of the kernel. You will have to select the - IPL device. - -choice - prompt "IPL method generated into head.S" - depends on IPL - default IPL_VM - help - Select "tape" if you want to IPL the image from a Tape. - - Select "vm_reader" if you are running under VM/ESA and want - to IPL the image from the emulated card reader. - -config IPL_TAPE - bool "tape" - -config IPL_VM - bool "vm_reader" - -endchoice - source "fs/Kconfig.binfmt" config FORCE_MAX_ZONEORDER
@@ -569,7 +566,7 @@ config KEXEC config CRASH_DUMP bool "kernel crash dumps" - depends on 64BIT + depends on 64BIT && SMP select KEXEC help Generate crash dump after being started by kexec.
arch/s390/boot/.gitignore new file +2 -0
@@ -0,0 +1,2 @@ +image +bzImage
arch/s390/boot/compressed/.gitignore new file +3 -0
@@ -0,0 +1,3 @@ +sizes.h +vmlinux +vmlinux.lds
arch/s390/defconfig +0 -1
@@ -155,7 +155,6 @@ CONFIG_CRYPTO_BLOWFISH=m CONFIG_CRYPTO_CAMELLIA=m CONFIG_CRYPTO_CAST5=m CONFIG_CRYPTO_CAST6=m -CONFIG_CRYPTO_DES=m CONFIG_CRYPTO_FCRYPT=m CONFIG_CRYPTO_KHAZAD=m CONFIG_CRYPTO_SALSA20=m
arch/s390/include/asm/barrier.h +20 -17
@@ -11,25 +11,28 @@* Force strict CPU ordering. * And yes, this is required on UP too when we're talking * to devices. -* -* This is very similar to the ppc eieio/sync instruction in that is -* does a checkpoint syncronisation & makes sure that -* all memory ops have completed wrt other CPU's ( see 7-15 POP DJB ). */ -#define eieio () asm volatile("bcr 15,0" : : : "memory") -#define SYNC_OTHER_CORES (x) eieio() -#define mb () eieio() -#define rmb () eieio() -#define wmb () eieio() -#define read_barrier_depends () do { } while(0) -#define smp_mb () mb() -#define smp_rmb () rmb() -#define smp_wmb () wmb() -#define smp_read_barrier_depends () read_barrier_depends() -#define smp_mb__before_clear_bit () smp_mb() -#define smp_mb__after_clear_bit () smp_mb() +static inline void mb (void ) +{ +#ifdef CONFIG_HAVE_MARCH_Z196_FEATURES +/* Fast-BCR without checkpoint synchronization */ + asmvolatile ("bcr 14,0" : : :"memory" ); +#else + asmvolatile ("bcr 15,0" : : :"memory" ); +#endif +} + +#define rmb () mb() +#define wmb () mb() +#define read_barrier_depends () do { } while(0) +#define smp_mb () mb() +#define smp_rmb () rmb() +#define smp_wmb () wmb() +#define smp_read_barrier_depends () read_barrier_depends() +#define smp_mb__before_clear_bit () smp_mb() +#define smp_mb__after_clear_bit () smp_mb() -#define set_mb (var, value) do { var = value; mb(); } while (0) +#define set_mb (var, value) do { var = value; mb(); } while (0)#endif /* __ASM_BARRIER_H */
arch/s390/include/asm/ccwgroup.h +4 -10
@@ -29,9 +29,7 @@ struct ccwgroup_device {/** * struct ccwgroup_driver - driver for ccw group devices -* @max_slaves: maximum number of slave devices -* @driver_id: unique id -* @probe: function called on probe +* @setup: function called during device creation to setup the device * @remove: function called on remove * @set_online: function called when device is set online * @set_offline: function called when device is set offline
@@ -44,10 +42,7 @@ struct ccwgroup_device {* @driver: embedded driver structure */ struct ccwgroup_driver { -int max_slaves; -unsigned long driver_id; - -int (*probe) (struct ccwgroup_device *); +int (*setup) (struct ccwgroup_device *);void (*remove) (struct ccwgroup_device *);int (*set_online) (struct ccwgroup_device *);int (*set_offline) (struct ccwgroup_device *);
@@ -63,9 +58,8 @@ struct ccwgroup_driver {extern int ccwgroup_driver_register (struct ccwgroup_driver *cdriver);extern void ccwgroup_driver_unregister (struct ccwgroup_driver *cdriver); -int ccwgroup_create_from_string (struct device *root,unsigned int creator_id, -struct ccw_driver *cdrv,int num_devices, -const char *buf); +int ccwgroup_create_dev (struct device *root,struct ccwgroup_driver *gdrv, +int num_devices,const char *buf);extern int ccwgroup_probe_ccwdev (struct ccw_device *cdev);extern void ccwgroup_remove_ccwdev (struct ccw_device *cdev);
arch/s390/include/asm/io.h +2 -5
@@ -38,11 +38,8 @@ static inline void * phys_to_virt(unsigned long address)return (void *) address; } -/* -* Convert a physical pointer to a virtual kernel pointer for /dev/mem -* access -*/ -#define xlate_dev_mem_ptr (p) __va(p) +void *xlate_dev_mem_ptr (unsigned long phys); +void unxlate_dev_mem_ptr (unsigned long phys,void *addr);/* * Convert a virtual cached pointer to an uncached pointer
arch/s390/include/asm/qdio.h +9 -10
@@ -258,11 +258,6 @@ struct slsb {u8 val[QDIO_MAX_BUFFERS_PER_Q ]; } __attribute__ ((packed, aligned(256))); -#define CHSC_AC2_MULTI_BUFFER_AVAILABLE 0x0080 -#define CHSC_AC2_MULTI_BUFFER_ENABLED 0x0040 -#define CHSC_AC2_DATA_DIV_AVAILABLE 0x0010 -#define CHSC_AC2_DATA_DIV_ENABLED 0x0002 -/** * struct qdio_outbuf_state - SBAL related asynchronous operation information * (for communication with upper layer programs)
@@ -293,6 +288,8 @@ struct qdio_outbuf_state {#define AC1_SC_QEBSM_AVAILABLE 0x02/* available for subchannel */ #define AC1_SC_QEBSM_ENABLED 0x01/* enabled for subchannel */ +#define CHSC_AC2_MULTI_BUFFER_AVAILABLE 0x0080 +#define CHSC_AC2_MULTI_BUFFER_ENABLED 0x0040#define CHSC_AC2_DATA_DIV_AVAILABLE 0x0010#define CHSC_AC2_DATA_DIV_ENABLED 0x0002
@@ -328,11 +325,13 @@ typedef void qdio_handler_t(struct ccw_device *, unsigned int, int, int, int, unsigned long);/* qdio errors reported to the upper-layer program */ -#define QDIO_ERROR_SIGA_TARGET 0x02 -#define QDIO_ERROR_SIGA_ACCESS_EXCEPTION 0x10 -#define QDIO_ERROR_SIGA_BUSY 0x20 -#define QDIO_ERROR_ACTIVATE_CHECK_CONDITION 0x40 -#define QDIO_ERROR_SLSB_STATE 0x80 +#define QDIO_ERROR_ACTIVATE 0x0001 +#define QDIO_ERROR_GET_BUF_STATE 0x0002 +#define QDIO_ERROR_SET_BUF_STATE 0x0004 +#define QDIO_ERROR_SLSB_STATE 0x0100 + +#define QDIO_ERROR_FATAL 0x00ff +#define QDIO_ERROR_TEMPORARY 0xff00/* for qdio_cleanup */ #define QDIO_FLAG_CLEANUP_USING_CLEAR 0x01
arch/s390/include/asm/setup.h +0 -3
@@ -82,7 +82,6 @@ extern unsigned int user_mode;#define MACHINE_FLAG_LPAR (1UL << 12)#define MACHINE_FLAG_SPP (1UL << 13)#define MACHINE_FLAG_TOPOLOGY (1UL << 14) -#define MACHINE_FLAG_STCKF (1UL << 15)#define MACHINE_IS_VM (S390_lowcore.machine_flags & MACHINE_FLAG_VM)#define MACHINE_IS_KVM (S390_lowcore.machine_flags & MACHINE_FLAG_KVM)
@@ -101,7 +100,6 @@ extern unsigned int user_mode;#define MACHINE_HAS_PFMF (0)#define MACHINE_HAS_SPP (0)#define MACHINE_HAS_TOPOLOGY (0) -#define MACHINE_HAS_STCKF (0)#else /* __s390x__ */ #define MACHINE_HAS_IEEE (1)#define MACHINE_HAS_CSP (1)
@@ -113,7 +111,6 @@ extern unsigned int user_mode;#define MACHINE_HAS_PFMF (S390_lowcore.machine_flags & MACHINE_FLAG_PFMF)#define MACHINE_HAS_SPP (S390_lowcore.machine_flags & MACHINE_FLAG_SPP)#define MACHINE_HAS_TOPOLOGY (S390_lowcore.machine_flags & MACHINE_FLAG_TOPOLOGY) -#define MACHINE_HAS_STCKF (S390_lowcore.machine_flags & MACHINE_FLAG_STCKF)#endif /* __s390x__ */ #define ZFCPDUMP_HSA_SIZE (32UL<<20)
arch/s390/include/asm/thread_info.h +0 -2
@@ -95,7 +95,6 @@ static inline struct thread_info *current_thread_info(void)#define TIF_SYSCALL_AUDIT 9/* syscall auditing active */ #define TIF_SECCOMP 10/* secure computing */ #define TIF_SYSCALL_TRACEPOINT 11/* syscall tracepoint instrumentation */ -#define TIF_SIE 12/* guest execution active */ #define TIF_POLLING_NRFLAG 16/* true if poll_idle() is polling TIF_NEED_RESCHED */ #define TIF_31BIT 17/* 32bit process */
@@ -114,7 +113,6 @@ static inline struct thread_info *current_thread_info(void)#define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT)#define _TIF_SECCOMP (1<<TIF_SECCOMP)#define _TIF_SYSCALL_TRACEPOINT (1<<TIF_SYSCALL_TRACEPOINT) -#define _TIF_SIE (1<<TIF_SIE)#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)#define _TIF_31BIT (1<<TIF_31BIT)#define _TIF_SINGLE_STEP (1<<TIF_SINGLE_STEP)
arch/s390/include/asm/timex.h +5 -12
@@ -73,11 +73,15 @@ static inline void local_tick_enable(unsigned long long comp)typedef unsigned long long cycles_t ; -static inline unsigned long long get_clock (void ) +static inline unsigned long long get_clock (void ) {unsigned long long clk; +#ifdef CONFIG_HAVE_MARCH_Z9_109_FEATURES + asmvolatile (".insn s,0xb27c0000,%0" :"=Q" (clk) : :"cc" ); +#else asmvolatile ("stck %0" :"=Q" (clk) : :"cc" ); +#endif return clk; }
@@ -86,17 +90,6 @@ static inline void get_clock_ext(char *clk) asmvolatile ("stcke %0" :"=Q" (*clk) : :"cc" ); } -static inline unsigned long long get_clock_fast (void ) -{ -unsigned long long clk; - -if (MACHINE_HAS_STCKF ) - asmvolatile (".insn s,0xb27c0000,%0" :"=Q" (clk) : :"cc" ); -else - clk =get_clock (); -return clk; -} -static inline unsigned long long get_clock_xt (void ) {unsigned char clk[16 ];
arch/s390/kernel/.gitignore new file +1 -0
@@ -0,0 +1 @@ +vmlinux.lds
arch/s390/kernel/compat_signal.c +0 -7
@@ -437,13 +437,6 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size) sp = current->sas_ss_sp + current->sas_ss_size; } -/* This is the legacy signal stack switching. */ -else if (!user_mode (regs) && - !(ka->sa.sa_flags &SA_RESTORER ) && - ka->sa.sa_restorer) { - sp = (unsigned long ) ka->sa.sa_restorer; - } -return (void __user *)((sp - frame_size) &-8ul ); }
arch/s390/kernel/early.c +0 -2
@@ -374,8 +374,6 @@ static __init void detect_machine_facilities(void) S390_lowcore.machine_flags |=MACHINE_FLAG_MVCOS ;if (test_facility (40 )) S390_lowcore.machine_flags |=MACHINE_FLAG_SPP ; -if (test_facility (25 )) - S390_lowcore.machine_flags |=MACHINE_FLAG_STCKF ;#endif }
arch/s390/kernel/entry.S +11 -10
@@ -145,22 +145,23 @@ STACK_SIZE = 1 << STACK_SHIFT * gpr2 = prev */ ENTRY(__switch_to) + stm %r6,%r15,__SF_GPRS(%r15) # store gprs of prev task + st %r15,__THREAD_ksp(%r2) # store kernel stack of prev l %r4,__THREAD_info(%r2) # get thread_info of prev l %r5,__THREAD_info(%r3) # get thread_info of next + lr %r15,%r5 + ahi %r15,STACK_SIZE # end of kernel stack of next + st %r3,__LC_CURRENT # store task struct of next + st %r5,__LC_THREAD_INFO # store thread info of next + st %r15,__LC_KERNEL_STACK # store end of kernel stack + lctl %c4,%c4,__TASK_pid(%r3) # load pid to control reg. 4 + mvc __LC_CURRENT_PID(4,%r0),__TASK_pid(%r3) # store pid of next + l %r15,__THREAD_ksp(%r3) # load kernel stack of next tm __TI_flags+3(%r4),_TIF_MCCK_PENDING # machine check pending? jz 0f ni __TI_flags+3(%r4),255-_TIF_MCCK_PENDING # clear flag in prev oi __TI_flags+3(%r5),_TIF_MCCK_PENDING # set it in next -0: stm %r6,%r15,__SF_GPRS(%r15) # store gprs of prev task - st %r15,__THREAD_ksp(%r2) # store kernel stack of prev - l %r15,__THREAD_ksp(%r3) # load kernel stack of next - lctl %c4,%c4,__TASK_pid(%r3) # load pid to control reg. 4 - lm %r6,%r15,__SF_GPRS(%r15) # load gprs of next task - st %r3,__LC_CURRENT # store task struct of next - mvc __LC_CURRENT_PID(4,%r0),__TASK_pid(%r3) # store pid of next - st %r5,__LC_THREAD_INFO # store thread info of next - ahi %r5,STACK_SIZE # end of kernel stack of next - st %r5,__LC_KERNEL_STACK # store end of kernel stack +0: lm %r6,%r15,__SF_GPRS(%r15) # load gprs of next task br %r14 __critical_start:
arch/s390/kernel/entry64.S +28 -23
127 lines not on this page · raw message
arch/s390/kernel/head.S +0 -123
154 lines not on this page · raw message
arch/s390/kernel/signal.c +0 -16
@@ -235,13 +235,6 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size) sp = current->sas_ss_sp + current->sas_ss_size; } -/* This is the legacy signal stack switching. */ -else if (!user_mode (regs) && - !(ka->sa.sa_flags &SA_RESTORER ) && - ka->sa.sa_restorer) { - sp = (unsigned long ) ka->sa.sa_restorer; - } -return (void __user *)((sp - frame_size) &-8ul ); }
@@ -414,15 +407,6 @@ void do_signal(struct pt_regs *regs)struct k_sigaction ka;sigset_t *oldset; -/* -* We want the common case to go fast, which -* is why we may in certain cases get here from -* kernel mode. Just return without doing anything -* if so. -*/ -if (!user_mode (regs)) -return ; -if (test_thread_flag (TIF_RESTORE_SIGMASK )) oldset = ¤t->saved_sigmask;else
arch/s390/kernel/smp.c +4 -0
@@ -226,6 +226,8 @@ out:return -ENOMEM ; } +#ifdef CONFIG_HOTPLUG_CPU +static void pcpu_free_lowcore (struct pcpu *pcpu) {pcpu_sigp_retry (pcpu, sigp_set_prefix,0 );
@@ -247,6 +249,8 @@ static void pcpu_free_lowcore(struct pcpu *pcpu) } } +#endif /* CONFIG_HOTPLUG_CPU */ +static void pcpu_prepare_secondary (struct pcpu *pcpu,int cpu) {struct _lowcore *lc = pcpu->lowcore;
arch/s390/kernel/vdso32/.gitignore new file +1 -0
@@ -0,0 +1 @@ +vdso32.lds
arch/s390/kernel/vdso64/.gitignore new file +1 -0
@@ -0,0 +1 @@ +vdso64.lds
arch/s390/mm/fault.c +27 -18
89 lines not on this page · raw message
arch/s390/mm/hugetlbpage.c +2 -0
@@ -58,6 +58,8 @@ void arch_release_hugepage(struct page *page) ptep = (pte_t *) page[1 ].index;if (!ptep)return ; +clear_table ((unsigned long *) ptep, _PAGE_TYPE_EMPTY, +PTRS_PER_PTE *sizeof (pte_t));page_table_free (&init_mm, (unsigned long *) ptep); page[1 ].index =0 ; }
arch/s390/mm/maccess.c +67 -0
76 lines not on this page · raw message
arch/s390/mm/pgtable.c +2 -0
@@ -822,6 +822,8 @@ int s390_enable_sie(void)/* we copy the mm and let dup_mm create the page tables with_pgstes */ tsk->mm->context.alloc_pgste =1 ; +/* make sure that both mms have a correct rss state */ +sync_mm_rss (tsk->mm); mm =dup_mm (tsk); tsk->mm->context.alloc_pgste =0 ;if (!mm)
block/partitions/ibm.c +1 -1
@@ -253,7 +253,7 @@ int ibm_partition(struct parsed_partitions *state)/* Are we not supposed to report this ? */ goto out_readerr; }else -printk (KERN_WARNING "Warning, expected Label VOL1 not " +printk (KERN_INFO "Expected Label VOL1 not " "found, treating as CDL formated Disk" ); }
drivers/crypto/Kconfig +1 -0
@@ -111,6 +111,7 @@ config CRYPTO_DES_S390 depends on S390 select CRYPTO_ALGAPI select CRYPTO_BLKCIPHER + select CRYPTO_DES help This is the s390 hardware accelerated implementation of the DES cipher algorithm (FIPS 46-2), and Triple DES EDE (FIPS 46-3).
drivers/s390/char/sclp_cmd.c +11 -1
@@ -352,7 +352,17 @@ out:static int sclp_assign_storage (u16 rn) { -return do_assign_storage (0x000d0001 , rn); +unsigned long long start, address; +int rc; + + rc =do_assign_storage (0x000d0001 , rn); +if (rc) + goto out; + start = address =rn2addr (rn); +for (; address < start + rzm; address +=PAGE_SIZE ) +page_set_storage_key (address,PAGE_DEFAULT_KEY ,0 ); +out: +return rc; }static int sclp_unassign_storage (u16 rn)
drivers/s390/char/tape.h +0 -43
67 lines not on this page · raw message
drivers/s390/char/tape_34xx.c +0 -136
154 lines not on this page · raw message
drivers/s390/char/tape_3590.c +0 -105
123 lines not on this page · raw message
drivers/s390/char/tape_char.c +0 -13
@@ -161,11 +161,6 @@ tapechar_read(struct file *filp, char __user *data, size_t count, loff_t *ppos)if (rc)return rc; -#ifdef CONFIG_S390_TAPE_BLOCK -/* Changes position. */ - device->blk_data.medium_changed =1 ; -#endif -DBF_EVENT (6 ,"TCHAR:nbytes: %lx\n" , block_size);/* Let the discipline build the ccw chain. */ request = device->discipline->read_block (device, block_size);
@@ -218,11 +213,6 @@ tapechar_write(struct file *filp, const char __user *data, size_t count, loff_tif (rc)return rc; -#ifdef CONFIG_S390_TAPE_BLOCK -/* Changes position. */ - device->blk_data.medium_changed =1 ; -#endif -DBF_EVENT (6 ,"TCHAR:nbytes: %lx\n" , block_size);DBF_EVENT (6 ,"TCHAR:nblocks: %x\n" , nblocks);/* Let the discipline build the ccw chain. */
@@ -379,9 +369,6 @@ __tapechar_ioctl(struct tape_device *device,case MTBSFM :case MTFSFM :case MTSEEK : -#ifdef CONFIG_S390_TAPE_BLOCK - device->blk_data.medium_changed =1 ; -#endif if (device->required_tapemarks)tape_std_terminate_write (device);default :
drivers/s390/char/tape_core.c +2 -14
@@ -401,9 +401,6 @@ tape_generic_online(struct tape_device *device, rc =tapechar_setup_device (device);if (rc) goto out_minor; - rc =tapeblock_setup_device (device); -if (rc) - goto out_char;tape_state_set (device,TS_UNUSED );
@@ -411,8 +408,6 @@ tape_generic_online(struct tape_device *device,return 0 ; -out_char: -tapechar_cleanup_device (device); out_minor:tape_remove_minor (device); out_discipline:
@@ -426,7 +421,6 @@ out:static void tape_cleanup_device (struct tape_device *device) { -tapeblock_cleanup_device (device);tapechar_cleanup_device (device); device->discipline->cleanup_device (device);module_put (device->discipline->owner);
@@ -785,10 +779,6 @@ __tape_start_io(struct tape_device *device, struct tape_request *request) {int rc; -#ifdef CONFIG_S390_TAPE_BLOCK -if (request->op ==TO_BLOCK ) - device->discipline->check_locate (device, request); -#endif rc = ccw_device_start( device->cdev, request->cpaddr,
@@ -1253,7 +1243,7 @@ __tape_do_irq (struct ccw_device *cdev, unsigned long intparm, struct irb *irb) }/* -* Tape device open function used by tape_char & tape_block frontends. +* Tape device open function used by tape_char frontend. */ int tape_open (struct tape_device *device)
@@ -1283,7 +1273,7 @@ tape_open(struct tape_device *device) }/* -* Tape device release function used by tape_char & tape_block frontends. +* Tape device release function used by tape_char frontend. */ int tape_release (struct tape_device *device)
@@ -1344,7 +1334,6 @@ tape_init (void)DBF_EVENT (3 ,"tape init\n" );tape_proc_init ();tapechar_init (); -tapeblock_init ();return 0 ; }
@@ -1358,7 +1347,6 @@ tape_exit(void)/* Get rid of the frontends */ tapechar_exit (); -tapeblock_exit ();tape_proc_cleanup ();debug_unregister (TAPE_DBF_AREA ); }
drivers/s390/cio/ccwgroup.c +43 -69
213 lines not on this page · raw message
drivers/s390/cio/cio.c +19 -54
104 lines not on this page · raw message
drivers/s390/cio/device.c +12 -1
@@ -695,7 +695,17 @@ static int match_dev_id(struct device *dev, void *data)return ccw_dev_id_is_equal (&cdev->private->dev_id, dev_id); } -static struct ccw_device *get_ccwdev_by_dev_id (struct ccw_dev_id *dev_id) +/** +* get_ccwdev_by_dev_id() - obtain device from a ccw device id +* @dev_id: id of the device to be searched +* +* This function searches all devices attached to the ccw bus for a device +* matching @dev_id. +* Returns: +* If a device is found its reference count is increased and returned; +* else %NULL is returned. +*/ +struct ccw_device *get_ccwdev_by_dev_id (struct ccw_dev_id *dev_id) {struct device *dev;
@@ -703,6 +713,7 @@ static struct ccw_device *get_ccwdev_by_dev_id(struct ccw_dev_id *dev_id)return dev ?to_ccwdev (dev) :NULL ; } +EXPORT_SYMBOL_GPL (get_ccwdev_by_dev_id);static void ccw_device_do_unbind_bind (struct ccw_device *cdev) {
drivers/s390/cio/device.h +1 -0
@@ -101,6 +101,7 @@ int ccw_device_test_sense_data(struct ccw_device *);void ccw_device_schedule_sch_unregister (struct ccw_device *);int ccw_purge_blacklisted (void );void ccw_device_sched_todo (struct ccw_device *cdev,enum cdev_todo todo); +struct ccw_device *get_ccwdev_by_dev_id (struct ccw_dev_id *dev_id);/* Function prototypes for device status and basic sense stuff. */ void ccw_device_accumulate_irb (struct ccw_device *,struct irb *);
drivers/s390/cio/qdio_main.c +24 -23
146 lines not on this page · raw message
drivers/s390/crypto/ap_bus.c +14 -10
@@ -215,7 +215,7 @@ ap_queue_interruption_control(ap_qid_t qid, void *ind) registerstruct ap_queue_status reg1_out asm ("1" ); register void *reg2 asm ("2") = ind; asmvolatile ( -".long 0xb2af0000" /* PQAP(RAPQ) */ +".long 0xb2af0000" /* PQAP(AQIC) */ :"+d" (reg0),"+d" (reg1_in),"=d" (reg1_out),"+d" (reg2) : :"cc" );
@@ -232,7 +232,7 @@ __ap_query_functions(ap_qid_t qid, unsigned int *functions) registerunsigned long reg2 asm ("2" ); asmvolatile ( -".long 0xb2af0000\n" +".long 0xb2af0000\n" /* PQAP(TAPQ) */ "0:\n" EX_TABLE(0b, 0b) : "+d" (reg0), "+d" (reg1), "=d" (reg2)
@@ -391,7 +391,7 @@ __ap_send(ap_qid_t qid, unsigned long long psmid, void *msg, size_t length, reg0 |=0x400000UL ; asmvolatile ( -"0: .long 0xb2ad0042\n" /* DQAP */ +"0: .long 0xb2ad0042\n" /* NQAP */ " brc 2,0b" :"+d" (reg0),"=d" (reg1),"+d" (reg2),"+d" (reg3) : "d" (reg4), "d" (reg5), "m" (*(msgblock *) msg)
@@ -450,7 +450,7 @@ __ap_recv(ap_qid_t qid, unsigned long long *psmid, void *msg, size_t length) asm volatile( - "0: .long 0xb2ae0064\n" + "0: .long 0xb2ae0064\n" /* DQAP */ " brc 6,0b\n" : "+d" (reg0), "=d" (reg1), "+d" (reg2), "+d" (reg4), "+d" (reg5), "+d" (reg6), "+d" (reg7),
@@ -836,12 +836,12 @@ static void __ap_flush_queue(struct ap_device *ap_dev)list_for_each_entry_safe (ap_msg, next, &ap_dev->pendingq, list) {list_del_init (&ap_msg->list); ap_dev->pendingq_count--; - ap_dev->drv->receive (ap_dev, ap_msg,ERR_PTR (-ENODEV )); + ap_msg->receive (ap_dev, ap_msg,ERR_PTR (-ENODEV )); }list_for_each_entry_safe (ap_msg, next, &ap_dev->requestq, list) {list_del_init (&ap_msg->list); ap_dev->requestq_count--; - ap_dev->drv->receive (ap_dev, ap_msg,ERR_PTR (-ENODEV )); + ap_msg->receive (ap_dev, ap_msg,ERR_PTR (-ENODEV )); } }
@@ -1329,7 +1329,7 @@ static int ap_poll_read(struct ap_device *ap_dev, unsigned long *flags)continue ;list_del_init (&ap_msg->list); ap_dev->pendingq_count--; - ap_dev->drv->receive (ap_dev, ap_msg, ap_dev->reply); + ap_msg->receive (ap_dev, ap_msg, ap_dev->reply);break ; }if (ap_dev->queue_count >0 )
@@ -1450,10 +1450,10 @@ static int __ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msreturn -EBUSY ;case AP_RESPONSE_REQ_FAC_NOT_INST :case AP_RESPONSE_MESSAGE_TOO_BIG : - ap_dev->drv->receive (ap_dev, ap_msg,ERR_PTR (-EINVAL )); + ap_msg->receive (ap_dev, ap_msg,ERR_PTR (-EINVAL ));return -EINVAL ;default :/* Device is gone. */ - ap_dev->drv->receive (ap_dev, ap_msg,ERR_PTR (-ENODEV )); + ap_msg->receive (ap_dev, ap_msg,ERR_PTR (-ENODEV ));return -ENODEV ; } }else {
@@ -1471,6 +1471,10 @@ void ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg)unsigned long flags;int rc; +/* For asynchronous message handling a valid receive-callback +* is required. */ +BUG_ON (!ap_msg->receive); +spin_lock_bh (&ap_dev->lock);if (!ap_dev->unregistered) {/* Make room on the queue by polling for finished requests. */
@@ -1482,7 +1486,7 @@ void ap_queue_message(struct ap_device *ap_dev, struct ap_message *ap_msg)if (rc == -ENODEV ) ap_dev->unregistered =1 ; }else { - ap_dev->drv->receive (ap_dev, ap_msg,ERR_PTR (-ENODEV )); + ap_msg->receive (ap_dev, ap_msg,ERR_PTR (-ENODEV )); rc = -ENODEV ; }spin_unlock_bh (&ap_dev->lock);
drivers/s390/crypto/ap_bus.h +4 -3
@@ -136,9 +136,6 @@ struct ap_driver {int (*probe)(struct ap_device *);void (*remove)(struct ap_device *); -/* receive is called from tasklet context */ -void (*receive)(struct ap_device *,struct ap_message *, -struct ap_message *);int request_timeout;/* request timeout in jiffies */ };
@@ -183,6 +180,9 @@ struct ap_message {void *private;/* ap driver private pointer. */ unsigned int special:1; /* Used for special commands. */ +/* receive is called from tasklet context */ +void (*receive)(struct ap_device *,struct ap_message *, +struct ap_message *); };#define AP_DEVICE (dt) \
@@ -199,6 +199,7 @@ static inline void ap_init_message(struct ap_message *ap_msg) ap_msg->psmid =0 ; ap_msg->length =0 ; ap_msg->special =0 ; + ap_msg->receive =NULL ; }/*
drivers/s390/crypto/zcrypt_cex2a.c +2 -1
@@ -77,7 +77,6 @@ static void zcrypt_cex2a_receive(struct ap_device *, struct ap_message *,static struct ap_driver zcrypt_cex2a_driver = { .probe = zcrypt_cex2a_probe, .remove = zcrypt_cex2a_remove, - .receive = zcrypt_cex2a_receive, .ids = zcrypt_cex2a_ids, .request_timeout =CEX2A_CLEANUP_TIME , };
@@ -349,6 +348,7 @@ static long zcrypt_cex2a_modexpo(struct zcrypt_device *zdev, ap_msg.message =kmalloc (CEX3A_MAX_MESSAGE_SIZE ,GFP_KERNEL );if (!ap_msg.message)return -ENOMEM ; + ap_msg.receive = zcrypt_cex2a_receive; ap_msg.psmid = (((unsigned long long ) current->pid) <<32 ) +atomic_inc_return (&zcrypt_step); ap_msg.private = &work;
@@ -390,6 +390,7 @@ static long zcrypt_cex2a_modexpo_crt(struct zcrypt_device *zdev, ap_msg.message =kmalloc (CEX3A_MAX_MESSAGE_SIZE ,GFP_KERNEL );if (!ap_msg.message)return -ENOMEM ; + ap_msg.receive = zcrypt_cex2a_receive; ap_msg.psmid = (((unsigned long long ) current->pid) <<32 ) +atomic_inc_return (&zcrypt_step); ap_msg.private = &work;
drivers/s390/crypto/zcrypt_pcica.c +2 -1
@@ -67,7 +67,6 @@ static void zcrypt_pcica_receive(struct ap_device *, struct ap_message *,static struct ap_driver zcrypt_pcica_driver = { .probe = zcrypt_pcica_probe, .remove = zcrypt_pcica_remove, - .receive = zcrypt_pcica_receive, .ids = zcrypt_pcica_ids, .request_timeout =PCICA_CLEANUP_TIME , };
@@ -284,6 +283,7 @@ static long zcrypt_pcica_modexpo(struct zcrypt_device *zdev, ap_msg.message =kmalloc (PCICA_MAX_MESSAGE_SIZE ,GFP_KERNEL );if (!ap_msg.message)return -ENOMEM ; + ap_msg.receive = zcrypt_pcica_receive; ap_msg.psmid = (((unsigned long long ) current->pid) <<32 ) +atomic_inc_return (&zcrypt_step); ap_msg.private = &work;
@@ -322,6 +322,7 @@ static long zcrypt_pcica_modexpo_crt(struct zcrypt_device *zdev, ap_msg.message =kmalloc (PCICA_MAX_MESSAGE_SIZE ,GFP_KERNEL );if (!ap_msg.message)return -ENOMEM ; + ap_msg.receive = zcrypt_pcica_receive; ap_msg.psmid = (((unsigned long long ) current->pid) <<32 ) +atomic_inc_return (&zcrypt_step); ap_msg.private = &work;
drivers/s390/crypto/zcrypt_pcicc.c +2 -1
@@ -79,7 +79,6 @@ static void zcrypt_pcicc_receive(struct ap_device *, struct ap_message *,static struct ap_driver zcrypt_pcicc_driver = { .probe = zcrypt_pcicc_probe, .remove = zcrypt_pcicc_remove, - .receive = zcrypt_pcicc_receive, .ids = zcrypt_pcicc_ids, .request_timeout =PCICC_CLEANUP_TIME , };
@@ -488,6 +487,7 @@ static long zcrypt_pcicc_modexpo(struct zcrypt_device *zdev, ap_msg.message = (void *)get_zeroed_page (GFP_KERNEL );if (!ap_msg.message)return -ENOMEM ; + ap_msg.receive = zcrypt_pcicc_receive; ap_msg.length =PAGE_SIZE ; ap_msg.psmid = (((unsigned long long ) current->pid) <<32 ) +atomic_inc_return (&zcrypt_step);
@@ -527,6 +527,7 @@ static long zcrypt_pcicc_modexpo_crt(struct zcrypt_device *zdev, ap_msg.message = (void *)get_zeroed_page (GFP_KERNEL );if (!ap_msg.message)return -ENOMEM ; + ap_msg.receive = zcrypt_pcicc_receive; ap_msg.length =PAGE_SIZE ; ap_msg.psmid = (((unsigned long long ) current->pid) <<32 ) +atomic_inc_return (&zcrypt_step);
drivers/s390/crypto/zcrypt_pcixcc.c +4 -1
@@ -89,7 +89,6 @@ static void zcrypt_pcixcc_receive(struct ap_device *, struct ap_message *,static struct ap_driver zcrypt_pcixcc_driver = { .probe = zcrypt_pcixcc_probe, .remove = zcrypt_pcixcc_remove, - .receive = zcrypt_pcixcc_receive, .ids = zcrypt_pcixcc_ids, .request_timeout =PCIXCC_CLEANUP_TIME , };
@@ -698,6 +697,7 @@ static long zcrypt_pcixcc_modexpo(struct zcrypt_device *zdev, ap_msg.message = (void *)get_zeroed_page (GFP_KERNEL );if (!ap_msg.message)return -ENOMEM ; + ap_msg.receive = zcrypt_pcixcc_receive; ap_msg.psmid = (((unsigned long long ) current->pid) <<32 ) +atomic_inc_return (&zcrypt_step); ap_msg.private = &resp_type;
@@ -738,6 +738,7 @@ static long zcrypt_pcixcc_modexpo_crt(struct zcrypt_device *zdev, ap_msg.message = (void *)get_zeroed_page (GFP_KERNEL );if (!ap_msg.message)return -ENOMEM ; + ap_msg.receive = zcrypt_pcixcc_receive; ap_msg.psmid = (((unsigned long long ) current->pid) <<32 ) +atomic_inc_return (&zcrypt_step); ap_msg.private = &resp_type;
@@ -778,6 +779,7 @@ static long zcrypt_pcixcc_send_cprb(struct zcrypt_device *zdev, ap_msg.message =kmalloc (PCIXCC_MAX_XCRB_MESSAGE_SIZE ,GFP_KERNEL );if (!ap_msg.message)return -ENOMEM ; + ap_msg.receive = zcrypt_pcixcc_receive; ap_msg.psmid = (((unsigned long long ) current->pid) <<32 ) +atomic_inc_return (&zcrypt_step); ap_msg.private = &resp_type;
@@ -818,6 +820,7 @@ static long zcrypt_pcixcc_rng(struct zcrypt_device *zdev, ap_msg.message =kmalloc (PCIXCC_MAX_XCRB_MESSAGE_SIZE ,GFP_KERNEL );if (!ap_msg.message)return -ENOMEM ; + ap_msg.receive = zcrypt_pcixcc_receive; ap_msg.psmid = (((unsigned long long ) current->pid) <<32 ) +atomic_inc_return (&zcrypt_step); ap_msg.private = &resp_type;
drivers/s390/net/claw.c +64 -101
263 lines not on this page · raw message
drivers/s390/net/ctcm_main.c +16 -36
133 lines not on this page · raw message
drivers/s390/net/ctcm_main.h +1 -7
@@ -225,13 +225,7 @@ struct ctcm_priv {int ctcm_open (struct net_device *dev);int ctcm_close (struct net_device *dev); -/* -* prototypes for non-static sysfs functions -*/ -int ctcm_add_attributes (struct device *dev); -void ctcm_remove_attributes (struct device *dev); -int ctcm_add_files (struct device *dev); -void ctcm_remove_files (struct device *dev); +extern const struct attribute_group *ctcm_attr_groups[];/* * Compatibility macros for busy handling
drivers/s390/net/ctcm_sysfs.c +10 -27
@@ -13,6 +13,7 @@#define KMSG_COMPONENT "ctcm"#define pr_fmt (fmt) KMSG_COMPONENT ": " fmt +#include <linux/device.h> #include <linux/sysfs.h> #include <linux/slab.h> #include "ctcm_main.h"
@@ -108,10 +109,12 @@ static void ctcm_print_statistics(struct ctcm_priv *priv) }static ssize_t stats_show (struct device *dev, -struct device_attribute *attr,char *buf) +struct device_attribute *attr,char *buf) { +struct ccwgroup_device *gdev =to_ccwgroupdev (dev);struct ctcm_priv *priv =dev_get_drvdata (dev); -if (!priv) + +if (!priv || gdev->state !=CCWGROUP_ONLINE )return -ENODEV ;ctcm_print_statistics (priv);return sprintf (buf,"0\n" );
@@ -190,34 +193,14 @@ static struct attribute *ctcm_attr[] = { &dev_attr_protocol.attr, &dev_attr_type.attr, &dev_attr_buffer.attr, + &dev_attr_stats.attr, NULL, };static struct attribute_group ctcm_attr_group = { .attrs = ctcm_attr, }; - -int ctcm_add_attributes (struct device *dev) -{ -int rc; - - rc =device_create_file (dev, &dev_attr_stats); - -return rc; -} - -void ctcm_remove_attributes (struct device *dev) -{ -device_remove_file (dev, &dev_attr_stats); -} - -int ctcm_add_files (struct device *dev) -{ -return sysfs_create_group (&dev->kobj, &ctcm_attr_group); -} - -void ctcm_remove_files (struct device *dev) -{ -sysfs_remove_group (&dev->kobj, &ctcm_attr_group); -} - +const struct attribute_group *ctcm_attr_groups[] = { + &ctcm_attr_group, +NULL , +};
drivers/s390/net/lcs.c +22 -30
121 lines not on this page · raw message
drivers/s390/net/qeth_core.h +16 -8
@@ -711,7 +711,16 @@ struct qeth_discipline {qdio_handler_t *input_handler;qdio_handler_t *output_handler;int (*recover)(void *ptr); -struct ccwgroup_driver *ccwgdriver; +int (*setup) (struct ccwgroup_device *); +void (*remove) (struct ccwgroup_device *); +int (*set_online) (struct ccwgroup_device *); +int (*set_offline) (struct ccwgroup_device *); +void (*shutdown)(struct ccwgroup_device *); +int (*prepare) (struct ccwgroup_device *); +void (*complete) (struct ccwgroup_device *); +int (*freeze)(struct ccwgroup_device *); +int (*thaw) (struct ccwgroup_device *); +int (*restore)(struct ccwgroup_device *); };struct qeth_vlan_vid {
@@ -775,7 +784,7 @@ struct qeth_card {struct qeth_perf_stats perf_stats;int read_or_write_problem;struct qeth_osn_info osn_info; -struct qeth_discipline discipline; +struct qeth_discipline *discipline;atomic_t force_alloc_skb;struct service_level qeth_service_level;struct qdio_ssqd_desc ssqd;
@@ -841,16 +850,15 @@ static inline int qeth_is_diagass_supported(struct qeth_card *card,return card->info.diagass_support & (__u32 )cmd; } -extern struct ccwgroup_driver qeth_l2_ccwgroup_driver; -extern struct ccwgroup_driver qeth_l3_ccwgroup_driver; +extern struct qeth_discipline qeth_l2_discipline; +extern struct qeth_discipline qeth_l3_discipline; +extern const struct attribute_group *qeth_generic_attr_groups[]; +extern const struct attribute_group *qeth_osn_attr_groups[]; +const char *qeth_get_cardname_short (struct qeth_card *);int qeth_realloc_buffer_pool (struct qeth_card *,int );int qeth_core_load_discipline (struct qeth_card *,enum qeth_discipline_id );void qeth_core_free_discipline (struct qeth_card *); -int qeth_core_create_device_attributes (struct device *); -void qeth_core_remove_device_attributes (struct device *); -int qeth_core_create_osn_attributes (struct device *); -void qeth_core_remove_osn_attributes (struct device *);void qeth_buffer_reclaim_work (struct work_struct *);/* exports for qeth discipline device drivers */
drivers/s390/net/qeth_core_main.c +79 -99
310 lines not on this page · raw message
drivers/s390/net/qeth_core_sys.c +13 -36
49 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.