diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2016-09-01 12:33:46 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2016-09-01 12:33:46 -0400 |
commit | 0cb7bf61b1e9f05027de58c80f9b46a714d24e35 (patch) | |
tree | 41fb55cf62d07b425122f9a8b96412c0d8eb99c5 /arch/s390 | |
parent | aa877175e7a9982233ed8f10cb4bfddd78d82741 (diff) | |
parent | 3eab887a55424fc2c27553b7bfe32330df83f7b8 (diff) |
Merge branch 'linus' into smp/hotplug
Apply upstream changes to avoid conflicts with pending patches.
Diffstat (limited to 'arch/s390')
-rw-r--r-- | arch/s390/Kconfig | 13 | ||||
-rw-r--r-- | arch/s390/boot/compressed/head.S | 11 | ||||
-rw-r--r-- | arch/s390/configs/default_defconfig | 2 | ||||
-rw-r--r-- | arch/s390/configs/gcov_defconfig | 2 | ||||
-rw-r--r-- | arch/s390/configs/performance_defconfig | 2 | ||||
-rw-r--r-- | arch/s390/crypto/crc32-vx.c | 6 | ||||
-rw-r--r-- | arch/s390/defconfig | 2 | ||||
-rw-r--r-- | arch/s390/kernel/head.S | 4 | ||||
-rw-r--r-- | arch/s390/kernel/setup.c | 6 | ||||
-rw-r--r-- | arch/s390/kvm/kvm-s390.c | 5 | ||||
-rw-r--r-- | arch/s390/lib/string.c | 16 | ||||
-rw-r--r-- | arch/s390/mm/pageattr.c | 2 |
12 files changed, 46 insertions, 25 deletions
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index 0e348781327b..e751fe25d6ab 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig | |||
@@ -872,4 +872,17 @@ config S390_GUEST | |||
872 | Select this option if you want to run the kernel as a guest under | 872 | Select this option if you want to run the kernel as a guest under |
873 | the KVM hypervisor. | 873 | the KVM hypervisor. |
874 | 874 | ||
875 | config S390_GUEST_OLD_TRANSPORT | ||
876 | def_bool y | ||
877 | prompt "Guest support for old s390 virtio transport (DEPRECATED)" | ||
878 | depends on S390_GUEST | ||
879 | help | ||
880 | Enable this option to add support for the old s390-virtio | ||
881 | transport (i.e. virtio devices NOT based on virtio-ccw). This | ||
882 | type of virtio devices is only available on the experimental | ||
883 | kuli userspace or with old (< 2.6) qemu. If you are running | ||
884 | with a modern version of qemu (which supports virtio-ccw since | ||
885 | 1.4 and uses it by default since version 2.4), you probably won't | ||
886 | need this. | ||
887 | |||
875 | endmenu | 888 | endmenu |
diff --git a/arch/s390/boot/compressed/head.S b/arch/s390/boot/compressed/head.S index f86a4eef28a9..28c4f96a2d9c 100644 --- a/arch/s390/boot/compressed/head.S +++ b/arch/s390/boot/compressed/head.S | |||
@@ -21,16 +21,21 @@ ENTRY(startup_continue) | |||
21 | lg %r15,.Lstack-.LPG1(%r13) | 21 | lg %r15,.Lstack-.LPG1(%r13) |
22 | aghi %r15,-160 | 22 | aghi %r15,-160 |
23 | brasl %r14,decompress_kernel | 23 | brasl %r14,decompress_kernel |
24 | # setup registers for memory mover & branch to target | 24 | # Set up registers for memory mover. We move the decompressed image to |
25 | # 0x11000, starting at offset 0x11000 in the decompressed image so | ||
26 | # that code living at 0x11000 in the image will end up at 0x11000 in | ||
27 | # memory. | ||
25 | lgr %r4,%r2 | 28 | lgr %r4,%r2 |
26 | lg %r2,.Loffset-.LPG1(%r13) | 29 | lg %r2,.Loffset-.LPG1(%r13) |
27 | la %r4,0(%r2,%r4) | 30 | la %r4,0(%r2,%r4) |
28 | lg %r3,.Lmvsize-.LPG1(%r13) | 31 | lg %r3,.Lmvsize-.LPG1(%r13) |
29 | lgr %r5,%r3 | 32 | lgr %r5,%r3 |
30 | # move the memory mover someplace safe | 33 | # Move the memory mover someplace safe so it doesn't overwrite itself. |
31 | la %r1,0x200 | 34 | la %r1,0x200 |
32 | mvc 0(mover_end-mover,%r1),mover-.LPG1(%r13) | 35 | mvc 0(mover_end-mover,%r1),mover-.LPG1(%r13) |
33 | # decompress image is started at 0x11000 | 36 | # When the memory mover is done we pass control to |
37 | # arch/s390/kernel/head64.S:startup_continue which lives at 0x11000 in | ||
38 | # the decompressed image. | ||
34 | lgr %r6,%r2 | 39 | lgr %r6,%r2 |
35 | br %r1 | 40 | br %r1 |
36 | mover: | 41 | mover: |
diff --git a/arch/s390/configs/default_defconfig b/arch/s390/configs/default_defconfig index 889ea3450210..26e0c7f08814 100644 --- a/arch/s390/configs/default_defconfig +++ b/arch/s390/configs/default_defconfig | |||
@@ -678,7 +678,7 @@ CONFIG_CRYPTO_SHA512_S390=m | |||
678 | CONFIG_CRYPTO_DES_S390=m | 678 | CONFIG_CRYPTO_DES_S390=m |
679 | CONFIG_CRYPTO_AES_S390=m | 679 | CONFIG_CRYPTO_AES_S390=m |
680 | CONFIG_CRYPTO_GHASH_S390=m | 680 | CONFIG_CRYPTO_GHASH_S390=m |
681 | CONFIG_CRYPTO_CRC32_S390=m | 681 | CONFIG_CRYPTO_CRC32_S390=y |
682 | CONFIG_ASYMMETRIC_KEY_TYPE=y | 682 | CONFIG_ASYMMETRIC_KEY_TYPE=y |
683 | CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m | 683 | CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m |
684 | CONFIG_X509_CERTIFICATE_PARSER=m | 684 | CONFIG_X509_CERTIFICATE_PARSER=m |
diff --git a/arch/s390/configs/gcov_defconfig b/arch/s390/configs/gcov_defconfig index 1bcfd764910a..24879dab47bc 100644 --- a/arch/s390/configs/gcov_defconfig +++ b/arch/s390/configs/gcov_defconfig | |||
@@ -616,7 +616,7 @@ CONFIG_CRYPTO_SHA512_S390=m | |||
616 | CONFIG_CRYPTO_DES_S390=m | 616 | CONFIG_CRYPTO_DES_S390=m |
617 | CONFIG_CRYPTO_AES_S390=m | 617 | CONFIG_CRYPTO_AES_S390=m |
618 | CONFIG_CRYPTO_GHASH_S390=m | 618 | CONFIG_CRYPTO_GHASH_S390=m |
619 | CONFIG_CRYPTO_CRC32_S390=m | 619 | CONFIG_CRYPTO_CRC32_S390=y |
620 | CONFIG_ASYMMETRIC_KEY_TYPE=y | 620 | CONFIG_ASYMMETRIC_KEY_TYPE=y |
621 | CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m | 621 | CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m |
622 | CONFIG_X509_CERTIFICATE_PARSER=m | 622 | CONFIG_X509_CERTIFICATE_PARSER=m |
diff --git a/arch/s390/configs/performance_defconfig b/arch/s390/configs/performance_defconfig index 13ff090139c8..a5c1e5f2a0ca 100644 --- a/arch/s390/configs/performance_defconfig +++ b/arch/s390/configs/performance_defconfig | |||
@@ -615,7 +615,7 @@ CONFIG_CRYPTO_SHA512_S390=m | |||
615 | CONFIG_CRYPTO_DES_S390=m | 615 | CONFIG_CRYPTO_DES_S390=m |
616 | CONFIG_CRYPTO_AES_S390=m | 616 | CONFIG_CRYPTO_AES_S390=m |
617 | CONFIG_CRYPTO_GHASH_S390=m | 617 | CONFIG_CRYPTO_GHASH_S390=m |
618 | CONFIG_CRYPTO_CRC32_S390=m | 618 | CONFIG_CRYPTO_CRC32_S390=y |
619 | CONFIG_ASYMMETRIC_KEY_TYPE=y | 619 | CONFIG_ASYMMETRIC_KEY_TYPE=y |
620 | CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m | 620 | CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m |
621 | CONFIG_X509_CERTIFICATE_PARSER=m | 621 | CONFIG_X509_CERTIFICATE_PARSER=m |
diff --git a/arch/s390/crypto/crc32-vx.c b/arch/s390/crypto/crc32-vx.c index 577ae1d4ae89..2bad9d837029 100644 --- a/arch/s390/crypto/crc32-vx.c +++ b/arch/s390/crypto/crc32-vx.c | |||
@@ -51,6 +51,9 @@ u32 crc32c_le_vgfm_16(u32 crc, unsigned char const *buf, size_t size); | |||
51 | struct kernel_fpu vxstate; \ | 51 | struct kernel_fpu vxstate; \ |
52 | unsigned long prealign, aligned, remaining; \ | 52 | unsigned long prealign, aligned, remaining; \ |
53 | \ | 53 | \ |
54 | if (datalen < VX_MIN_LEN + VX_ALIGN_MASK) \ | ||
55 | return ___crc32_sw(crc, data, datalen); \ | ||
56 | \ | ||
54 | if ((unsigned long)data & VX_ALIGN_MASK) { \ | 57 | if ((unsigned long)data & VX_ALIGN_MASK) { \ |
55 | prealign = VX_ALIGNMENT - \ | 58 | prealign = VX_ALIGNMENT - \ |
56 | ((unsigned long)data & VX_ALIGN_MASK); \ | 59 | ((unsigned long)data & VX_ALIGN_MASK); \ |
@@ -59,9 +62,6 @@ u32 crc32c_le_vgfm_16(u32 crc, unsigned char const *buf, size_t size); | |||
59 | data = (void *)((unsigned long)data + prealign); \ | 62 | data = (void *)((unsigned long)data + prealign); \ |
60 | } \ | 63 | } \ |
61 | \ | 64 | \ |
62 | if (datalen < VX_MIN_LEN) \ | ||
63 | return ___crc32_sw(crc, data, datalen); \ | ||
64 | \ | ||
65 | aligned = datalen & ~VX_ALIGN_MASK; \ | 65 | aligned = datalen & ~VX_ALIGN_MASK; \ |
66 | remaining = datalen & VX_ALIGN_MASK; \ | 66 | remaining = datalen & VX_ALIGN_MASK; \ |
67 | \ | 67 | \ |
diff --git a/arch/s390/defconfig b/arch/s390/defconfig index ccccebeeaaf6..73610f2e3b4f 100644 --- a/arch/s390/defconfig +++ b/arch/s390/defconfig | |||
@@ -234,7 +234,7 @@ CONFIG_CRYPTO_SHA256_S390=m | |||
234 | CONFIG_CRYPTO_SHA512_S390=m | 234 | CONFIG_CRYPTO_SHA512_S390=m |
235 | CONFIG_CRYPTO_DES_S390=m | 235 | CONFIG_CRYPTO_DES_S390=m |
236 | CONFIG_CRYPTO_AES_S390=m | 236 | CONFIG_CRYPTO_AES_S390=m |
237 | CONFIG_CRYPTO_CRC32_S390=m | 237 | CONFIG_CRYPTO_CRC32_S390=y |
238 | CONFIG_CRC7=m | 238 | CONFIG_CRC7=m |
239 | # CONFIG_XZ_DEC_X86 is not set | 239 | # CONFIG_XZ_DEC_X86 is not set |
240 | # CONFIG_XZ_DEC_POWERPC is not set | 240 | # CONFIG_XZ_DEC_POWERPC is not set |
diff --git a/arch/s390/kernel/head.S b/arch/s390/kernel/head.S index 56e4d8234ef2..4431905f8cfa 100644 --- a/arch/s390/kernel/head.S +++ b/arch/s390/kernel/head.S | |||
@@ -309,7 +309,9 @@ ENTRY(startup_kdump) | |||
309 | l %r15,.Lstack-.LPG0(%r13) | 309 | l %r15,.Lstack-.LPG0(%r13) |
310 | ahi %r15,-STACK_FRAME_OVERHEAD | 310 | ahi %r15,-STACK_FRAME_OVERHEAD |
311 | brasl %r14,verify_facilities | 311 | brasl %r14,verify_facilities |
312 | /* Continue with startup code in head64.S */ | 312 | # For uncompressed images, continue in |
313 | # arch/s390/kernel/head64.S. For compressed images, continue in | ||
314 | # arch/s390/boot/compressed/head.S. | ||
313 | jg startup_continue | 315 | jg startup_continue |
314 | 316 | ||
315 | .Lstack: | 317 | .Lstack: |
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c index ba5f456edaa9..7f7ba5f23f13 100644 --- a/arch/s390/kernel/setup.c +++ b/arch/s390/kernel/setup.c | |||
@@ -204,11 +204,9 @@ static void __init conmode_default(void) | |||
204 | #endif | 204 | #endif |
205 | } | 205 | } |
206 | } else if (MACHINE_IS_KVM) { | 206 | } else if (MACHINE_IS_KVM) { |
207 | if (sclp.has_vt220 && | 207 | if (sclp.has_vt220 && IS_ENABLED(CONFIG_SCLP_VT220_CONSOLE)) |
208 | config_enabled(CONFIG_SCLP_VT220_CONSOLE)) | ||
209 | SET_CONSOLE_VT220; | 208 | SET_CONSOLE_VT220; |
210 | else if (sclp.has_linemode && | 209 | else if (sclp.has_linemode && IS_ENABLED(CONFIG_SCLP_CONSOLE)) |
211 | config_enabled(CONFIG_SCLP_CONSOLE)) | ||
212 | SET_CONSOLE_SCLP; | 210 | SET_CONSOLE_SCLP; |
213 | else | 211 | else |
214 | SET_CONSOLE_HVC; | 212 | SET_CONSOLE_HVC; |
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c index 3f3ae4865d57..f142215ed30d 100644 --- a/arch/s390/kvm/kvm-s390.c +++ b/arch/s390/kvm/kvm-s390.c | |||
@@ -1672,6 +1672,7 @@ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu) | |||
1672 | KVM_SYNC_CRS | | 1672 | KVM_SYNC_CRS | |
1673 | KVM_SYNC_ARCH0 | | 1673 | KVM_SYNC_ARCH0 | |
1674 | KVM_SYNC_PFAULT; | 1674 | KVM_SYNC_PFAULT; |
1675 | kvm_s390_set_prefix(vcpu, 0); | ||
1675 | if (test_kvm_facility(vcpu->kvm, 64)) | 1676 | if (test_kvm_facility(vcpu->kvm, 64)) |
1676 | vcpu->run->kvm_valid_regs |= KVM_SYNC_RICCB; | 1677 | vcpu->run->kvm_valid_regs |= KVM_SYNC_RICCB; |
1677 | /* fprs can be synchronized via vrs, even if the guest has no vx. With | 1678 | /* fprs can be synchronized via vrs, even if the guest has no vx. With |
@@ -2361,8 +2362,10 @@ retry: | |||
2361 | rc = gmap_mprotect_notify(vcpu->arch.gmap, | 2362 | rc = gmap_mprotect_notify(vcpu->arch.gmap, |
2362 | kvm_s390_get_prefix(vcpu), | 2363 | kvm_s390_get_prefix(vcpu), |
2363 | PAGE_SIZE * 2, PROT_WRITE); | 2364 | PAGE_SIZE * 2, PROT_WRITE); |
2364 | if (rc) | 2365 | if (rc) { |
2366 | kvm_make_request(KVM_REQ_MMU_RELOAD, vcpu); | ||
2365 | return rc; | 2367 | return rc; |
2368 | } | ||
2366 | goto retry; | 2369 | goto retry; |
2367 | } | 2370 | } |
2368 | 2371 | ||
diff --git a/arch/s390/lib/string.c b/arch/s390/lib/string.c index e390bbb16443..48352bffbc92 100644 --- a/arch/s390/lib/string.c +++ b/arch/s390/lib/string.c | |||
@@ -237,11 +237,10 @@ char * strrchr(const char * s, int c) | |||
237 | EXPORT_SYMBOL(strrchr); | 237 | EXPORT_SYMBOL(strrchr); |
238 | 238 | ||
239 | static inline int clcle(const char *s1, unsigned long l1, | 239 | static inline int clcle(const char *s1, unsigned long l1, |
240 | const char *s2, unsigned long l2, | 240 | const char *s2, unsigned long l2) |
241 | int *diff) | ||
242 | { | 241 | { |
243 | register unsigned long r2 asm("2") = (unsigned long) s1; | 242 | register unsigned long r2 asm("2") = (unsigned long) s1; |
244 | register unsigned long r3 asm("3") = (unsigned long) l2; | 243 | register unsigned long r3 asm("3") = (unsigned long) l1; |
245 | register unsigned long r4 asm("4") = (unsigned long) s2; | 244 | register unsigned long r4 asm("4") = (unsigned long) s2; |
246 | register unsigned long r5 asm("5") = (unsigned long) l2; | 245 | register unsigned long r5 asm("5") = (unsigned long) l2; |
247 | int cc; | 246 | int cc; |
@@ -252,7 +251,6 @@ static inline int clcle(const char *s1, unsigned long l1, | |||
252 | " srl %0,28" | 251 | " srl %0,28" |
253 | : "=&d" (cc), "+a" (r2), "+a" (r3), | 252 | : "=&d" (cc), "+a" (r2), "+a" (r3), |
254 | "+a" (r4), "+a" (r5) : : "cc"); | 253 | "+a" (r4), "+a" (r5) : : "cc"); |
255 | *diff = *(char *)r2 - *(char *)r4; | ||
256 | return cc; | 254 | return cc; |
257 | } | 255 | } |
258 | 256 | ||
@@ -270,9 +268,9 @@ char * strstr(const char * s1,const char * s2) | |||
270 | return (char *) s1; | 268 | return (char *) s1; |
271 | l1 = __strend(s1) - s1; | 269 | l1 = __strend(s1) - s1; |
272 | while (l1-- >= l2) { | 270 | while (l1-- >= l2) { |
273 | int cc, dummy; | 271 | int cc; |
274 | 272 | ||
275 | cc = clcle(s1, l1, s2, l2, &dummy); | 273 | cc = clcle(s1, l2, s2, l2); |
276 | if (!cc) | 274 | if (!cc) |
277 | return (char *) s1; | 275 | return (char *) s1; |
278 | s1++; | 276 | s1++; |
@@ -313,11 +311,11 @@ EXPORT_SYMBOL(memchr); | |||
313 | */ | 311 | */ |
314 | int memcmp(const void *cs, const void *ct, size_t n) | 312 | int memcmp(const void *cs, const void *ct, size_t n) |
315 | { | 313 | { |
316 | int ret, diff; | 314 | int ret; |
317 | 315 | ||
318 | ret = clcle(cs, n, ct, n, &diff); | 316 | ret = clcle(cs, n, ct, n); |
319 | if (ret) | 317 | if (ret) |
320 | ret = diff; | 318 | ret = ret == 1 ? -1 : 1; |
321 | return ret; | 319 | return ret; |
322 | } | 320 | } |
323 | EXPORT_SYMBOL(memcmp); | 321 | EXPORT_SYMBOL(memcmp); |
diff --git a/arch/s390/mm/pageattr.c b/arch/s390/mm/pageattr.c index 7104ffb5a67f..af7cf28cf97e 100644 --- a/arch/s390/mm/pageattr.c +++ b/arch/s390/mm/pageattr.c | |||
@@ -252,6 +252,8 @@ static int change_page_attr(unsigned long addr, unsigned long end, | |||
252 | int rc = -EINVAL; | 252 | int rc = -EINVAL; |
253 | pgd_t *pgdp; | 253 | pgd_t *pgdp; |
254 | 254 | ||
255 | if (addr == end) | ||
256 | return 0; | ||
255 | if (end >= MODULES_END) | 257 | if (end >= MODULES_END) |
256 | return -EINVAL; | 258 | return -EINVAL; |
257 | mutex_lock(&cpa_mutex); | 259 | mutex_lock(&cpa_mutex); |