Commit 6d6444ba authored by Linus Torvalds's avatar Linus Torvalds

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
parents adfbe364 cea5589e
...@@ -170,11 +170,14 @@ static void kaslr_adjust_got(unsigned long offset) ...@@ -170,11 +170,14 @@ static void kaslr_adjust_got(unsigned long offset)
u64 *entry; u64 *entry;
/* /*
* Even without -fPIE, Clang still uses a global offset table for some * Adjust GOT entries, except for ones for undefined weak symbols
* reason. Adjust the GOT entries. * 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++) {
*entry += offset - __START_KERNEL; if (*entry)
*entry += offset - __START_KERNEL;
}
} }
/* /*
......
...@@ -410,7 +410,7 @@ static void __init cpu_enable_directed_irq(void *unused) ...@@ -410,7 +410,7 @@ static void __init cpu_enable_directed_irq(void *unused)
union zpci_sic_iib iib = {{0}}; union zpci_sic_iib iib = {{0}};
union zpci_sic_iib ziib = {{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_SET_CPU, 0, &iib);
zpci_set_irq_ctrl(SIC_IRQ_MODE_D_SINGLE, PCI_ISC, &ziib); zpci_set_irq_ctrl(SIC_IRQ_MODE_D_SINGLE, PCI_ISC, &ziib);
......
...@@ -1293,6 +1293,7 @@ sclp_init(void) ...@@ -1293,6 +1293,7 @@ sclp_init(void)
fail_unregister_reboot_notifier: fail_unregister_reboot_notifier:
unregister_reboot_notifier(&sclp_reboot_notifier); unregister_reboot_notifier(&sclp_reboot_notifier);
fail_init_state_uninitialized: fail_init_state_uninitialized:
list_del(&sclp_state_change_event.list);
sclp_init_state = sclp_init_state_uninitialized; sclp_init_state = sclp_init_state_uninitialized;
free_page((unsigned long) sclp_read_sccb); free_page((unsigned long) sclp_read_sccb);
free_page((unsigned long) sclp_init_sccb); free_page((unsigned long) sclp_init_sccb);
......
...@@ -698,6 +698,7 @@ static int virtio_ccw_find_vqs(struct virtio_device *vdev, unsigned nvqs, ...@@ -698,6 +698,7 @@ static int virtio_ccw_find_vqs(struct virtio_device *vdev, unsigned nvqs,
dma64_t *indicatorp = NULL; dma64_t *indicatorp = NULL;
int ret, i, queue_idx = 0; int ret, i, queue_idx = 0;
struct ccw1 *ccw; struct ccw1 *ccw;
dma32_t indicatorp_dma = 0;
ccw = ccw_device_dma_zalloc(vcdev->cdev, sizeof(*ccw), NULL); ccw = ccw_device_dma_zalloc(vcdev->cdev, sizeof(*ccw), NULL);
if (!ccw) if (!ccw)
...@@ -725,7 +726,7 @@ static int virtio_ccw_find_vqs(struct virtio_device *vdev, unsigned nvqs, ...@@ -725,7 +726,7 @@ static int virtio_ccw_find_vqs(struct virtio_device *vdev, unsigned nvqs,
*/ */
indicatorp = ccw_device_dma_zalloc(vcdev->cdev, indicatorp = ccw_device_dma_zalloc(vcdev->cdev,
sizeof(*indicatorp), sizeof(*indicatorp),
&ccw->cda); &indicatorp_dma);
if (!indicatorp) if (!indicatorp)
goto out; goto out;
*indicatorp = indicators_dma(vcdev); *indicatorp = indicators_dma(vcdev);
...@@ -735,6 +736,7 @@ static int virtio_ccw_find_vqs(struct virtio_device *vdev, unsigned nvqs, ...@@ -735,6 +736,7 @@ static int virtio_ccw_find_vqs(struct virtio_device *vdev, unsigned nvqs,
/* no error, just fall back to legacy interrupts */ /* no error, just fall back to legacy interrupts */
vcdev->is_thinint = false; vcdev->is_thinint = false;
} }
ccw->cda = indicatorp_dma;
if (!vcdev->is_thinint) { if (!vcdev->is_thinint) {
/* Register queue indicators with host. */ /* Register queue indicators with host. */
*indicators(vcdev) = 0; *indicators(vcdev) = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment