FAILED: patch "[PATCH] s390/cio: Restore GFP_DMA for CHSC allocation" failed to apply to 6.12-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 6.12-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.12.y
git checkout FETCH_HEAD
git cherry-pick -x ea34567db0a6b3a7ce78ba421592344315c8f90e
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026052823-removing-pretended-b7d6@gregkh' --subject-prefix 'PATCH 6.12.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From ea34567db0a6b3a7ce78ba421592344315c8f90e Mon Sep 17 00:00:00 2001
From: Peter Oberparleiter <[email protected]>
Date: Thu, 7 May 2026 16:27:08 +0200
Subject: [PATCH] s390/cio: Restore GFP_DMA for CHSC allocation
Re-add GFP_DMA when allocating memory for CHSC control blocks. On some supported machines, CHSC cannot access memory outside the DMA zone, causing CHSC command failures.
drivers/s390/cio/chsc.c +2 -2
@@ -1142,8 +1142,8 @@ int __init chsc_init(void) {int ret; - sei_page = (void *)get_zeroed_page (GFP_KERNEL ); - chsc_page = (void *)get_zeroed_page (GFP_KERNEL ); + sei_page = (void *)get_zeroed_page (GFP_KERNEL |GFP_DMA ); + chsc_page = (void *)get_zeroed_page (GFP_KERNEL |GFP_DMA );if (!sei_page || !chsc_page) { ret = -ENOMEM ; goto out_err;
drivers/s390/cio/chsc_sch.c +10 -10
@@ -292,7 +292,7 @@ static int chsc_ioctl_start(void __user *user_area)if (!css_general_characteristics.dynio)/* It makes no sense to try. */ return -EOPNOTSUPP ; - chsc_area = (void *)get_zeroed_page (GFP_KERNEL ); + chsc_area = (void *)get_zeroed_page (GFP_DMA |GFP_KERNEL );if (!chsc_area)return -ENOMEM ; request =kzalloc_obj (*request);
@@ -340,7 +340,7 @@ static int chsc_ioctl_on_close_set(void __user *user_area) ret = -ENOMEM ; goto out_unlock; } - on_close_chsc_area = (void *)get_zeroed_page (GFP_KERNEL ); + on_close_chsc_area = (void *)get_zeroed_page (GFP_DMA |GFP_KERNEL );if (!on_close_chsc_area) { ret = -ENOMEM ; goto out_free_request;
@@ -392,7 +392,7 @@ static int chsc_ioctl_start_sync(void __user *user_area)struct chsc_sync_area *chsc_area;int ret, ccode; - chsc_area = (void *)get_zeroed_page (GFP_KERNEL ); + chsc_area = (void *)get_zeroed_page (GFP_KERNEL |GFP_DMA );if (!chsc_area)return -ENOMEM ;if (copy_from_user (chsc_area, user_area,PAGE_SIZE )) {
@@ -438,7 +438,7 @@ static int chsc_ioctl_info_channel_path(void __user *user_cd)u8 data[PAGE_SIZE -20 ]; } __attribute__ ((packed)) *scpcd_area; - scpcd_area = (void *)get_zeroed_page (GFP_KERNEL ); + scpcd_area = (void *)get_zeroed_page (GFP_KERNEL |GFP_DMA );if (!scpcd_area)return -ENOMEM ; cd =kzalloc_obj (*cd);
@@ -500,7 +500,7 @@ static int chsc_ioctl_info_cu(void __user *user_cd)u8 data[PAGE_SIZE -20 ]; } __attribute__ ((packed)) *scucd_area; - scucd_area = (void *)get_zeroed_page (GFP_KERNEL ); + scucd_area = (void *)get_zeroed_page (GFP_KERNEL |GFP_DMA );if (!scucd_area)return -ENOMEM ; cd =kzalloc_obj (*cd);
@@ -563,7 +563,7 @@ static int chsc_ioctl_info_sch_cu(void __user *user_cud)u8 data[PAGE_SIZE -20 ]; } __attribute__ ((packed)) *sscud_area; - sscud_area = (void *)get_zeroed_page (GFP_KERNEL ); + sscud_area = (void *)get_zeroed_page (GFP_KERNEL |GFP_DMA );if (!sscud_area)return -ENOMEM ; cud =kzalloc_obj (*cud);
@@ -625,7 +625,7 @@ static int chsc_ioctl_conf_info(void __user *user_ci)u8 data[PAGE_SIZE -20 ]; } __attribute__ ((packed)) *sci_area; - sci_area = (void *)get_zeroed_page (GFP_KERNEL ); + sci_area = (void *)get_zeroed_page (GFP_KERNEL |GFP_DMA );if (!sci_area)return -ENOMEM ; ci =kzalloc_obj (*ci);
@@ -696,7 +696,7 @@ static int chsc_ioctl_conf_comp_list(void __user *user_ccl)u32 res; } __attribute__ ((packed)) *cssids_parm; - sccl_area = (void *)get_zeroed_page (GFP_KERNEL ); + sccl_area = (void *)get_zeroed_page (GFP_KERNEL |GFP_DMA );if (!sccl_area)return -ENOMEM ; ccl =kzalloc_obj (*ccl);
@@ -756,7 +756,7 @@ static int chsc_ioctl_chpd(void __user *user_chpd)int ret; chpd =kzalloc_obj (*chpd); - scpd_area = (void *)get_zeroed_page (GFP_KERNEL ); + scpd_area = (void *)get_zeroed_page (GFP_KERNEL |GFP_DMA );if (!scpd_area || !chpd) { ret = -ENOMEM ; goto out_free;
@@ -796,7 +796,7 @@ static int chsc_ioctl_dcal(void __user *user_dcal)u8 data[PAGE_SIZE -36 ]; } __attribute__ ((packed)) *sdcal_area; - sdcal_area = (void *)get_zeroed_page (GFP_KERNEL ); + sdcal_area = (void *)get_zeroed_page (GFP_KERNEL |GFP_DMA );if (!sdcal_area)return -ENOMEM ; dcal =kzalloc_obj (*dcal);
drivers/s390/cio/scm.c +1 -1
@@ -229,7 +229,7 @@ int scm_update_information(void)size_t num;int ret; - scm_info = (void *)__get_free_page (GFP_KERNEL ); + scm_info = (void *)__get_free_page (GFP_KERNEL |GFP_DMA );if (!scm_info)return -ENOMEM ;
Peter Oberparleiter
maintainerPATCH 1/1 s390/cio: Restore GFP_DMA for CHSC allocation
[ Upstream commit ea34567db0a6b3a7ce78ba421592344315c8f90e ]
Re-add GFP_DMA when allocating memory for CHSC control blocks. On some supported machines, CHSC cannot access memory outside the DMA zone, causing CHSC command failures.
--- drivers/s390/cio/chsc.c | 4 ++-- drivers/s390/cio/chsc_sch.c | 20 ++++++++++---------- drivers/s390/cio/scm.c | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-)
drivers/s390/cio/chsc.c +2 -2
@@ -1153,8 +1153,8 @@ int __init chsc_init(void) {int ret; - sei_page = (void *)get_zeroed_page (GFP_KERNEL ); - chsc_page = (void *)get_zeroed_page (GFP_KERNEL ); + sei_page = (void *)get_zeroed_page (GFP_KERNEL |GFP_DMA ); + chsc_page = (void *)get_zeroed_page (GFP_KERNEL |GFP_DMA );if (!sei_page || !chsc_page) { ret = -ENOMEM ; goto out_err;
drivers/s390/cio/chsc_sch.c +10 -10
@@ -293,7 +293,7 @@ static int chsc_ioctl_start(void __user *user_area)if (!css_general_characteristics.dynio)/* It makes no sense to try. */ return -EOPNOTSUPP ; - chsc_area = (void *)get_zeroed_page (GFP_KERNEL ); + chsc_area = (void *)get_zeroed_page (GFP_DMA |GFP_KERNEL );if (!chsc_area)return -ENOMEM ; request =kzalloc (sizeof (*request),GFP_KERNEL );
@@ -341,7 +341,7 @@ static int chsc_ioctl_on_close_set(void __user *user_area) ret = -ENOMEM ; goto out_unlock; } - on_close_chsc_area = (void *)get_zeroed_page (GFP_KERNEL ); + on_close_chsc_area = (void *)get_zeroed_page (GFP_DMA |GFP_KERNEL );if (!on_close_chsc_area) { ret = -ENOMEM ; goto out_free_request;
@@ -393,7 +393,7 @@ static int chsc_ioctl_start_sync(void __user *user_area)struct chsc_sync_area *chsc_area;int ret, ccode; - chsc_area = (void *)get_zeroed_page (GFP_KERNEL ); + chsc_area = (void *)get_zeroed_page (GFP_KERNEL |GFP_DMA );if (!chsc_area)return -ENOMEM ;if (copy_from_user (chsc_area, user_area,PAGE_SIZE )) {
@@ -439,7 +439,7 @@ static int chsc_ioctl_info_channel_path(void __user *user_cd)u8 data[PAGE_SIZE -20 ]; } __attribute__ ((packed)) *scpcd_area; - scpcd_area = (void *)get_zeroed_page (GFP_KERNEL ); + scpcd_area = (void *)get_zeroed_page (GFP_KERNEL |GFP_DMA );if (!scpcd_area)return -ENOMEM ; cd =kzalloc (sizeof (*cd),GFP_KERNEL );
@@ -501,7 +501,7 @@ static int chsc_ioctl_info_cu(void __user *user_cd)u8 data[PAGE_SIZE -20 ]; } __attribute__ ((packed)) *scucd_area; - scucd_area = (void *)get_zeroed_page (GFP_KERNEL ); + scucd_area = (void *)get_zeroed_page (GFP_KERNEL |GFP_DMA );if (!scucd_area)return -ENOMEM ; cd =kzalloc (sizeof (*cd),GFP_KERNEL );
@@ -564,7 +564,7 @@ static int chsc_ioctl_info_sch_cu(void __user *user_cud)u8 data[PAGE_SIZE -20 ]; } __attribute__ ((packed)) *sscud_area; - sscud_area = (void *)get_zeroed_page (GFP_KERNEL ); + sscud_area = (void *)get_zeroed_page (GFP_KERNEL |GFP_DMA );if (!sscud_area)return -ENOMEM ; cud =kzalloc (sizeof (*cud),GFP_KERNEL );
@@ -626,7 +626,7 @@ static int chsc_ioctl_conf_info(void __user *user_ci)u8 data[PAGE_SIZE -20 ]; } __attribute__ ((packed)) *sci_area; - sci_area = (void *)get_zeroed_page (GFP_KERNEL ); + sci_area = (void *)get_zeroed_page (GFP_KERNEL |GFP_DMA );if (!sci_area)return -ENOMEM ; ci =kzalloc (sizeof (*ci),GFP_KERNEL );
@@ -697,7 +697,7 @@ static int chsc_ioctl_conf_comp_list(void __user *user_ccl)u32 res; } __attribute__ ((packed)) *cssids_parm; - sccl_area = (void *)get_zeroed_page (GFP_KERNEL ); + sccl_area = (void *)get_zeroed_page (GFP_KERNEL |GFP_DMA );if (!sccl_area)return -ENOMEM ; ccl =kzalloc (sizeof (*ccl),GFP_KERNEL );
@@ -757,7 +757,7 @@ static int chsc_ioctl_chpd(void __user *user_chpd)int ret; chpd =kzalloc (sizeof (*chpd),GFP_KERNEL ); - scpd_area = (void *)get_zeroed_page (GFP_KERNEL ); + scpd_area = (void *)get_zeroed_page (GFP_KERNEL |GFP_DMA );if (!scpd_area || !chpd) { ret = -ENOMEM ; goto out_free;
@@ -797,7 +797,7 @@ static int chsc_ioctl_dcal(void __user *user_dcal)u8 data[PAGE_SIZE -36 ]; } __attribute__ ((packed)) *sdcal_area; - sdcal_area = (void *)get_zeroed_page (GFP_KERNEL ); + sdcal_area = (void *)get_zeroed_page (GFP_KERNEL |GFP_DMA );if (!sdcal_area)return -ENOMEM ; dcal =kzalloc (sizeof (*dcal),GFP_KERNEL );
drivers/s390/cio/scm.c +1 -1
@@ -228,7 +228,7 @@ int scm_update_information(void)size_t num;int ret; - scm_info = (void *)__get_free_page (GFP_KERNEL ); + scm_info = (void *)__get_free_page (GFP_KERNEL |GFP_DMA );if (!scm_info)return -ENOMEM ;
Signature · 1 line
2.53.0
Re: [PATCH 6.12.y] s390/cio: Restore GFP_DMA for CHSC allocation
Queued for 6.18.y and 6.12.y, thanks.
Signature · 2 lines
Thanks, Sasha