Commit 8d996885 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull s390 fixes from Vasily Gorbik:

 - Revert IRQ entry/exit path optimization that incorrectly cleared
   some PSW bits before irqentry_exit(), causing boot failures with
   linux-next and HRTIMER_REARM_DEFERRED (which only uncovered the
   problem)

 - Fix zcrypt code to show CCA card serial numbers even when the
   default crypto domain is offline by selecting any domain available,
   preventing empty sysfs entries

* tag 's390-7.0-5' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
  s390/zcrypt: Enable AUTOSEL_DOM for CCA serialnr sysfs attribute
  s390: Revert "s390/irq/idle: Remove psw bits early"
parents 2c361c9b 598bbefa
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -147,10 +147,8 @@ void noinstr do_io_irq(struct pt_regs *regs)
	bool from_idle;

	from_idle = test_and_clear_cpu_flag(CIF_ENABLED_WAIT);
	if (from_idle) {
	if (from_idle)
		update_timer_idle();
		regs->psw.mask &= ~(PSW_MASK_EXT | PSW_MASK_IO | PSW_MASK_WAIT);
	}

	irq_enter_rcu();

@@ -176,6 +174,9 @@ void noinstr do_io_irq(struct pt_regs *regs)

	set_irq_regs(old_regs);
	irqentry_exit(regs, state);

	if (from_idle)
		regs->psw.mask &= ~(PSW_MASK_EXT | PSW_MASK_IO | PSW_MASK_WAIT);
}

void noinstr do_ext_irq(struct pt_regs *regs)
@@ -185,10 +186,8 @@ void noinstr do_ext_irq(struct pt_regs *regs)
	bool from_idle;

	from_idle = test_and_clear_cpu_flag(CIF_ENABLED_WAIT);
	if (from_idle) {
	if (from_idle)
		update_timer_idle();
		regs->psw.mask &= ~(PSW_MASK_EXT | PSW_MASK_IO | PSW_MASK_WAIT);
	}

	irq_enter_rcu();

@@ -210,6 +209,9 @@ void noinstr do_ext_irq(struct pt_regs *regs)
	irq_exit_rcu();
	set_irq_regs(old_regs);
	irqentry_exit(regs, state);

	if (from_idle)
		regs->psw.mask &= ~(PSW_MASK_EXT | PSW_MASK_IO | PSW_MASK_WAIT);
}

static void show_msi_interrupt(struct seq_file *p, int irq)
+7 −5
Original line number Diff line number Diff line
@@ -1639,11 +1639,13 @@ int cca_get_info(u16 cardnr, u16 domain, struct cca_info *ci, u32 xflags)

	memset(ci, 0, sizeof(*ci));

	/* get first info from zcrypt device driver about this apqn */
	/* if specific domain given, fetch status and hw info for this apqn */
	if (domain != AUTOSEL_DOM) {
		rc = zcrypt_device_status_ext(cardnr, domain, &devstat);
		if (rc)
			return rc;
		ci->hwtype = devstat.hwtype;
	}

	/*
	 * Prep memory for rule array and var array use.
+1 −2
Original line number Diff line number Diff line
@@ -85,8 +85,7 @@ static ssize_t cca_serialnr_show(struct device *dev,

	memset(&ci, 0, sizeof(ci));

	if (ap_domain_index >= 0)
		cca_get_info(ac->id, ap_domain_index, &ci, 0);
	cca_get_info(ac->id, AUTOSEL_DOM, &ci, 0);

	return sysfs_emit(buf, "%s\n", ci.serial);
}