Please pull git390 'for-linus' branch
Subsystems (9)
Please pull from 'for-linus' branch of
git://git390.osdl.marist.edu/pub/scm/linux-2.6.git for-linus
to receive the following updates:
Documentation/feature-removal-schedule.txt | 17 ++ arch/s390/crypto/aes_s390.c | 15 ++- arch/s390/kernel/kprobes.c | 3 +- arch/s390/kernel/setup.c | 111 +++++++++++++- arch/s390/mm/fault.c | 40 ++--- drivers/s390/block/dasd.c | 45 +++++ drivers/s390/block/dasd_eckd.c | 81 +++++++++- drivers/s390/block/dasd_fba.c | 2 +- drivers/s390/block/dasd_int.h | 2 + drivers/s390/char/tape.h | 1 + drivers/s390/char/tape_3590.c | 29 +++- drivers/s390/char/tape_3590.h | 4 + drivers/s390/char/tape_core.c | 3 +- drivers/s390/cio/qdio.c | 240 ++++++++++++++++------------ drivers/s390/cio/qdio.h | 52 +++++-- drivers/s390/net/qeth.h | 3 + drivers/s390/net/qeth_main.c | 77 +++++++++- drivers/s390/net/qeth_mpc.h | 1 + include/asm-s390/ccwdev.h | 6 +- include/asm-s390/elf.h | 7 +- include/asm-s390/kdebug.h | 18 ++- include/asm-s390/kprobes.h | 16 +-- include/asm-s390/lowcore.h | 10 +- 23 files changed, 593 insertions(+), 190 deletions(-)
Christoph Hellwig (1):
[S390] get rid of kprobes notifier call chain.
Cornelia Huck (3):
[S390] cio: Deprecate read_dev_chars() and read_conf_data{,_lpm}(). [S390] dasd: New read device characteristics and read configuration data. [S390] qeth: New read configuration data.
Jan Glauber (1):
[S390] aes-s390 key length.
Martin Schwidefsky (2):
[S390] Export uaccess as non-gpl symbol. [S390] add hardware capability support (ELF_HWCAP).
Michael Holzheu (1):
[S390] tape: New read configuration data.
Ursula Braun (1):
[S390] qdio: make qdio statistics SMP-capable
Documentation/feature-removal-schedule.txt +17 -0
@@ -314,3 +314,20 @@ Why: Code was merged, then submitter immediately disappeared leaving Who: David S. Miller <[email protected]> --------------------------- + +What: read_dev_chars(), read_conf_data{,_lpm}() (s390 common I/O layer) +When: December 2007 +Why: These functions are a leftover from 2.4 times. They have several + problems: + - Duplication of checks that are done in the device driver's + interrupt handler + - common I/O layer can't do device specific error recovery + - device driver can't be notified for conditions happening during + execution of the function + Device drivers should issue the read device characteristics and read + configuration data ccws and do the appropriate error handling + themselves. +Who: Cornelia Huck <[email protected]> + +--------------------------- +
arch/s390/crypto/aes_s390.c +11 -4
@@ -119,7 +119,8 @@ static struct crypto_alg aes_alg = { .cra_name = "aes", .cra_driver_name = "aes-s390", .cra_priority = CRYPT_S390_PRIORITY, - .cra_flags = CRYPTO_ALG_TYPE_CIPHER, + .cra_flags =CRYPTO_ALG_TYPE_CIPHER | + CRYPTO_ALG_NEED_FALLBACK, .cra_blocksize = AES_BLOCK_SIZE, .cra_ctxsize = sizeof(struct s390_aes_ctx), .cra_module = THIS_MODULE,
@@ -206,7 +207,8 @@ static struct crypto_alg ecb_aes_alg = { .cra_name = "ecb(aes)", .cra_driver_name = "ecb-aes-s390", .cra_priority = CRYPT_S390_COMPOSITE_PRIORITY, - .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER, + .cra_flags =CRYPTO_ALG_TYPE_BLKCIPHER | + CRYPTO_ALG_NEED_FALLBACK, .cra_blocksize = AES_BLOCK_SIZE, .cra_ctxsize = sizeof(struct s390_aes_ctx), .cra_type = &crypto_blkcipher_type,
@@ -300,7 +302,8 @@ static struct crypto_alg cbc_aes_alg = { .cra_name = "cbc(aes)", .cra_driver_name = "cbc-aes-s390", .cra_priority = CRYPT_S390_COMPOSITE_PRIORITY, - .cra_flags = CRYPTO_ALG_TYPE_BLKCIPHER, + .cra_flags =CRYPTO_ALG_TYPE_BLKCIPHER | + CRYPTO_ALG_NEED_FALLBACK, .cra_blocksize = AES_BLOCK_SIZE, .cra_ctxsize = sizeof(struct s390_aes_ctx), .cra_type = &crypto_blkcipher_type,
@@ -333,10 +336,14 @@ static int __init aes_init(void)return -EOPNOTSUPP ;/* z9 109 and z9 BC/EC only support 128 bit key length */ -if (keylen_flag ==AES_KEYLEN_128 ) +if (keylen_flag ==AES_KEYLEN_128 ) { + aes_alg.cra_u.cipher.cia_max_keysize =AES_MIN_KEY_SIZE ; + ecb_aes_alg.cra_u.blkcipher.max_keysize =AES_MIN_KEY_SIZE ; + cbc_aes_alg.cra_u.blkcipher.max_keysize =AES_MIN_KEY_SIZE ;printk (KERN_INFO "aes_s390: hardware acceleration only available for" "128 bit keys\n" ); + } ret =crypto_register_alg (&aes_alg);if (ret)
arch/s390/kernel/kprobes.c +1 -2
@@ -516,7 +516,7 @@ out:return 1 ; } -static int __kprobes kprobe_fault_handler (struct pt_regs *regs,int trapnr) +int __kprobes kprobe_fault_handler (struct pt_regs *regs,int trapnr) {struct kprobe *cur =kprobe_running ();struct kprobe_ctlblk *kcb =get_kprobe_ctlblk ();
@@ -603,7 +603,6 @@ int __kprobes kprobe_exceptions_notify(struct notifier_block *self, ret =NOTIFY_STOP ;break ;case DIE_TRAP : -case DIE_PAGE_FAULT :/* kprobe_running() needs smp_processor_id() */ preempt_disable (); if (kprobe_running() &&
arch/s390/kernel/setup.c +110 -1
150 lines not on this page · raw message
arch/s390/mm/fault.c +13 -27
@@ -52,38 +52,24 @@ extern int sysctl_userprocess_debug;extern void die (const char *,struct pt_regs *,long );#ifdef CONFIG_KPROBES -static ATOMIC_NOTIFIER_HEAD (notify_page_fault_chain); -int register_page_fault_notifier (struct notifier_block *nb) -{ -return atomic_notifier_chain_register (¬ify_page_fault_chain, nb); -} - -int unregister_page_fault_notifier (struct notifier_block *nb) -{ -return atomic_notifier_chain_unregister (¬ify_page_fault_chain, nb); -} - -static int __kprobes __notify_page_fault (struct pt_regs *regs,long err) -{ -struct die_args args = { .str ="page fault" , - .trapnr =14 , - .signr =SIGSEGV }; - args.regs = regs; - args.err = err; -return atomic_notifier_call_chain (¬ify_page_fault_chain, -DIE_PAGE_FAULT , &args); -} -static inline int notify_page_fault (struct pt_regs *regs,long err) { -if (unlikely (kprobe_running ())) -return __notify_page_fault (regs, err); -return NOTIFY_DONE ; +int ret =0 ; + +/* kprobe_running() needs smp_processor_id() */ +if (!user_mode (regs)) { +preempt_disable (); +if (kprobe_running () &&kprobe_fault_handler (regs,14 )) + ret =1 ; +preempt_enable (); + } + +return ret; }#else static inline int notify_page_fault (struct pt_regs *regs,long err) { -return NOTIFY_DONE ; +return 0 ; }#endif
@@ -319,7 +305,7 @@ do_exception(struct pt_regs *regs, unsigned long error_code, int write)int space;int si_code; -if (notify_page_fault (regs, error_code) ==NOTIFY_STOP ) +if (notify_page_fault (regs, error_code))return ; tsk = current;
drivers/s390/block/dasd.c +45 -0
51 lines not on this page · raw message
drivers/s390/block/dasd_eckd.c +78 -3
99 lines not on this page · raw message
drivers/s390/block/dasd_fba.c +1 -1
@@ -135,7 +135,7 @@ dasd_fba_check_characteristics(struct dasd_device *device) }/* Read Device Characteristics */ rdc_data = (void *) &(private->rdc_data); - rc =read_dev_chars (device->cdev, &rdc_data,32 ); + rc =dasd_generic_read_dev_chars (device,"FBA " , &rdc_data,32 );if (rc) { DEV_MESSAGE(KERN_WARNING, device, "Read device characteristics returned error %d",
drivers/s390/block/dasd_int.h +2 -0
@@ -509,6 +509,8 @@ int dasd_generic_set_online(struct ccw_device *, struct dasd_discipline *);int dasd_generic_set_offline (struct ccw_device *cdev);int dasd_generic_notify (struct ccw_device *,int ); +int dasd_generic_read_dev_chars (struct dasd_device *,char *,void **,int ); +/* externals in dasd_devmap.c */ extern int dasd_max_devindex;extern int dasd_probeonly;
drivers/s390/char/tape.h +1 -0
@@ -103,6 +103,7 @@ enum tape_op {TO_CRYPT_OFF ,/* Disable encrpytion */ TO_KEKL_SET ,/* Set KEK label */ TO_KEKL_QUERY ,/* Query KEK label */ +TO_RDC ,/* Read device characteristics */ TO_SIZE, /* #entries in tape_op_t */ };
drivers/s390/char/tape_3590.c +25 -4
@@ -788,6 +788,7 @@ tape_3590_done(struct tape_device *device, struct tape_request *request)case TO_SIZE :case TO_KEKL_SET :case TO_KEKL_QUERY : +case TO_RDC :break ; }return TAPE_IO_SUCCESS ;
@@ -1549,6 +1550,26 @@ tape_3590_irq(struct tape_device *device, struct tape_request *request,return TAPE_IO_STOP ; } + +static int tape_3590_read_dev_chars (struct tape_device *device, +struct tape_3590_rdc_data *rdc_data) +{ +int rc; +struct tape_request *request; + + request =tape_alloc_request (1 ,sizeof (*rdc_data)); +if (IS_ERR (request)) +return PTR_ERR (request); + request->op =TO_RDC ; +tape_ccw_end (request->cpaddr,CCW_CMD_RDC ,sizeof (*rdc_data), + request->cpdata); + rc =tape_do_io (device, request); +if (rc ==0 ) +memcpy (rdc_data, request->cpdata,sizeof (*rdc_data)); +tape_free_request (request); +return rc; +} +/* * Setup device function */
@@ -1557,7 +1578,7 @@ tape_3590_setup_device(struct tape_device *device) {int rc;struct tape_3590_disc_data *data; -char *rdc_data; +struct tape_3590_rdc_data *rdc_data;DBF_EVENT (6 ,"3590 device setup\n" ); data =kzalloc (sizeof (struct tape_3590_disc_data ),GFP_KERNEL |GFP_DMA );
@@ -1566,12 +1587,12 @@ tape_3590_setup_device(struct tape_device *device) data->read_back_op =READ_PREVIOUS ; device->discdata = data; - rdc_data =kmalloc (64 ,GFP_KERNEL |GFP_DMA ); + rdc_data =kmalloc (sizeof (*rdc_data),GFP_KERNEL |GFP_DMA );if (!rdc_data) { rc = -ENOMEM ; goto fail_kmalloc; } - rc =read_dev_chars (device->cdev, (void **)&rdc_data,64 ); + rc =tape_3590_read_dev_chars (device, rdc_data);if (rc) {DBF_LH (3 ,"Read device characteristics failed!\n" ); goto fail_kmalloc;
@@ -1579,7 +1600,7 @@ tape_3590_setup_device(struct tape_device *device) rc =tape_std_assign (device);if (rc) goto fail_rdc_data; -if (rdc_data[31 ] ==0x13 ) { +if (rdc_data->data[31 ] ==0x13 ) {PRINT_INFO ("Device has crypto support\n" ); data->crypt_info.capability |=TAPE390_CRYPT_SUPPORTED_MASK ;tape_3592_disable_crypt (device);
drivers/s390/char/tape_3590.h +4 -0
@@ -129,6 +129,10 @@ struct tape_3590_med_sense {char pad2[116 ]; } __attribute__ ((packed)); +struct tape_3590_rdc_data { +char data[64 ]; +} __attribute__ ((packed)); +/* Datastructures for 3592 encryption support */ struct tape3592_kekl {
drivers/s390/char/tape_core.c +2 -1
@@ -73,7 +73,7 @@ const char *tape_op_verbose[TO_SIZE] = [TO_DIS] = "DIS", [TO_ASSIGN] = "ASS", [TO_UNASSIGN] = "UAS", [TO_CRYPT_ON] = "CON", [TO_CRYPT_OFF] = "COF", [TO_KEKL_SET] = "KLS", - [TO_KEKL_QUERY] = "KLQ", + [TO_KEKL_QUERY] = "KLQ",[TO_RDC] = "RDC", }; static int
@@ -911,6 +911,7 @@ __tape_start_request(struct tape_device *device, struct tape_request *request)case TO_ASSIGN :case TO_UNASSIGN :case TO_READ_ATTMSG : +case TO_RDC :if (device->tape_state ==TS_INIT )break ;if (device->tape_state ==TS_UNUSED )
drivers/s390/cio/qdio.c +137 -103
402 lines not on this page · raw message
drivers/s390/cio/qdio.h +37 -15
58 lines not on this page · raw message
drivers/s390/net/qeth.h +3 -0
@@ -288,6 +288,7 @@ qeth_is_ipa_enabled(struct qeth_ipa_info *ipa, enum qeth_ipa_funcs func)*/ #define IF_NAME_LEN 16#define QETH_TX_TIMEOUT 100 * HZ +#define QETH_RCD_TIMEOUT 60 * HZ#define QETH_HEADER_SIZE 32#define MAX_PORTNO 15#define QETH_FAKE_LL_LEN_ETH ETH_HLEN
@@ -582,6 +583,8 @@ enum qeth_channel_states {CH_STATE_ACTIVATING ,CH_STATE_HALTED ,CH_STATE_STOPPED , +CH_STATE_RCD , + CH_STATE_RCD_DONE, };/** * card state machine
drivers/s390/net/qeth_main.c +72 -5
132 lines not on this page · raw message
drivers/s390/net/qeth_mpc.h +1 -0
@@ -37,6 +37,7 @@ extern unsigned char IPA_PDU_HEADER[];#define QETH_CLEAR_CHANNEL_PARM -10#define QETH_HALT_CHANNEL_PARM -11 +#define QETH_RCD_PARM -12/*****************************************************************************/ /* IP Assist related definitions */
include/asm-s390/ccwdev.h +3 -3
@@ -164,9 +164,9 @@ extern int ccw_device_resume(struct ccw_device *);extern int ccw_device_halt (struct ccw_device *,unsigned long );extern int ccw_device_clear (struct ccw_device *,unsigned long ); -extern int read_dev_chars (struct ccw_device *cdev,void **buffer,int length); -extern int read_conf_data (struct ccw_device *cdev,void **buffer,int *length); -extern int read_conf_data_lpm (struct ccw_device *cdev,void **buffer, +extern int __deprecated read_dev_chars (struct ccw_device *cdev,void **buffer,int length); +extern int __deprecated read_conf_data (struct ccw_device *cdev,void **buffer,int *length); +extern int __deprecated read_conf_data_lpm (struct ccw_device *cdev,void **buffer,int *length,__u8 lpm);extern int ccw_device_set_online (struct ccw_device *cdev);
include/asm-s390/elf.h +5 -2
@@ -188,7 +188,8 @@ static inline int dump_task_fpu(struct task_struct *tsk, elf_fpregset_t *fpregs)/* This yields a mask that user programs can use to figure out what instruction set this CPU supports. */ -#define ELF_HWCAP (0) +extern unsigned long elf_hwcap; +#define ELF_HWCAP (elf_hwcap)/* This yields a string that ld.so will use to load implementation specific libraries for optimization. This is more specific in
@@ -197,7 +198,9 @@ static inline int dump_task_fpu(struct task_struct *tsk, elf_fpregset_t *fpregs)For the moment, we have only optimizations for the Intel generations, but that could change... */ -#define ELF_PLATFORM (NULL) +#define ELF_PLATFORM_SIZE 8 +extern char elf_platform[]; +#define ELF_PLATFORM (elf_platform)#ifndef __s390x__#define SET_PERSONALITY (ex, ibcs2) set_personality((ibcs2)?PER_SVR4:PER_LINUX)
include/asm-s390/kdebug.h +15 -3
@@ -22,8 +22,21 @@ struct die_args {*/ extern int register_die_notifier (struct notifier_block *);extern int unregister_die_notifier (struct notifier_block *); -extern int register_page_fault_notifier (struct notifier_block *); -extern int unregister_page_fault_notifier (struct notifier_block *); + +/* +* These are only here because kprobes.c wants them to implement a +* blatant layering violation. Will hopefully go away soon once all +* architectures are updated. +*/ +static inline int register_page_fault_notifier (struct notifier_block *nb) +{ +return 0 ; +} +static inline int unregister_page_fault_notifier (struct notifier_block *nb) +{ +return 0 ; +} +extern struct atomic_notifier_head s390die_chain;enum die_val {
@@ -39,7 +52,6 @@ enum die_val {DIE_GPF ,DIE_CALL , DIE_NMI_IPI, - DIE_PAGE_FAULT, }; static inline int notify_die(enum die_val val, const char *str,
include/asm-s390/kprobes.h +4 -12
@@ -97,18 +97,10 @@ void kretprobe_trampoline(void);int is_prohibited_opcode (kprobe_opcode_t *instruction);void get_instruction_type (struct arch_specific_insn *ainsn); +int kprobe_fault_handler (struct pt_regs *regs,int trapnr); +int kprobe_exceptions_notify (struct notifier_block *self, +unsigned long val,void *data); +#define flush_insn_slot (p) do { } while (0)#endif /* _ASM_S390_KPROBES_H */ - -#ifdef CONFIG_KPROBES - -extern int kprobe_exceptions_notify (struct notifier_block *self, -unsigned long val,void *data); -#else /* !CONFIG_KPROBES */ -static inline int kprobe_exceptions_notify (struct notifier_block *self, -unsigned long val,void *data) -{ -return 0 ; -} -#endif
include/asm-s390/lowcore.h +6 -4
@@ -229,17 +229,19 @@ struct _lowcore__u16 subchannel_nr;/* 0x0ba */ __u32 io_int_parm;/* 0x0bc */ __u32 io_int_word;/* 0x0c0 */ -__u8 pad3[0xD4 -0xC4 ];/* 0x0c4 */ +__u8 pad3[0xc8 -0xc4 ];/* 0x0c4 */ +__u32 stfl_fac_list;/* 0x0c8 */ +__u8 pad4[0xd4 -0xcc ];/* 0x0cc */ __u32 extended_save_area_addr;/* 0x0d4 */ __u32 cpu_timer_save_area[2 ];/* 0x0d8 */ __u32 clock_comp_save_area[2 ];/* 0x0e0 */ __u32 mcck_interruption_code[2 ];/* 0x0e8 */ -__u8 pad4[0xf4 -0xf0 ];/* 0x0f0 */ +__u8 pad5[0xf4 -0xf0 ];/* 0x0f0 */ __u32 external_damage_code;/* 0x0f4 */ __u32 failing_storage_address;/* 0x0f8 */ -__u8 pad5[0x100 -0xfc ];/* 0x0fc */ +__u8 pad6[0x100 -0xfc ];/* 0x0fc */ __u32 st_status_fixed_logout[4 ];/* 0x100 */ -__u8 pad6[0x120 -0x110 ];/* 0x110 */ +__u8 pad7[0x120 -0x110 ];/* 0x110 */ __u32 access_regs_save_area[16 ];/* 0x120 */ __u32 floating_pt_save_area[8 ];/* 0x160 */ __u32 gpregs_save_area[16 ];/* 0x180 */