diff options
Diffstat (limited to 'arch/s390')
-rw-r--r-- | arch/s390/crypto/sha256_s390.c | 66 | ||||
-rw-r--r-- | arch/s390/kernel/module.c | 20 | ||||
-rw-r--r-- | arch/s390/kernel/traps.c | 4 | ||||
-rw-r--r-- | arch/s390/kvm/Kconfig | 1 | ||||
-rw-r--r-- | arch/s390/mm/fault.c | 6 |
5 files changed, 60 insertions, 37 deletions
diff --git a/arch/s390/crypto/sha256_s390.c b/arch/s390/crypto/sha256_s390.c index 5ed8d64fc2ed..0317a3547cb9 100644 --- a/arch/s390/crypto/sha256_s390.c +++ b/arch/s390/crypto/sha256_s390.c | |||
@@ -1,15 +1,12 @@ | |||
1 | /* | 1 | /* |
2 | * Cryptographic API. | 2 | * Cryptographic API. |
3 | * | 3 | * |
4 | * s390 implementation of the SHA256 Secure Hash Algorithm. | 4 | * s390 implementation of the SHA256 and SHA224 Secure Hash Algorithm. |
5 | * | 5 | * |
6 | * s390 Version: | 6 | * s390 Version: |
7 | * Copyright IBM Corp. 2005,2007 | 7 | * Copyright IBM Corp. 2005,2011 |
8 | * Author(s): Jan Glauber (jang@de.ibm.com) | 8 | * Author(s): Jan Glauber (jang@de.ibm.com) |
9 | * | 9 | * |
10 | * Derived from "crypto/sha256_generic.c" | ||
11 | * and "arch/s390/crypto/sha1_s390.c" | ||
12 | * | ||
13 | * This program is free software; you can redistribute it and/or modify it | 10 | * This program is free software; you can redistribute it and/or modify it |
14 | * under the terms of the GNU General Public License as published by the Free | 11 | * under the terms of the GNU General Public License as published by the Free |
15 | * Software Foundation; either version 2 of the License, or (at your option) | 12 | * Software Foundation; either version 2 of the License, or (at your option) |
@@ -65,7 +62,7 @@ static int sha256_import(struct shash_desc *desc, const void *in) | |||
65 | return 0; | 62 | return 0; |
66 | } | 63 | } |
67 | 64 | ||
68 | static struct shash_alg alg = { | 65 | static struct shash_alg sha256_alg = { |
69 | .digestsize = SHA256_DIGEST_SIZE, | 66 | .digestsize = SHA256_DIGEST_SIZE, |
70 | .init = sha256_init, | 67 | .init = sha256_init, |
71 | .update = s390_sha_update, | 68 | .update = s390_sha_update, |
@@ -84,22 +81,69 @@ static struct shash_alg alg = { | |||
84 | } | 81 | } |
85 | }; | 82 | }; |
86 | 83 | ||
87 | static int sha256_s390_init(void) | 84 | static int sha224_init(struct shash_desc *desc) |
88 | { | 85 | { |
86 | struct s390_sha_ctx *sctx = shash_desc_ctx(desc); | ||
87 | |||
88 | sctx->state[0] = SHA224_H0; | ||
89 | sctx->state[1] = SHA224_H1; | ||
90 | sctx->state[2] = SHA224_H2; | ||
91 | sctx->state[3] = SHA224_H3; | ||
92 | sctx->state[4] = SHA224_H4; | ||
93 | sctx->state[5] = SHA224_H5; | ||
94 | sctx->state[6] = SHA224_H6; | ||
95 | sctx->state[7] = SHA224_H7; | ||
96 | sctx->count = 0; | ||
97 | sctx->func = KIMD_SHA_256; | ||
98 | |||
99 | return 0; | ||
100 | } | ||
101 | |||
102 | static struct shash_alg sha224_alg = { | ||
103 | .digestsize = SHA224_DIGEST_SIZE, | ||
104 | .init = sha224_init, | ||
105 | .update = s390_sha_update, | ||
106 | .final = s390_sha_final, | ||
107 | .export = sha256_export, | ||
108 | .import = sha256_import, | ||
109 | .descsize = sizeof(struct s390_sha_ctx), | ||
110 | .statesize = sizeof(struct sha256_state), | ||
111 | .base = { | ||
112 | .cra_name = "sha224", | ||
113 | .cra_driver_name= "sha224-s390", | ||
114 | .cra_priority = CRYPT_S390_PRIORITY, | ||
115 | .cra_flags = CRYPTO_ALG_TYPE_SHASH, | ||
116 | .cra_blocksize = SHA224_BLOCK_SIZE, | ||
117 | .cra_module = THIS_MODULE, | ||
118 | } | ||
119 | }; | ||
120 | |||
121 | static int __init sha256_s390_init(void) | ||
122 | { | ||
123 | int ret; | ||
124 | |||
89 | if (!crypt_s390_func_available(KIMD_SHA_256, CRYPT_S390_MSA)) | 125 | if (!crypt_s390_func_available(KIMD_SHA_256, CRYPT_S390_MSA)) |
90 | return -EOPNOTSUPP; | 126 | return -EOPNOTSUPP; |
91 | 127 | ret = crypto_register_shash(&sha256_alg); | |
92 | return crypto_register_shash(&alg); | 128 | if (ret < 0) |
129 | goto out; | ||
130 | ret = crypto_register_shash(&sha224_alg); | ||
131 | if (ret < 0) | ||
132 | crypto_unregister_shash(&sha256_alg); | ||
133 | out: | ||
134 | return ret; | ||
93 | } | 135 | } |
94 | 136 | ||
95 | static void __exit sha256_s390_fini(void) | 137 | static void __exit sha256_s390_fini(void) |
96 | { | 138 | { |
97 | crypto_unregister_shash(&alg); | 139 | crypto_unregister_shash(&sha224_alg); |
140 | crypto_unregister_shash(&sha256_alg); | ||
98 | } | 141 | } |
99 | 142 | ||
100 | module_init(sha256_s390_init); | 143 | module_init(sha256_s390_init); |
101 | module_exit(sha256_s390_fini); | 144 | module_exit(sha256_s390_fini); |
102 | 145 | ||
103 | MODULE_ALIAS("sha256"); | 146 | MODULE_ALIAS("sha256"); |
147 | MODULE_ALIAS("sha224"); | ||
104 | MODULE_LICENSE("GPL"); | 148 | MODULE_LICENSE("GPL"); |
105 | MODULE_DESCRIPTION("SHA256 Secure Hash Algorithm"); | 149 | MODULE_DESCRIPTION("SHA256 and SHA224 Secure Hash Algorithm"); |
diff --git a/arch/s390/kernel/module.c b/arch/s390/kernel/module.c index f7167ee4604c..dfcb3436bad0 100644 --- a/arch/s390/kernel/module.c +++ b/arch/s390/kernel/module.c | |||
@@ -45,13 +45,6 @@ | |||
45 | #define PLT_ENTRY_SIZE 20 | 45 | #define PLT_ENTRY_SIZE 20 |
46 | #endif /* CONFIG_64BIT */ | 46 | #endif /* CONFIG_64BIT */ |
47 | 47 | ||
48 | void *module_alloc(unsigned long size) | ||
49 | { | ||
50 | if (size == 0) | ||
51 | return NULL; | ||
52 | return vmalloc(size); | ||
53 | } | ||
54 | |||
55 | /* Free memory returned from module_alloc */ | 48 | /* Free memory returned from module_alloc */ |
56 | void module_free(struct module *mod, void *module_region) | 49 | void module_free(struct module *mod, void *module_region) |
57 | { | 50 | { |
@@ -176,15 +169,6 @@ module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs, | |||
176 | return 0; | 169 | return 0; |
177 | } | 170 | } |
178 | 171 | ||
179 | int | ||
180 | apply_relocate(Elf_Shdr *sechdrs, const char *strtab, unsigned int symindex, | ||
181 | unsigned int relsec, struct module *me) | ||
182 | { | ||
183 | printk(KERN_ERR "module %s: RELOCATION unsupported\n", | ||
184 | me->name); | ||
185 | return -ENOEXEC; | ||
186 | } | ||
187 | |||
188 | static int | 172 | static int |
189 | apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab, | 173 | apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab, |
190 | struct module *me) | 174 | struct module *me) |
@@ -409,7 +393,3 @@ int module_finalize(const Elf_Ehdr *hdr, | |||
409 | me->arch.syminfo = NULL; | 393 | me->arch.syminfo = NULL; |
410 | return 0; | 394 | return 0; |
411 | } | 395 | } |
412 | |||
413 | void module_arch_cleanup(struct module *mod) | ||
414 | { | ||
415 | } | ||
diff --git a/arch/s390/kernel/traps.c b/arch/s390/kernel/traps.c index a65d2e82f61d..a63d34c3611e 100644 --- a/arch/s390/kernel/traps.c +++ b/arch/s390/kernel/traps.c | |||
@@ -331,7 +331,7 @@ void __kprobes do_per_trap(struct pt_regs *regs) | |||
331 | { | 331 | { |
332 | if (notify_die(DIE_SSTEP, "sstep", regs, 0, 0, SIGTRAP) == NOTIFY_STOP) | 332 | if (notify_die(DIE_SSTEP, "sstep", regs, 0, 0, SIGTRAP) == NOTIFY_STOP) |
333 | return; | 333 | return; |
334 | if (tracehook_consider_fatal_signal(current, SIGTRAP)) | 334 | if (current->ptrace) |
335 | force_sig(SIGTRAP, current); | 335 | force_sig(SIGTRAP, current); |
336 | } | 336 | } |
337 | 337 | ||
@@ -425,7 +425,7 @@ static void __kprobes illegal_op(struct pt_regs *regs, long pgm_int_code, | |||
425 | if (get_user(*((__u16 *) opcode), (__u16 __user *) location)) | 425 | if (get_user(*((__u16 *) opcode), (__u16 __user *) location)) |
426 | return; | 426 | return; |
427 | if (*((__u16 *) opcode) == S390_BREAKPOINT_U16) { | 427 | if (*((__u16 *) opcode) == S390_BREAKPOINT_U16) { |
428 | if (tracehook_consider_fatal_signal(current, SIGTRAP)) | 428 | if (current->ptrace) |
429 | force_sig(SIGTRAP, current); | 429 | force_sig(SIGTRAP, current); |
430 | else | 430 | else |
431 | signal = SIGILL; | 431 | signal = SIGILL; |
diff --git a/arch/s390/kvm/Kconfig b/arch/s390/kvm/Kconfig index f66a1bdbb61d..a21634173a66 100644 --- a/arch/s390/kvm/Kconfig +++ b/arch/s390/kvm/Kconfig | |||
@@ -37,6 +37,5 @@ config KVM | |||
37 | # OK, it's a little counter-intuitive to do this, but it puts it neatly under | 37 | # OK, it's a little counter-intuitive to do this, but it puts it neatly under |
38 | # the virtualization menu. | 38 | # the virtualization menu. |
39 | source drivers/vhost/Kconfig | 39 | source drivers/vhost/Kconfig |
40 | source drivers/virtio/Kconfig | ||
41 | 40 | ||
42 | endif # VIRTUALIZATION | 41 | endif # VIRTUALIZATION |
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c index fe103e891e7a..095f782a5512 100644 --- a/arch/s390/mm/fault.c +++ b/arch/s390/mm/fault.c | |||
@@ -299,7 +299,7 @@ static inline int do_exception(struct pt_regs *regs, int access, | |||
299 | goto out; | 299 | goto out; |
300 | 300 | ||
301 | address = trans_exc_code & __FAIL_ADDR_MASK; | 301 | address = trans_exc_code & __FAIL_ADDR_MASK; |
302 | perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, 0, regs, address); | 302 | perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); |
303 | flags = FAULT_FLAG_ALLOW_RETRY; | 303 | flags = FAULT_FLAG_ALLOW_RETRY; |
304 | if (access == VM_WRITE || (trans_exc_code & store_indication) == 0x400) | 304 | if (access == VM_WRITE || (trans_exc_code & store_indication) == 0x400) |
305 | flags |= FAULT_FLAG_WRITE; | 305 | flags |= FAULT_FLAG_WRITE; |
@@ -345,11 +345,11 @@ retry: | |||
345 | if (flags & FAULT_FLAG_ALLOW_RETRY) { | 345 | if (flags & FAULT_FLAG_ALLOW_RETRY) { |
346 | if (fault & VM_FAULT_MAJOR) { | 346 | if (fault & VM_FAULT_MAJOR) { |
347 | tsk->maj_flt++; | 347 | tsk->maj_flt++; |
348 | perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, 0, | 348 | perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, |
349 | regs, address); | 349 | regs, address); |
350 | } else { | 350 | } else { |
351 | tsk->min_flt++; | 351 | tsk->min_flt++; |
352 | perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, 0, | 352 | perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, |
353 | regs, address); | 353 | regs, address); |
354 | } | 354 | } |
355 | if (fault & VM_FAULT_RETRY) { | 355 | if (fault & VM_FAULT_RETRY) { |