Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 's390-6.10-8' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux

Pull s390 fixes from Heiko Carstens:

- Fix and add physical to virtual address translations in dasd and
virtio_ccw drivers. For virtio_ccw this is just a minimal fix.
More code cleanup will follow.

- Small defconfig updates

* tag 's390-6.10-8' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
s390/dasd: Fix invalid dereferencing of indirect CCW data pointer
s390/vfio_ccw: Fix target addresses of TIC CCWs
s390: Update defconfigs

+12 -13
+2 -3
arch/s390/configs/debug_defconfig
··· 601 601 CONFIG_WATCHDOG_NOWAYOUT=y 602 602 CONFIG_SOFT_WATCHDOG=m 603 603 CONFIG_DIAG288_WATCHDOG=m 604 + CONFIG_DRM=m 605 + CONFIG_DRM_VIRTIO_GPU=m 604 606 CONFIG_FB=y 605 607 # CONFIG_FB_DEVICE is not set 606 - CONFIG_FRAMEBUFFER_CONSOLE=y 607 - CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y 608 608 # CONFIG_HID_SUPPORT is not set 609 609 # CONFIG_USB_SUPPORT is not set 610 610 CONFIG_INFINIBAND=m 611 611 CONFIG_INFINIBAND_USER_ACCESS=m 612 612 CONFIG_MLX4_INFINIBAND=m 613 613 CONFIG_MLX5_INFINIBAND=m 614 - CONFIG_SYNC_FILE=y 615 614 CONFIG_VFIO=m 616 615 CONFIG_VFIO_PCI=m 617 616 CONFIG_MLX5_VFIO_PCI=m
+2 -3
arch/s390/configs/defconfig
··· 592 592 CONFIG_WATCHDOG_NOWAYOUT=y 593 593 CONFIG_SOFT_WATCHDOG=m 594 594 CONFIG_DIAG288_WATCHDOG=m 595 + CONFIG_DRM=m 596 + CONFIG_DRM_VIRTIO_GPU=m 595 597 CONFIG_FB=y 596 598 # CONFIG_FB_DEVICE is not set 597 - CONFIG_FRAMEBUFFER_CONSOLE=y 598 - CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y 599 599 # CONFIG_HID_SUPPORT is not set 600 600 # CONFIG_USB_SUPPORT is not set 601 601 CONFIG_INFINIBAND=m 602 602 CONFIG_INFINIBAND_USER_ACCESS=m 603 603 CONFIG_MLX4_INFINIBAND=m 604 604 CONFIG_MLX5_INFINIBAND=m 605 - CONFIG_SYNC_FILE=y 606 605 CONFIG_VFIO=m 607 606 CONFIG_VFIO_PCI=m 608 607 CONFIG_MLX5_VFIO_PCI=m
+2 -2
drivers/s390/block/dasd_eckd.c
··· 4906 4906 ccw++; 4907 4907 if (dst) { 4908 4908 if (ccw->flags & CCW_FLAG_IDA) 4909 - cda = *((char **)dma32_to_virt(ccw->cda)); 4909 + cda = dma64_to_virt(*((dma64_t *)dma32_to_virt(ccw->cda))); 4910 4910 else 4911 4911 cda = dma32_to_virt(ccw->cda); 4912 4912 if (dst != cda) { ··· 5525 5525 5526 5526 /* get pointer to data (consider IDALs) */ 5527 5527 if (from->flags & CCW_FLAG_IDA) 5528 - datap = (char *)*((addr_t *)dma32_to_virt(from->cda)); 5528 + datap = dma64_to_virt(*((dma64_t *)dma32_to_virt(from->cda))); 5529 5529 else 5530 5530 datap = dma32_to_virt(from->cda); 5531 5531
+1 -1
drivers/s390/block/dasd_fba.c
··· 585 585 ccw++; 586 586 if (dst) { 587 587 if (ccw->flags & CCW_FLAG_IDA) 588 - cda = *((char **)dma32_to_virt(ccw->cda)); 588 + cda = dma64_to_virt(*((dma64_t *)dma32_to_virt(ccw->cda))); 589 589 else 590 590 cda = dma32_to_virt(ccw->cda); 591 591 if (dst != cda) {
+5 -4
drivers/s390/cio/vfio_ccw_cp.c
··· 490 490 struct channel_program *cp) 491 491 { 492 492 struct ccwchain *iter; 493 - u32 cda, ccw_head; 493 + u32 offset, ccw_head; 494 494 495 495 list_for_each_entry(iter, &cp->ccwchain_list, next) { 496 496 ccw_head = iter->ch_iova; 497 497 if (is_cpa_within_range(ccw->cda, ccw_head, iter->ch_len)) { 498 - cda = (u64)iter->ch_ccw + dma32_to_u32(ccw->cda) - ccw_head; 499 - ccw->cda = u32_to_dma32(cda); 498 + /* Calculate offset of TIC target */ 499 + offset = dma32_to_u32(ccw->cda) - ccw_head; 500 + ccw->cda = virt_to_dma32((void *)iter->ch_ccw + offset); 500 501 return 0; 501 502 } 502 503 } ··· 915 914 * in the ioctl directly. Path status changes etc. 916 915 */ 917 916 list_for_each_entry(chain, &cp->ccwchain_list, next) { 918 - ccw_head = (u32)(u64)chain->ch_ccw; 917 + ccw_head = dma32_to_u32(virt_to_dma32(chain->ch_ccw)); 919 918 /* 920 919 * On successful execution, cpa points just beyond the end 921 920 * of the chain.