Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0215c5cf authored by Larry Finger's avatar Larry Finger
Browse files
parents fefecc69 94c8a984
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -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
+3 −1
Original line number Original line Diff line number Diff line
@@ -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
+3 −1
Original line number Original line Diff line number Diff line
@@ -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:
+1 −5
Original line number Original line Diff line number Diff line
@@ -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;
}
}
/*
/*
+18 −6
Original line number Original line Diff line number Diff line
@@ -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;
@@ -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;
}
}
@@ -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