diff options
| -rw-r--r-- | arch/s390/crypto/prng.c | 2 | ||||
| -rw-r--r-- | arch/s390/include/asm/pgtable.h | 2 | ||||
| -rw-r--r-- | arch/s390/net/bpf_jit_comp.c | 19 | ||||
| -rw-r--r-- | drivers/s390/crypto/ap_bus.c | 20 |
4 files changed, 21 insertions, 22 deletions
diff --git a/arch/s390/crypto/prng.c b/arch/s390/crypto/prng.c index 1f374b39a4ec..9d5192c94963 100644 --- a/arch/s390/crypto/prng.c +++ b/arch/s390/crypto/prng.c | |||
| @@ -125,7 +125,7 @@ static int generate_entropy(u8 *ebuf, size_t nbytes) | |||
| 125 | /* fill page with urandom bytes */ | 125 | /* fill page with urandom bytes */ |
| 126 | get_random_bytes(pg, PAGE_SIZE); | 126 | get_random_bytes(pg, PAGE_SIZE); |
| 127 | /* exor page with stckf values */ | 127 | /* exor page with stckf values */ |
| 128 | for (n = 0; n < sizeof(PAGE_SIZE/sizeof(u64)); n++) { | 128 | for (n = 0; n < PAGE_SIZE / sizeof(u64); n++) { |
| 129 | u64 *p = ((u64 *)pg) + n; | 129 | u64 *p = ((u64 *)pg) + n; |
| 130 | *p ^= get_tod_clock_fast(); | 130 | *p ^= get_tod_clock_fast(); |
| 131 | } | 131 | } |
diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h index fc642399b489..ef24a212eeb7 100644 --- a/arch/s390/include/asm/pgtable.h +++ b/arch/s390/include/asm/pgtable.h | |||
| @@ -494,7 +494,7 @@ static inline int pmd_large(pmd_t pmd) | |||
| 494 | return (pmd_val(pmd) & _SEGMENT_ENTRY_LARGE) != 0; | 494 | return (pmd_val(pmd) & _SEGMENT_ENTRY_LARGE) != 0; |
| 495 | } | 495 | } |
| 496 | 496 | ||
| 497 | static inline int pmd_pfn(pmd_t pmd) | 497 | static inline unsigned long pmd_pfn(pmd_t pmd) |
| 498 | { | 498 | { |
| 499 | unsigned long origin_mask; | 499 | unsigned long origin_mask; |
| 500 | 500 | ||
diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c index 7690dc8e1ab5..20c146d1251a 100644 --- a/arch/s390/net/bpf_jit_comp.c +++ b/arch/s390/net/bpf_jit_comp.c | |||
| @@ -443,8 +443,11 @@ static void bpf_jit_epilogue(struct bpf_jit *jit) | |||
| 443 | 443 | ||
| 444 | /* | 444 | /* |
| 445 | * Compile one eBPF instruction into s390x code | 445 | * Compile one eBPF instruction into s390x code |
| 446 | * | ||
| 447 | * NOTE: Use noinline because for gcov (-fprofile-arcs) gcc allocates a lot of | ||
| 448 | * stack space for the large switch statement. | ||
| 446 | */ | 449 | */ |
| 447 | static int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp, int i) | 450 | static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp, int i) |
| 448 | { | 451 | { |
| 449 | struct bpf_insn *insn = &fp->insnsi[i]; | 452 | struct bpf_insn *insn = &fp->insnsi[i]; |
| 450 | int jmp_off, last, insn_count = 1; | 453 | int jmp_off, last, insn_count = 1; |
| @@ -588,8 +591,8 @@ static int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp, int i) | |||
| 588 | EMIT4(0xb9160000, dst_reg, rc_reg); | 591 | EMIT4(0xb9160000, dst_reg, rc_reg); |
| 589 | break; | 592 | break; |
| 590 | } | 593 | } |
| 591 | case BPF_ALU64 | BPF_DIV | BPF_X: /* dst = dst / (u32) src */ | 594 | case BPF_ALU64 | BPF_DIV | BPF_X: /* dst = dst / src */ |
| 592 | case BPF_ALU64 | BPF_MOD | BPF_X: /* dst = dst % (u32) src */ | 595 | case BPF_ALU64 | BPF_MOD | BPF_X: /* dst = dst % src */ |
| 593 | { | 596 | { |
| 594 | int rc_reg = BPF_OP(insn->code) == BPF_DIV ? REG_W1 : REG_W0; | 597 | int rc_reg = BPF_OP(insn->code) == BPF_DIV ? REG_W1 : REG_W0; |
| 595 | 598 | ||
| @@ -602,10 +605,8 @@ static int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp, int i) | |||
| 602 | EMIT4_IMM(0xa7090000, REG_W0, 0); | 605 | EMIT4_IMM(0xa7090000, REG_W0, 0); |
| 603 | /* lgr %w1,%dst */ | 606 | /* lgr %w1,%dst */ |
| 604 | EMIT4(0xb9040000, REG_W1, dst_reg); | 607 | EMIT4(0xb9040000, REG_W1, dst_reg); |
| 605 | /* llgfr %dst,%src (u32 cast) */ | ||
| 606 | EMIT4(0xb9160000, dst_reg, src_reg); | ||
| 607 | /* dlgr %w0,%dst */ | 608 | /* dlgr %w0,%dst */ |
| 608 | EMIT4(0xb9870000, REG_W0, dst_reg); | 609 | EMIT4(0xb9870000, REG_W0, src_reg); |
| 609 | /* lgr %dst,%rc */ | 610 | /* lgr %dst,%rc */ |
| 610 | EMIT4(0xb9040000, dst_reg, rc_reg); | 611 | EMIT4(0xb9040000, dst_reg, rc_reg); |
| 611 | break; | 612 | break; |
| @@ -632,8 +633,8 @@ static int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp, int i) | |||
| 632 | EMIT4(0xb9160000, dst_reg, rc_reg); | 633 | EMIT4(0xb9160000, dst_reg, rc_reg); |
| 633 | break; | 634 | break; |
| 634 | } | 635 | } |
| 635 | case BPF_ALU64 | BPF_DIV | BPF_K: /* dst = dst / (u32) imm */ | 636 | case BPF_ALU64 | BPF_DIV | BPF_K: /* dst = dst / imm */ |
| 636 | case BPF_ALU64 | BPF_MOD | BPF_K: /* dst = dst % (u32) imm */ | 637 | case BPF_ALU64 | BPF_MOD | BPF_K: /* dst = dst % imm */ |
| 637 | { | 638 | { |
| 638 | int rc_reg = BPF_OP(insn->code) == BPF_DIV ? REG_W1 : REG_W0; | 639 | int rc_reg = BPF_OP(insn->code) == BPF_DIV ? REG_W1 : REG_W0; |
| 639 | 640 | ||
| @@ -649,7 +650,7 @@ static int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp, int i) | |||
| 649 | EMIT4(0xb9040000, REG_W1, dst_reg); | 650 | EMIT4(0xb9040000, REG_W1, dst_reg); |
| 650 | /* dlg %w0,<d(imm)>(%l) */ | 651 | /* dlg %w0,<d(imm)>(%l) */ |
| 651 | EMIT6_DISP_LH(0xe3000000, 0x0087, REG_W0, REG_0, REG_L, | 652 | EMIT6_DISP_LH(0xe3000000, 0x0087, REG_W0, REG_0, REG_L, |
| 652 | EMIT_CONST_U64((u32) imm)); | 653 | EMIT_CONST_U64(imm)); |
| 653 | /* lgr %dst,%rc */ | 654 | /* lgr %dst,%rc */ |
| 654 | EMIT4(0xb9040000, dst_reg, rc_reg); | 655 | EMIT4(0xb9040000, dst_reg, rc_reg); |
| 655 | break; | 656 | break; |
diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c index f0b9871a4bbd..3ba611419759 100644 --- a/drivers/s390/crypto/ap_bus.c +++ b/drivers/s390/crypto/ap_bus.c | |||
| @@ -1158,11 +1158,12 @@ static ssize_t poll_timeout_store(struct bus_type *bus, const char *buf, | |||
| 1158 | poll_timeout = time; | 1158 | poll_timeout = time; |
| 1159 | hr_time = ktime_set(0, poll_timeout); | 1159 | hr_time = ktime_set(0, poll_timeout); |
| 1160 | 1160 | ||
| 1161 | if (!hrtimer_is_queued(&ap_poll_timer) || | 1161 | spin_lock_bh(&ap_poll_timer_lock); |
| 1162 | !hrtimer_forward(&ap_poll_timer, hrtimer_get_expires(&ap_poll_timer), hr_time)) { | 1162 | hrtimer_cancel(&ap_poll_timer); |
| 1163 | hrtimer_set_expires(&ap_poll_timer, hr_time); | 1163 | hrtimer_set_expires(&ap_poll_timer, hr_time); |
| 1164 | hrtimer_start_expires(&ap_poll_timer, HRTIMER_MODE_ABS); | 1164 | hrtimer_start_expires(&ap_poll_timer, HRTIMER_MODE_ABS); |
| 1165 | } | 1165 | spin_unlock_bh(&ap_poll_timer_lock); |
| 1166 | |||
| 1166 | return count; | 1167 | return count; |
| 1167 | } | 1168 | } |
| 1168 | 1169 | ||
| @@ -1528,14 +1529,11 @@ static inline void __ap_schedule_poll_timer(void) | |||
| 1528 | ktime_t hr_time; | 1529 | ktime_t hr_time; |
| 1529 | 1530 | ||
| 1530 | spin_lock_bh(&ap_poll_timer_lock); | 1531 | spin_lock_bh(&ap_poll_timer_lock); |
| 1531 | if (hrtimer_is_queued(&ap_poll_timer) || ap_suspend_flag) | 1532 | if (!hrtimer_is_queued(&ap_poll_timer) && !ap_suspend_flag) { |
| 1532 | goto out; | ||
| 1533 | if (ktime_to_ns(hrtimer_expires_remaining(&ap_poll_timer)) <= 0) { | ||
| 1534 | hr_time = ktime_set(0, poll_timeout); | 1533 | hr_time = ktime_set(0, poll_timeout); |
| 1535 | hrtimer_forward_now(&ap_poll_timer, hr_time); | 1534 | hrtimer_forward_now(&ap_poll_timer, hr_time); |
| 1536 | hrtimer_restart(&ap_poll_timer); | 1535 | hrtimer_restart(&ap_poll_timer); |
| 1537 | } | 1536 | } |
| 1538 | out: | ||
| 1539 | spin_unlock_bh(&ap_poll_timer_lock); | 1537 | spin_unlock_bh(&ap_poll_timer_lock); |
| 1540 | } | 1538 | } |
| 1541 | 1539 | ||
| @@ -1952,7 +1950,7 @@ static void ap_reset_domain(void) | |||
| 1952 | { | 1950 | { |
| 1953 | int i; | 1951 | int i; |
| 1954 | 1952 | ||
| 1955 | if (ap_domain_index != -1) | 1953 | if ((ap_domain_index != -1) && (ap_test_config_domain(ap_domain_index))) |
| 1956 | for (i = 0; i < AP_DEVICES; i++) | 1954 | for (i = 0; i < AP_DEVICES; i++) |
| 1957 | ap_reset_queue(AP_MKQID(i, ap_domain_index)); | 1955 | ap_reset_queue(AP_MKQID(i, ap_domain_index)); |
| 1958 | } | 1956 | } |
| @@ -2097,7 +2095,6 @@ void ap_module_exit(void) | |||
| 2097 | hrtimer_cancel(&ap_poll_timer); | 2095 | hrtimer_cancel(&ap_poll_timer); |
| 2098 | destroy_workqueue(ap_work_queue); | 2096 | destroy_workqueue(ap_work_queue); |
| 2099 | tasklet_kill(&ap_tasklet); | 2097 | tasklet_kill(&ap_tasklet); |
| 2100 | root_device_unregister(ap_root_device); | ||
| 2101 | while ((dev = bus_find_device(&ap_bus_type, NULL, NULL, | 2098 | while ((dev = bus_find_device(&ap_bus_type, NULL, NULL, |
| 2102 | __ap_match_all))) | 2099 | __ap_match_all))) |
| 2103 | { | 2100 | { |
| @@ -2106,6 +2103,7 @@ void ap_module_exit(void) | |||
| 2106 | } | 2103 | } |
| 2107 | for (i = 0; ap_bus_attrs[i]; i++) | 2104 | for (i = 0; ap_bus_attrs[i]; i++) |
| 2108 | bus_remove_file(&ap_bus_type, ap_bus_attrs[i]); | 2105 | bus_remove_file(&ap_bus_type, ap_bus_attrs[i]); |
| 2106 | root_device_unregister(ap_root_device); | ||
| 2109 | bus_unregister(&ap_bus_type); | 2107 | bus_unregister(&ap_bus_type); |
| 2110 | unregister_reset_call(&ap_reset_call); | 2108 | unregister_reset_call(&ap_reset_call); |
| 2111 | if (ap_using_interrupts()) | 2109 | if (ap_using_interrupts()) |
