Commit 6d6444ba authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull s390 updates from Alexander Gordeev:

 - Add missing virt_to_phys() conversion for directed interrupt bit
   vectors

 - Fix broken configuration change notifications for virtio-ccw

 - Fix sclp_init() cleanup path on failure and as result - fix a list
   double add warning

 - Fix unconditional adjusting of GOT entries containing undefined weak
   symbols that resolve to zero

* tag 's390-6.10-7' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
  s390/boot: Do not adjust GOT entries for undef weak sym
  s390/sclp: Fix sclp_init() cleanup on failure
  s390/virtio_ccw: Fix config change notifications
  s390/pci: Add missing virt_to_phys() for directed DIBV
parents adfbe364 cea5589e
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -170,12 +170,15 @@ static void kaslr_adjust_got(unsigned long offset)
	u64 *entry;

	/*
	 * Even without -fPIE, Clang still uses a global offset table for some
	 * reason. Adjust the GOT entries.
	 * Adjust GOT entries, except for ones for undefined weak symbols
	 * that resolved to zero. This also skips the first three reserved
	 * entries on s390x that are zero.
	 */
	for (entry = (u64 *)vmlinux.got_start; entry < (u64 *)vmlinux.got_end; entry++)
	for (entry = (u64 *)vmlinux.got_start; entry < (u64 *)vmlinux.got_end; entry++) {
		if (*entry)
			*entry += offset - __START_KERNEL;
	}
}

/*
 * Merge information from several sources into a single ident_map_size value.
+1 −1
Original line number Diff line number Diff line
@@ -410,7 +410,7 @@ static void __init cpu_enable_directed_irq(void *unused)
	union zpci_sic_iib iib = {{0}};
	union zpci_sic_iib ziib = {{0}};

	iib.cdiib.dibv_addr = (u64) zpci_ibv[smp_processor_id()]->vector;
	iib.cdiib.dibv_addr = virt_to_phys(zpci_ibv[smp_processor_id()]->vector);

	zpci_set_irq_ctrl(SIC_IRQ_MODE_SET_CPU, 0, &iib);
	zpci_set_irq_ctrl(SIC_IRQ_MODE_D_SINGLE, PCI_ISC, &ziib);
+1 −0
Original line number Diff line number Diff line
@@ -1293,6 +1293,7 @@ sclp_init(void)
fail_unregister_reboot_notifier:
	unregister_reboot_notifier(&sclp_reboot_notifier);
fail_init_state_uninitialized:
	list_del(&sclp_state_change_event.list);
	sclp_init_state = sclp_init_state_uninitialized;
	free_page((unsigned long) sclp_read_sccb);
	free_page((unsigned long) sclp_init_sccb);
+3 −1
Original line number Diff line number Diff line
@@ -698,6 +698,7 @@ static int virtio_ccw_find_vqs(struct virtio_device *vdev, unsigned nvqs,
	dma64_t *indicatorp = NULL;
	int ret, i, queue_idx = 0;
	struct ccw1 *ccw;
	dma32_t indicatorp_dma = 0;

	ccw = ccw_device_dma_zalloc(vcdev->cdev, sizeof(*ccw), NULL);
	if (!ccw)
@@ -725,7 +726,7 @@ static int virtio_ccw_find_vqs(struct virtio_device *vdev, unsigned nvqs,
	*/
	indicatorp = ccw_device_dma_zalloc(vcdev->cdev,
					   sizeof(*indicatorp),
					   &ccw->cda);
					   &indicatorp_dma);
	if (!indicatorp)
		goto out;
	*indicatorp = indicators_dma(vcdev);
@@ -735,6 +736,7 @@ static int virtio_ccw_find_vqs(struct virtio_device *vdev, unsigned nvqs,
			/* no error, just fall back to legacy interrupts */
			vcdev->is_thinint = false;
	}
	ccw->cda = indicatorp_dma;
	if (!vcdev->is_thinint) {
		/* Register queue indicators with host. */
		*indicators(vcdev) = 0;