Skip to content

Commit 6d6444b

Browse files
committed
Merge tag 's390-6.10-7' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
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
2 parents adfbe36 + cea5589 commit 6d6444b

File tree

4 files changed

+12
-6
lines changed

4 files changed

+12
-6
lines changed

arch/s390/boot/startup.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -170,11 +170,14 @@ static void kaslr_adjust_got(unsigned long offset)
170170
u64 *entry;
171171

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

180183
/*

arch/s390/pci/pci_irq.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ static void __init cpu_enable_directed_irq(void *unused)
410410
union zpci_sic_iib iib = {{0}};
411411
union zpci_sic_iib ziib = {{0}};
412412

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

415415
zpci_set_irq_ctrl(SIC_IRQ_MODE_SET_CPU, 0, &iib);
416416
zpci_set_irq_ctrl(SIC_IRQ_MODE_D_SINGLE, PCI_ISC, &ziib);

drivers/s390/char/sclp.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1293,6 +1293,7 @@ sclp_init(void)
12931293
fail_unregister_reboot_notifier:
12941294
unregister_reboot_notifier(&sclp_reboot_notifier);
12951295
fail_init_state_uninitialized:
1296+
list_del(&sclp_state_change_event.list);
12961297
sclp_init_state = sclp_init_state_uninitialized;
12971298
free_page((unsigned long) sclp_read_sccb);
12981299
free_page((unsigned long) sclp_init_sccb);

drivers/s390/virtio/virtio_ccw.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -698,6 +698,7 @@ static int virtio_ccw_find_vqs(struct virtio_device *vdev, unsigned nvqs,
698698
dma64_t *indicatorp = NULL;
699699
int ret, i, queue_idx = 0;
700700
struct ccw1 *ccw;
701+
dma32_t indicatorp_dma = 0;
701702

702703
ccw = ccw_device_dma_zalloc(vcdev->cdev, sizeof(*ccw), NULL);
703704
if (!ccw)
@@ -725,7 +726,7 @@ static int virtio_ccw_find_vqs(struct virtio_device *vdev, unsigned nvqs,
725726
*/
726727
indicatorp = ccw_device_dma_zalloc(vcdev->cdev,
727728
sizeof(*indicatorp),
728-
&ccw->cda);
729+
&indicatorp_dma);
729730
if (!indicatorp)
730731
goto out;
731732
*indicatorp = indicators_dma(vcdev);
@@ -735,6 +736,7 @@ static int virtio_ccw_find_vqs(struct virtio_device *vdev, unsigned nvqs,
735736
/* no error, just fall back to legacy interrupts */
736737
vcdev->is_thinint = false;
737738
}
739+
ccw->cda = indicatorp_dma;
738740
if (!vcdev->is_thinint) {
739741
/* Register queue indicators with host. */
740742
*indicators(vcdev) = 0;

0 commit comments

Comments
 (0)