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

Commit fb7453e6 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull s390 bug fixes from Martin Schwidefsky:

 - Fix specification exception on z196 during ap probe

 - A fix for suspend-to-disk, the VMAP stack patch broke the
   swsusp_arch_suspend function

 - The EMC CKD ioctl of the dasd driver needs an additional size check
   for user space data

 - Revert an incorrect patch for the PCI base code that removed a bit
   lock that turned out to be required after all

* tag 's390-5.0-3' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
  Revert "s390/pci: remove bit_lock usage in interrupt handler"
  s390/zcrypt: fix specification exception on z196 during ap probe
  s390/dasd: fix using offset into zero size array error
  s390/suspend: fix stack setup in swsusp_arch_suspend
parents 244cce14 614db269
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -30,10 +30,10 @@
	.section .text
ENTRY(swsusp_arch_suspend)
	lg	%r1,__LC_NODAT_STACK
	aghi	%r1,-STACK_FRAME_OVERHEAD
	stmg	%r6,%r15,__SF_GPRS(%r1)
	aghi	%r1,-STACK_FRAME_OVERHEAD
	stg	%r15,__SF_BACKCHAIN(%r1)
	lgr	%r1,%r15
	lgr	%r15,%r1

	/* Store FPU registers */
	brasl	%r14,save_fpu_regs
+3 −1
Original line number Diff line number Diff line
@@ -382,7 +382,9 @@ static void zpci_irq_handler(struct airq_struct *airq)
			if (ai == -1UL)
				break;
			inc_irq_stat(IRQIO_MSI);
			airq_iv_lock(aibv, ai);
			generic_handle_irq(airq_iv_get_data(aibv, ai));
			airq_iv_unlock(aibv, ai);
		}
	}
}
@@ -408,7 +410,7 @@ int arch_setup_msi_irqs(struct pci_dev *pdev, int nvec, int type)
	zdev->aisb = aisb;

	/* Create adapter interrupt vector */
	zdev->aibv = airq_iv_create(msi_vecs, AIRQ_IV_DATA);
	zdev->aibv = airq_iv_create(msi_vecs, AIRQ_IV_DATA | AIRQ_IV_BITLOCK);
	if (!zdev->aibv)
		return -ENOMEM;

+8 −0
Original line number Diff line number Diff line
@@ -4469,6 +4469,14 @@ static int dasd_symm_io(struct dasd_device *device, void __user *argp)
		usrparm.psf_data &= 0x7fffffffULL;
		usrparm.rssd_result &= 0x7fffffffULL;
	}
	/* at least 2 bytes are accessed and should be allocated */
	if (usrparm.psf_data_len < 2) {
		DBF_DEV_EVENT(DBF_WARNING, device,
			      "Symmetrix ioctl invalid data length %d",
			      usrparm.psf_data_len);
		rc = -EINVAL;
		goto out;
	}
	/* alloc I/O data area */
	psf_data = kzalloc(usrparm.psf_data_len, GFP_KERNEL | GFP_DMA);
	rssd_result = kzalloc(usrparm.rssd_result_len, GFP_KERNEL | GFP_DMA);
+2 −1
Original line number Diff line number Diff line
@@ -248,7 +248,8 @@ static inline int ap_test_config(unsigned int *field, unsigned int nr)
static inline int ap_test_config_card_id(unsigned int id)
{
	if (!ap_configuration)	/* QCI not supported */
		return 1;
		/* only ids 0...3F may be probed */
		return id < 0x40 ? 1 : 0;
	return ap_test_config(ap_configuration->apm, id);
}