Loading arch/s390/kernel/head.S +1 −1 Original line number Original line Diff line number Diff line Loading @@ -460,7 +460,7 @@ startup: #ifndef CONFIG_MARCH_G5 #ifndef CONFIG_MARCH_G5 # check capabilities against MARCH_{G5,Z900,Z990,Z9_109,Z10} # check capabilities against MARCH_{G5,Z900,Z990,Z9_109,Z10} xc __LC_STFL_FAC_LIST(8),__LC_STFL_FAC_LIST xc __LC_STFL_FAC_LIST(8),__LC_STFL_FAC_LIST stfl __LC_STFL_FAC_LIST # store facility list .insn s,0xb2b10000,__LC_STFL_FAC_LIST # store facility list tm __LC_STFL_FAC_LIST,0x01 # stfle available ? tm __LC_STFL_FAC_LIST,0x01 # stfle available ? jz 0f jz 0f la %r0,0 la %r0,0 Loading arch/s390/kernel/switch_cpu.S +3 −1 Original line number Original line Diff line number Diff line Loading @@ -46,7 +46,9 @@ smp_restart_cpu: ltr %r4,%r4 /* New stack ? */ ltr %r4,%r4 /* New stack ? */ jz 1f jz 1f lr %r15,%r4 lr %r15,%r4 1: basr %r14,%r2 1: lr %r14,%r2 /* r14: Function to call */ lr %r2,%r3 /* r2 : Parameter for function*/ basr %r14,%r14 /* Call function */ .gprregs_addr: .gprregs_addr: .long .gprregs .long .gprregs Loading arch/s390/kernel/switch_cpu64.S +3 −1 Original line number Original line Diff line number Diff line Loading @@ -42,7 +42,9 @@ smp_restart_cpu: ltgr %r4,%r4 /* New stack ? */ ltgr %r4,%r4 /* New stack ? */ jz 1f jz 1f lgr %r15,%r4 lgr %r15,%r4 1: basr %r14,%r2 1: lgr %r14,%r2 /* r14: Function to call */ lgr %r2,%r3 /* r2 : Parameter for function*/ basr %r14,%r14 /* Call function */ .section .data,"aw",@progbits .section .data,"aw",@progbits .gprregs: .gprregs: Loading arch/s390/oprofile/hwsampler.c +1 −5 Original line number Original line Diff line number Diff line Loading @@ -517,12 +517,8 @@ static int stop_sampling(int cpu) static int check_hardware_prerequisites(void) static int check_hardware_prerequisites(void) { { unsigned long long facility_bits[2]; if (!test_facility(68)) memcpy(facility_bits, S390_lowcore.stfle_fac_list, 32); if (!(facility_bits[1] & (1ULL << 59))) return -EOPNOTSUPP; return -EOPNOTSUPP; return 0; return 0; } } /* /* Loading drivers/s390/cio/device.c +18 −6 Original line number Original line Diff line number Diff line Loading @@ -541,15 +541,24 @@ static ssize_t online_store (struct device *dev, struct device_attribute *attr, int force, ret; int force, ret; unsigned long i; unsigned long i; if (!dev_fsm_final_state(cdev) && /* Prevent conflict between multiple on-/offline processing requests. */ cdev->private->state != DEV_STATE_DISCONNECTED) return -EAGAIN; if (atomic_cmpxchg(&cdev->private->onoff, 0, 1) != 0) if (atomic_cmpxchg(&cdev->private->onoff, 0, 1) != 0) return -EAGAIN; return -EAGAIN; /* Prevent conflict between internal I/Os and on-/offline processing. */ if (!dev_fsm_final_state(cdev) && cdev->private->state != DEV_STATE_DISCONNECTED) { ret = -EAGAIN; goto out_onoff; } /* Prevent conflict between pending work and on-/offline processing.*/ if (work_pending(&cdev->private->todo_work)) { ret = -EAGAIN; goto out_onoff; } if (cdev->drv && !try_module_get(cdev->drv->driver.owner)) { if (cdev->drv && !try_module_get(cdev->drv->driver.owner)) { atomic_set(&cdev->private->onoff, 0); ret = -EINVAL; return -EINVAL; goto out_onoff; } } if (!strncmp(buf, "force\n", count)) { if (!strncmp(buf, "force\n", count)) { force = 1; force = 1; Loading @@ -574,6 +583,7 @@ static ssize_t online_store (struct device *dev, struct device_attribute *attr, out: out: if (cdev->drv) if (cdev->drv) module_put(cdev->drv->driver.owner); module_put(cdev->drv->driver.owner); out_onoff: atomic_set(&cdev->private->onoff, 0); atomic_set(&cdev->private->onoff, 0); return (ret < 0) ? ret : count; return (ret < 0) ? ret : count; } } Loading Loading @@ -1311,10 +1321,12 @@ static int purge_fn(struct device *dev, void *data) spin_lock_irq(cdev->ccwlock); spin_lock_irq(cdev->ccwlock); if (is_blacklisted(id->ssid, id->devno) && if (is_blacklisted(id->ssid, id->devno) && (cdev->private->state == DEV_STATE_OFFLINE)) { (cdev->private->state == DEV_STATE_OFFLINE) && (atomic_cmpxchg(&cdev->private->onoff, 0, 1) == 0)) { CIO_MSG_EVENT(3, "ccw: purging 0.%x.%04x\n", id->ssid, CIO_MSG_EVENT(3, "ccw: purging 0.%x.%04x\n", id->ssid, id->devno); id->devno); ccw_device_sched_todo(cdev, CDEV_TODO_UNREG); ccw_device_sched_todo(cdev, CDEV_TODO_UNREG); atomic_set(&cdev->private->onoff, 0); } } spin_unlock_irq(cdev->ccwlock); spin_unlock_irq(cdev->ccwlock); /* Abort loop in case of pending signal. */ /* Abort loop in case of pending signal. */ Loading Loading
arch/s390/kernel/head.S +1 −1 Original line number Original line Diff line number Diff line Loading @@ -460,7 +460,7 @@ startup: #ifndef CONFIG_MARCH_G5 #ifndef CONFIG_MARCH_G5 # check capabilities against MARCH_{G5,Z900,Z990,Z9_109,Z10} # check capabilities against MARCH_{G5,Z900,Z990,Z9_109,Z10} xc __LC_STFL_FAC_LIST(8),__LC_STFL_FAC_LIST xc __LC_STFL_FAC_LIST(8),__LC_STFL_FAC_LIST stfl __LC_STFL_FAC_LIST # store facility list .insn s,0xb2b10000,__LC_STFL_FAC_LIST # store facility list tm __LC_STFL_FAC_LIST,0x01 # stfle available ? tm __LC_STFL_FAC_LIST,0x01 # stfle available ? jz 0f jz 0f la %r0,0 la %r0,0 Loading
arch/s390/kernel/switch_cpu.S +3 −1 Original line number Original line Diff line number Diff line Loading @@ -46,7 +46,9 @@ smp_restart_cpu: ltr %r4,%r4 /* New stack ? */ ltr %r4,%r4 /* New stack ? */ jz 1f jz 1f lr %r15,%r4 lr %r15,%r4 1: basr %r14,%r2 1: lr %r14,%r2 /* r14: Function to call */ lr %r2,%r3 /* r2 : Parameter for function*/ basr %r14,%r14 /* Call function */ .gprregs_addr: .gprregs_addr: .long .gprregs .long .gprregs Loading
arch/s390/kernel/switch_cpu64.S +3 −1 Original line number Original line Diff line number Diff line Loading @@ -42,7 +42,9 @@ smp_restart_cpu: ltgr %r4,%r4 /* New stack ? */ ltgr %r4,%r4 /* New stack ? */ jz 1f jz 1f lgr %r15,%r4 lgr %r15,%r4 1: basr %r14,%r2 1: lgr %r14,%r2 /* r14: Function to call */ lgr %r2,%r3 /* r2 : Parameter for function*/ basr %r14,%r14 /* Call function */ .section .data,"aw",@progbits .section .data,"aw",@progbits .gprregs: .gprregs: Loading
arch/s390/oprofile/hwsampler.c +1 −5 Original line number Original line Diff line number Diff line Loading @@ -517,12 +517,8 @@ static int stop_sampling(int cpu) static int check_hardware_prerequisites(void) static int check_hardware_prerequisites(void) { { unsigned long long facility_bits[2]; if (!test_facility(68)) memcpy(facility_bits, S390_lowcore.stfle_fac_list, 32); if (!(facility_bits[1] & (1ULL << 59))) return -EOPNOTSUPP; return -EOPNOTSUPP; return 0; return 0; } } /* /* Loading
drivers/s390/cio/device.c +18 −6 Original line number Original line Diff line number Diff line Loading @@ -541,15 +541,24 @@ static ssize_t online_store (struct device *dev, struct device_attribute *attr, int force, ret; int force, ret; unsigned long i; unsigned long i; if (!dev_fsm_final_state(cdev) && /* Prevent conflict between multiple on-/offline processing requests. */ cdev->private->state != DEV_STATE_DISCONNECTED) return -EAGAIN; if (atomic_cmpxchg(&cdev->private->onoff, 0, 1) != 0) if (atomic_cmpxchg(&cdev->private->onoff, 0, 1) != 0) return -EAGAIN; return -EAGAIN; /* Prevent conflict between internal I/Os and on-/offline processing. */ if (!dev_fsm_final_state(cdev) && cdev->private->state != DEV_STATE_DISCONNECTED) { ret = -EAGAIN; goto out_onoff; } /* Prevent conflict between pending work and on-/offline processing.*/ if (work_pending(&cdev->private->todo_work)) { ret = -EAGAIN; goto out_onoff; } if (cdev->drv && !try_module_get(cdev->drv->driver.owner)) { if (cdev->drv && !try_module_get(cdev->drv->driver.owner)) { atomic_set(&cdev->private->onoff, 0); ret = -EINVAL; return -EINVAL; goto out_onoff; } } if (!strncmp(buf, "force\n", count)) { if (!strncmp(buf, "force\n", count)) { force = 1; force = 1; Loading @@ -574,6 +583,7 @@ static ssize_t online_store (struct device *dev, struct device_attribute *attr, out: out: if (cdev->drv) if (cdev->drv) module_put(cdev->drv->driver.owner); module_put(cdev->drv->driver.owner); out_onoff: atomic_set(&cdev->private->onoff, 0); atomic_set(&cdev->private->onoff, 0); return (ret < 0) ? ret : count; return (ret < 0) ? ret : count; } } Loading Loading @@ -1311,10 +1321,12 @@ static int purge_fn(struct device *dev, void *data) spin_lock_irq(cdev->ccwlock); spin_lock_irq(cdev->ccwlock); if (is_blacklisted(id->ssid, id->devno) && if (is_blacklisted(id->ssid, id->devno) && (cdev->private->state == DEV_STATE_OFFLINE)) { (cdev->private->state == DEV_STATE_OFFLINE) && (atomic_cmpxchg(&cdev->private->onoff, 0, 1) == 0)) { CIO_MSG_EVENT(3, "ccw: purging 0.%x.%04x\n", id->ssid, CIO_MSG_EVENT(3, "ccw: purging 0.%x.%04x\n", id->ssid, id->devno); id->devno); ccw_device_sched_todo(cdev, CDEV_TODO_UNREG); ccw_device_sched_todo(cdev, CDEV_TODO_UNREG); atomic_set(&cdev->private->onoff, 0); } } spin_unlock_irq(cdev->ccwlock); spin_unlock_irq(cdev->ccwlock); /* Abort loop in case of pending signal. */ /* Abort loop in case of pending signal. */ Loading