From 3d373f8ca657295b9c191866ecf7d20859db2ad2 Mon Sep 17 00:00:00 2001 From: Frederic Weisbecker Date: Apr 05 2023 19:11:26 +0000 Subject: Merge 'SLE15-SP5-GA' (47741a56a9a) into 'SLE15-SP5-RT' - Conflicts: series.conf --- diff --git a/patches.kabi/scsi_disk-kABI-add-back-members.patch b/patches.kabi/scsi_disk-kABI-add-back-members.patch new file mode 100644 index 0000000..aa7698a --- /dev/null +++ b/patches.kabi/scsi_disk-kABI-add-back-members.patch @@ -0,0 +1,43 @@ +From: Lee Duncan +Date: Fri 10 Mar 2023 09:42:11 AM PST +Subject: [PATCH] scsi_disk kABI: add back members +Patch-mainline: never (kABI patch) +References: bsc#1209092 + +Add back 4 members removed from the scsi_disk structure +by patch scsi-sd-Revert-Rework-asynchronous-resume-support, +but add them with different names to ensure they don't +get used, or if they do we will know. +--- + drivers/scsi/sd.h | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +--- a/drivers/scsi/sd.h ++++ b/drivers/scsi/sd.h +@@ -150,6 +150,26 @@ struct scsi_disk { + unsigned urswrz : 1; + unsigned security : 1; + unsigned ignore_medium_access_errors : 1; ++ ++ /* ++ * these 4 fields have been removed when commit ++ * 785538bfdd682c8e was backported, but are being ++ * added back in for (1) kABI checking, and ++ * (2) so that the struct doesn't change size, but ++ * they are added with name changes, in case some ++ * module tries to use them. ++ */ ++#ifdef __GENKSYMS__ ++ int start_result; ++ u32 start_sense_len; ++ u8 start_sense_buffer[SCSI_SENSE_BUFFERSIZE]; ++ struct work_struct start_done_work; ++#else ++ int start_result_not_used; ++ u32 start_sense_len_not_used; ++ u8 start_sense_buffer_not_used[SCSI_SENSE_BUFFERSIZE]; ++ struct work_struct start_done_work_not_used; ++#endif + }; + #define to_scsi_disk(obj) container_of(obj, struct scsi_disk, disk_dev) + diff --git a/patches.suse/0001-net-tls-fix-possible-race-condition-between-do_tls_g.patch b/patches.suse/0001-net-tls-fix-possible-race-condition-between-do_tls_g.patch new file mode 100644 index 0000000..ba8237c --- /dev/null +++ b/patches.suse/0001-net-tls-fix-possible-race-condition-between-do_tls_g.patch @@ -0,0 +1,80 @@ +From 49c47cc21b5b7a3d8deb18fc57b0aa2ab1286962 Mon Sep 17 00:00:00 2001 +From: Hangyu Hua +Date: Tue Feb 28 10:33:44 2023 +0800 +Subject: [PATCH] net: tls: fix possible race condition between + do_tls_getsockopt_conf() and do_tls_setsockopt_conf() +Git-commit: 49c47cc21b5b7a3d8deb18fc57b0aa2ab1286962 +Patch-mainline: v6.3-rc2 +References: bsc#1209366 CVE-2023-28466 + +ctx->crypto_send.info is not protected by lock_sock in +do_tls_getsockopt_conf(). A race condition between do_tls_getsockopt_conf() +and error paths of do_tls_setsockopt_conf() may lead to a use-after-free +or null-deref. + +More discussion: https://lore.kernel.org/all/Y/ht6gQL+u6fj3dG@hog/ + +Fixes: 3c4d7559159b ("tls: kernel TLS support") +Signed-off-by: Hangyu Hua +Link: https://lore.kernel.org/r/20230228023344.9623-1-hbh25y@gmail.com +Signed-off-by: Jakub Kicinski +Acked-by: Vasant Karasulli + +--- + net/tls/tls_main.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/net/tls/tls_main.c b/net/tls/tls_main.c +index ce47bc3e6..1cb115366 100644 +--- a/net/tls/tls_main.c ++++ b/net/tls/tls_main.c +@@ -384,13 +384,11 @@ static int do_tls_getsockopt_conf(struct sock *sk, char __user *optval, + rc = -EINVAL; + goto out; + } +- lock_sock(sk); + memcpy(crypto_info_aes_gcm_128->iv, + cctx->iv + TLS_CIPHER_AES_GCM_128_SALT_SIZE, + TLS_CIPHER_AES_GCM_128_IV_SIZE); + memcpy(crypto_info_aes_gcm_128->rec_seq, cctx->rec_seq, + TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE); +- release_sock(sk); + if (copy_to_user(optval, + crypto_info_aes_gcm_128, + sizeof(*crypto_info_aes_gcm_128))) +@@ -408,13 +406,11 @@ static int do_tls_getsockopt_conf(struct sock *sk, char __user *optval, + rc = -EINVAL; + goto out; + } +- lock_sock(sk); + memcpy(crypto_info_aes_gcm_256->iv, + cctx->iv + TLS_CIPHER_AES_GCM_256_SALT_SIZE, + TLS_CIPHER_AES_GCM_256_IV_SIZE); + memcpy(crypto_info_aes_gcm_256->rec_seq, cctx->rec_seq, + TLS_CIPHER_AES_GCM_256_REC_SEQ_SIZE); +- release_sock(sk); + if (copy_to_user(optval, + crypto_info_aes_gcm_256, + sizeof(*crypto_info_aes_gcm_256))) +@@ -434,6 +430,8 @@ static int do_tls_getsockopt(struct sock *sk, int optname, + { + int rc = 0; + ++ lock_sock(sk); ++ + switch (optname) { + case TLS_TX: + case TLS_RX: +@@ -444,6 +442,9 @@ static int do_tls_getsockopt(struct sock *sk, int optname, + rc = -ENOPROTOOPT; + break; + } ++ ++ release_sock(sk); ++ + return rc; + } + +-- +2.34.1 + diff --git a/patches.suse/NFSD-fix-use-after-free-in-nfsd4_ssc_setup_dul.patch b/patches.suse/NFSD-fix-use-after-free-in-nfsd4_ssc_setup_dul.patch new file mode 100644 index 0000000..ad82532 --- /dev/null +++ b/patches.suse/NFSD-fix-use-after-free-in-nfsd4_ssc_setup_dul.patch @@ -0,0 +1,32 @@ +From: Xingyuan Mo +Date: Thu, 12 Jan 2023 00:24:53 +0800 +Subject: [PATCH] NFSD: fix use-after-free in nfsd4_ssc_setup_dul() +Git-commit: e6cf91b7b47ff82b624bdfe2fdcde32bb52e71dd +Patch-mainline: v6.2 +References: git-fixes bsc#1209788 CVE-2023-1652 + +If signal_pending() returns true, schedule_timeout() will not be executed, +causing the waiting task to remain in the wait queue. +Fixed by adding a call to finish_wait(), which ensures that the waiting +task will always be removed from the wait queue. + +Fixes: f4e44b393389 ("NFSD: delay unmount source's export after inter-server copy completed.") +Signed-off-by: Xingyuan Mo +Reviewed-by: Jeff Layton +Signed-off-by: Chuck Lever +Acked-by: NeilBrown + +--- + fs/nfsd/nfs4proc.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/fs/nfsd/nfs4proc.c ++++ b/fs/nfsd/nfs4proc.c +@@ -1205,6 +1205,7 @@ try_again: + /* allow 20secs for mount/unmount for now - revisit */ + if (signal_pending(current) || + (schedule_timeout(20*HZ) == 0)) { ++ finish_wait(&nn->nfsd_ssc_waitq, &wait); + kfree(work); + return nfserr_eagain; + } diff --git a/patches.suse/arm64-Discard-.note.GNU-stack-section.patch b/patches.suse/arm64-Discard-.note.GNU-stack-section.patch index 210f52a..501f6d8 100644 --- a/patches.suse/arm64-Discard-.note.GNU-stack-section.patch +++ b/patches.suse/arm64-Discard-.note.GNU-stack-section.patch @@ -2,7 +2,9 @@ From fa71cc4400924859467812705749ee9b98b3eec6 Mon Sep 17 00:00:00 2001 From: Oscar Salvador Date: Wed, 5 Oct 2022 18:09:21 +0200 Subject: [PATCH] arm64: Discard .note.GNU-stack section -Patch-mainline: Never, SUSE specific + +Git-commit: 99cb0d917ffa1ab628bb67364ca9b162c07699b1 (partial - arm64 only) +Patch-mainline: v6.2-rc2 References: bsc#1203693 Commit "Makefile: link with -z noexecstack --no-warn-rwx-segments: ddbd47d2219a" diff --git a/patches.suse/ath11k-pci-Add-more-MODULE_FIRMWARE-entries.patch b/patches.suse/ath11k-pci-Add-more-MODULE_FIRMWARE-entries.patch new file mode 100644 index 0000000..e9badb5 --- /dev/null +++ b/patches.suse/ath11k-pci-Add-more-MODULE_FIRMWARE-entries.patch @@ -0,0 +1,36 @@ +From 962fc87f2c8d4a338c0ce9b7fcaed815fdfbca6a Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Thu, 30 Mar 2023 16:29:01 +0200 +Subject: [PATCH] ath11k: pci: Add more MODULE_FIRMWARE() entries +Patch-mainline: Submitted, linux-wireless ML +References: bsc#1209965 + +As there are a few more models supported by the driver, let's add the +missing MODULE_FIRMWARE() entries for them. The lack of them resulted +in the missing device enablement on some systems, such as the +installation image of openSUSE. + +While we are at it, use the wildcard instead of listing each firmware +files individually for each. + +Signed-off-by: Takashi Iwai + +--- + drivers/net/wireless/ath/ath11k/pci.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +--- a/drivers/net/wireless/ath/ath11k/pci.c ++++ b/drivers/net/wireless/ath/ath11k/pci.c +@@ -1037,7 +1037,8 @@ module_exit(ath11k_pci_exit); + MODULE_DESCRIPTION("Driver support for Qualcomm Technologies 802.11ax WLAN PCIe devices"); + MODULE_LICENSE("Dual BSD/GPL"); + +-/* QCA639x 2.0 firmware files */ +-MODULE_FIRMWARE(ATH11K_FW_DIR "/QCA6390/hw2.0/" ATH11K_BOARD_API2_FILE); +-MODULE_FIRMWARE(ATH11K_FW_DIR "/QCA6390/hw2.0/" ATH11K_AMSS_FILE); +-MODULE_FIRMWARE(ATH11K_FW_DIR "/QCA6390/hw2.0/" ATH11K_M3_FILE); ++/* firmware files */ ++MODULE_FIRMWARE(ATH11K_FW_DIR "/QCA6390/hw2.0/*"); ++MODULE_FIRMWARE(ATH11K_FW_DIR "/QCN9074/hw1.0/*"); ++MODULE_FIRMWARE(ATH11K_FW_DIR "/WCN6855/hw2.0/*"); ++MODULE_FIRMWARE(ATH11K_FW_DIR "/WCN6855/hw2.1/*"); diff --git a/patches.suse/bcache-Revert-bcache-use-bvec_virt-2878.patch b/patches.suse/bcache-Revert-bcache-use-bvec_virt-2878.patch new file mode 100644 index 0000000..6de5379 --- /dev/null +++ b/patches.suse/bcache-Revert-bcache-use-bvec_virt-2878.patch @@ -0,0 +1,47 @@ +From 2878feaed543c35f9dbbe6d8ce36fb67ac803eef Mon Sep 17 00:00:00 2001 +From: Coly Li +Date: Wed, 3 Nov 2021 23:10:41 +0800 +Subject: [PATCH] bcache: Revert "bcache: use bvec_virt" +Git-commit: 2878feaed543c35f9dbbe6d8ce36fb67ac803eef +Patch-mainline: v5.16-rc1 +References: git-fixes, bsc#1205493 + +This reverts commit 2fd3e5efe791946be0957c8e1eed9560b541fe46. + +The above commit replaces page_address(bv->bv_page) by bvec_virt(bv) to +avoid directly access to bv->bv_page, but in situation bv->bv_offset is +not zero and page_address(bv->bv_page) is not equal to bvec_virt(bv). In +such case a memory corruption may happen because memory in next page is +tainted by following line in do_btree_node_write(), + memcpy(bvec_virt(bv), addr, PAGE_SIZE); + +This patch reverts the mentioned commit to avoid the memory corruption. + +Fixes: 2fd3e5efe791 ("bcache: use bvec_virt") +Signed-off-by: Coly Li +Cc: Christoph Hellwig +Cc: stable@vger.kernel.org # 5.15 +Signed-off-by: Christoph Hellwig +Link: https://lore.kernel.org/r/20211103151041.70516-1-colyli@suse.de +Signed-off-by: Jens Axboe + +--- + drivers/md/bcache/btree.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c +index 93b67b8d31c3..88c573eeb598 100644 +--- a/drivers/md/bcache/btree.c ++++ b/drivers/md/bcache/btree.c +@@ -378,7 +378,7 @@ static void do_btree_node_write(struct btree *b) + struct bvec_iter_all iter_all; + + bio_for_each_segment_all(bv, b->bio, iter_all) { +- memcpy(bvec_virt(bv), addr, PAGE_SIZE); ++ memcpy(page_address(bv->bv_page), addr, PAGE_SIZE); + addr += PAGE_SIZE; + } + +-- +2.39.2 + diff --git a/patches.suse/bcache-fix-wrong-bdev-parameter-when-calling-bio_alloc_clone-in-do_bio_hook-9dca.patch b/patches.suse/bcache-fix-wrong-bdev-parameter-when-calling-bio_alloc_clone-in-do_bio_hook-9dca.patch new file mode 100644 index 0000000..b52449d --- /dev/null +++ b/patches.suse/bcache-fix-wrong-bdev-parameter-when-calling-bio_alloc_clone-in-do_bio_hook-9dca.patch @@ -0,0 +1,46 @@ +From 9dca4168a37c9cfe182f077f0d2289292e9e3656 Mon Sep 17 00:00:00 2001 +From: Coly Li +Date: Wed, 20 Apr 2022 00:04:25 +0800 +Subject: [PATCH] bcache: fix wrong bdev parameter when calling + bio_alloc_clone() in do_bio_hook() +Git-commit: 9dca4168a37c9cfe182f077f0d2289292e9e3656 +Patch-mainline: v5.18-rc4 +References: git-fixes, bsc#1205493 + +Commit abfc426d1b2f ("block: pass a block_device to bio_clone_fast") +calls the modified bio_alloc_clone() in bcache code as: + bio_init_clone(bio->bi_bdev, bio, orig_bio, GFP_NOIO); + +But the first parameter is wrong, where bio->bi_bdev should be +orig_bio->bi_bdev. The wrong bi_bdev panics the kernel when submitting +cache bio. + +This patch fixes the wrong bdev parameter usage and avoid the panic. + +Fixes: abfc426d1b2f ("block: pass a block_device to bio_clone_fast") +Signed-off-by: Coly Li +Cc: Christoph Hellwig +Cc: Mike Snitzer +Link: https://lore.kernel.org/r/20220419160425.4148-3-colyli@suse.de +Signed-off-by: Jens Axboe + +--- + drivers/md/bcache/request.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/md/bcache/request.c b/drivers/md/bcache/request.c +index fdd0194f84dd..320fcdfef48e 100644 +--- a/drivers/md/bcache/request.c ++++ b/drivers/md/bcache/request.c +@@ -685,7 +685,7 @@ static void do_bio_hook(struct search *s, + { + struct bio *bio = &s->bio.bio; + +- bio_init_clone(bio->bi_bdev, bio, orig_bio, GFP_NOIO); ++ bio_init_clone(orig_bio->bi_bdev, bio, orig_bio, GFP_NOIO); + /* + * bi_end_io can be set separately somewhere else, e.g. the + * variants in, +-- +2.39.2 + diff --git a/patches.suse/bcache-put-bch_bio_map-back-to-correct-location-in-journal_write_unlocked-ff26.patch b/patches.suse/bcache-put-bch_bio_map-back-to-correct-location-in-journal_write_unlocked-ff26.patch new file mode 100644 index 0000000..a682edb --- /dev/null +++ b/patches.suse/bcache-put-bch_bio_map-back-to-correct-location-in-journal_write_unlocked-ff26.patch @@ -0,0 +1,52 @@ +From ff2695e52c9936febf65aa36a1769881da71bec5 Mon Sep 17 00:00:00 2001 +From: Coly Li +Date: Wed, 20 Apr 2022 00:04:24 +0800 +Subject: [PATCH] bcache: put bch_bio_map() back to correct location in + journal_write_unlocked() +Git-commit: ff2695e52c9936febf65aa36a1769881da71bec5 +Patch-mainline: v5.18-rc4 +References: git-fixes, bsc#1205493 + +Commit a7c50c940477 ("block: pass a block_device and opf to bio_reset") +moves bch_bio_map() inside journal_write_unlocked() next to the location +where the modified bio_reset() was called. + +This change is wrong because calling bch_bio_map() immediately after +bio_reset(), a BUG_ON(!bio->bi_iter.bi_size) inside bch_bio_map() will +be triggered and panic the kernel. + +This patch puts bch_bio_map() back to its original correct location in +journal_write_unlocked() and avoid the BUG_ON(). + +Fixes: a7c50c940477 ("block: pass a block_device and opf to bio_reset") +Signed-off-by: Coly Li +Cc: Christoph Hellwig +Cc: Chaitanya Kulkarni +Link: https://lore.kernel.org/r/20220419160425.4148-2-colyli@suse.de +Signed-off-by: Jens Axboe + +--- + drivers/md/bcache/journal.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/md/bcache/journal.c b/drivers/md/bcache/journal.c +index 7c2ca52ca3e4..df5347ea450b 100644 +--- a/drivers/md/bcache/journal.c ++++ b/drivers/md/bcache/journal.c +@@ -771,12 +771,12 @@ static void journal_write_unlocked(struct closure *cl) + + bio_reset(bio, ca->bdev, REQ_OP_WRITE | + REQ_SYNC | REQ_META | REQ_PREFLUSH | REQ_FUA); +- bch_bio_map(bio, w->data); + bio->bi_iter.bi_sector = PTR_OFFSET(k, i); + bio->bi_iter.bi_size = sectors << 9; + + bio->bi_end_io = journal_write_endio; + bio->bi_private = w; ++ bch_bio_map(bio, w->data); + + trace_bcache_journal_write(bio, w->data->keys); + bio_list_add(&list, bio); +-- +2.39.2 + diff --git a/patches.suse/prlimit-do_prlimit-needs-to-have-a-speculation-check.patch b/patches.suse/prlimit-do_prlimit-needs-to-have-a-speculation-check.patch new file mode 100644 index 0000000..0437d99 --- /dev/null +++ b/patches.suse/prlimit-do_prlimit-needs-to-have-a-speculation-check.patch @@ -0,0 +1,35 @@ +From: Greg Kroah-Hartman +Date: Fri, 20 Jan 2023 11:03:20 +0100 +Subject: prlimit: do_prlimit needs to have a speculation check +Git-commit: 739790605705ddcf18f21782b9c99ad7d53a8c11 +Patch-mainline: v6.2-rc5 +References: bsc#1209256 CVE-2017-5753 + +do_prlimit() adds the user-controlled resource value to a pointer that +will subsequently be dereferenced. In order to help prevent this +codepath from being used as a spectre "gadget" a barrier needs to be +added after checking the range. + +Reported-by: Jordy Zomer +Tested-by: Jordy Zomer +Suggested-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman +Acked-by: Michal Koutný +--- + kernel/sys.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/kernel/sys.c b/kernel/sys.c +index 5fd54bf0e886..88b31f096fb2 100644 +--- a/kernel/sys.c ++++ b/kernel/sys.c +@@ -1442,6 +1442,8 @@ static int do_prlimit(struct task_struct *tsk, unsigned int resource, + + if (resource >= RLIM_NLIMITS) + return -EINVAL; ++ resource = array_index_nospec(resource, RLIM_NLIMITS); ++ + if (new_rlim) { + if (new_rlim->rlim_cur > new_rlim->rlim_max) + return -EINVAL; + diff --git a/patches.suse/s390-uaccess-add-missing-earlyclobber-annotations-to-__clear_user.patch b/patches.suse/s390-uaccess-add-missing-earlyclobber-annotations-to-__clear_user.patch new file mode 100644 index 0000000..3d4797d --- /dev/null +++ b/patches.suse/s390-uaccess-add-missing-earlyclobber-annotations-to-__clear_user.patch @@ -0,0 +1,38 @@ +From: Heiko Carstens +Date: Thu, 23 Mar 2023 13:09:16 +0100 +Subject: s390/uaccess: add missing earlyclobber annotations to __clear_user() +Git-commit: 89aba4c26fae4e459f755a18912845c348ee48f3 +Patch-mainline: v6.3-rc5 +References: bsc#1209858 + +Add missing earlyclobber annotation to size, to, and tmp2 operands of the +__clear_user() inline assembly since they are modified or written to before +the last usage of all input operands. This can lead to incorrect register +allocation for the inline assembly. + +Fixes: 6c2a9e6df604 ("[S390] Use alternative user-copy operations for new hardware.") +Reported-by: Mark Rutland +Link: https://lore.kernel.org/all/20230321122514.1743889-3-mark.rutland@arm.com/ +Cc: stable@vger.kernel.org +Reviewed-by: Gerald Schaefer +Signed-off-by: Heiko Carstens +Signed-off-by: Vasily Gorbik +Acked-by: Michal Koutný +--- + arch/s390/lib/uaccess.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/s390/lib/uaccess.c b/arch/s390/lib/uaccess.c +index 720036fb1924..d44214072779 100644 +--- a/arch/s390/lib/uaccess.c ++++ b/arch/s390/lib/uaccess.c +@@ -349,7 +349,7 @@ static inline unsigned long clear_user_m + "4: slgr %0,%0\n" + "5:\n" + EX_TABLE(0b,2b) EX_TABLE(6b,2b) EX_TABLE(3b,5b) EX_TABLE(7b,5b) +- : "+a" (size), "+a" (to), "+a" (tmp1), "=a" (tmp2) ++ : "+&a" (size), "+&a" (to), "+a" (tmp1), "=&a" (tmp2) + : "a" (empty_zero_page), [spec] "d" (spec.val) + : "cc", "memory", "0"); + return size; + diff --git a/patches.suse/sbitmap-avoid-lockups-when-waker-gets-preempted.patch b/patches.suse/sbitmap-avoid-lockups-when-waker-gets-preempted.patch new file mode 100644 index 0000000..5f3013c --- /dev/null +++ b/patches.suse/sbitmap-avoid-lockups-when-waker-gets-preempted.patch @@ -0,0 +1,77 @@ +From: Jan Kara +Subject: [PATCH] sbitmap: Avoid lockups when waker gets preempted +References: bsc#1209118 +Patch-mainline: Never, sbitmap code got rewritten + +When the process performing wakeup on the wait queue gets preempted and this +wait queue has the only waiter, we can loose many wakeups and in the end we +may end up with waiter in the wait queue without anybody able to wake him up. + +The scenario can by like: We have waitqueue 0 active. + + CPU0 CPU1 + __sbq_wake_up() + decrements wait_cnt to 0 + wake_up_nr() -> wakes waiters + queues IOs until all tags are used + blk_mq_get_tag() finds no tag -> + adds waiter to waitqueue 0 + all IOs complete - wakeups discarded because + waitqueue 0 still has wait_cnt == 0. + set wait_cnt to 8 + +And waiter in waitqueue 0 sleeps indefinitely now because there's no IO to +complete to wake him up. + +Fix the problem by waking up some waiters if we don't find any valid wait queue +to perform wake up on. This makes sure we don't loose all the wake ups. + +Signed-off-by: Jan Kara + +--- + lib/sbitmap.c | 22 ++++++++++++++++++---- + 1 file changed, 18 insertions(+), 4 deletions(-) + +--- a/lib/sbitmap.c ++++ b/lib/sbitmap.c +@@ -532,6 +532,7 @@ EXPORT_SYMBOL_GPL(sbitmap_queue_min_shal + static struct sbq_wait_state *sbq_wake_ptr(struct sbitmap_queue *sbq) + { + int i, wake_index; ++ struct sbq_wait_state *active_ws = NULL; + + if (!atomic_read(&sbq->ws_active)) + return NULL; +@@ -540,15 +541,28 @@ static struct sbq_wait_state *sbq_wake_p + for (i = 0; i < SBQ_WAIT_QUEUES; i++) { + struct sbq_wait_state *ws = &sbq->ws[wake_index]; + +- if (waitqueue_active(&ws->wait) && atomic_read(&ws->wait_cnt) > 0) { +- if (wake_index != atomic_read(&sbq->wake_index)) +- atomic_set(&sbq->wake_index, wake_index); +- return ws; ++ if (waitqueue_active(&ws->wait)) { ++ if (atomic_read(&ws->wait_cnt) > 0) { ++ if (wake_index != atomic_read(&sbq->wake_index)) ++ atomic_set(&sbq->wake_index, wake_index); ++ return ws; ++ } ++ active_ws = ws; + } + + wake_index = sbq_index_inc(wake_index); + } + ++ /* ++ * There are active waitqueues but all are in the process of being ++ * woken. Perform wakeup on some waitqueue to avoid loosing the wakeup. ++ * This is actually important in case task performing wakeup gets ++ * preempted and lots of other wakeup events happen before it gets ++ * scheduled again. ++ */ ++ if (active_ws) ++ wake_up_nr(&active_ws->wait, READ_ONCE(sbq->wake_batch)); ++ + return NULL; + } + diff --git a/patches.suse/scsi-sd-Revert-Rework-asynchronous-resume-support.patch b/patches.suse/scsi-sd-Revert-Rework-asynchronous-resume-support.patch new file mode 100644 index 0000000..761fd9d --- /dev/null +++ b/patches.suse/scsi-sd-Revert-Rework-asynchronous-resume-support.patch @@ -0,0 +1,199 @@ +From: Bart Van Assche +Date: Tue, 16 Aug 2022 10:26:38 -0700 +Subject: scsi: sd: Revert "Rework asynchronous resume support" +Git-commit: 785538bfdd682c8e962341d585f9b88262a0475e +Patch-mainline: v6.0-rc3 +References: bsc#1209092 + +Although commit 88f1669019bd ("scsi: sd: Rework asynchronous resume support") +eliminates a delay for some ATA disks after resume, it causes resume of ATA +disks to fail on other setups. See also: + + * "Resume process hangs for 5-6 seconds starting sometime in 5.16" + (https://bugzilla.kernel.org/show_bug.cgi?id=215880). + + * Geert's regression report + (https://lore.kernel.org/linux-scsi/alpine.DEB.2.22.394.2207191125130.1006766@ramsan.of.borg/). + +This is what I understand about this issue: + + * During resume, ata_port_pm_resume() starts the SCSI error handler. This + changes the SCSI host state into SHOST_RECOVERY and causes + scsi_queue_rq() to return BLK_STS_RESOURCE. + + * sd_resume() calls sd_start_stop_device() for ATA devices. That function + in turn calls sd_submit_start() which tries to submit a START STOP UNIT + command. That command can only be submitted after the SCSI error handler + has changed the SCSI host state back to SHOST_RUNNING. + + * The SCSI error handler runs on its own thread and calls + schedule_work(&(ap->scsi_rescan_task)). That causes + ata_scsi_dev_rescan() to be called from the context of a kernel + workqueue. That call hangs in blk_mq_get_tag(). I'm not sure why - maybe + because all available tags have been allocated by sd_submit_start() + calls (this is a guess). + +Link: https://lore.kernel.org/r/20220816172638.538734-1-bvanassche@acm.org +Fixes: 88f1669019bd ("scsi: sd: Rework asynchronous resume support") +Cc: Damien Le Moal +Cc: Hannes Reinecke +Cc: Geert Uytterhoeven +Cc: gzhqyz@gmail.com +Reported-by: Geert Uytterhoeven +Reported-by: gzhqyz@gmail.com +Reported-and-tested-by: Vlastimil Babka +Tested-by: John Garry +Tested-by: Hans de Goede +Signed-off-by: Bart Van Assche +Signed-off-by: Martin K. Petersen +Acked-by: Lee Duncan +--- + drivers/scsi/sd.c | 84 ++++++++++++------------------------------------------- + drivers/scsi/sd.h | 5 ---- + 2 files changed, 18 insertions(+), 71 deletions(-) + +diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c +index 8f79fa6318fe..eb76ba055021 100644 +--- a/drivers/scsi/sd.c ++++ b/drivers/scsi/sd.c +@@ -103,7 +103,6 @@ static void sd_config_discard(struct scsi_disk *, unsigned int); + static void sd_config_write_same(struct scsi_disk *); + static int sd_revalidate_disk(struct gendisk *); + static void sd_unlock_native_capacity(struct gendisk *disk); +-static void sd_start_done_work(struct work_struct *work); + static int sd_probe(struct device *); + static int sd_remove(struct device *); + static void sd_shutdown(struct device *); +@@ -3471,7 +3470,6 @@ static int sd_probe(struct device *dev) + sdkp->max_retries = SD_MAX_RETRIES; + atomic_set(&sdkp->openers, 0); + atomic_set(&sdkp->device->ioerr_cnt, 0); +- INIT_WORK(&sdkp->start_done_work, sd_start_done_work); + + if (!sdp->request_queue->rq_timeout) { + if (sdp->type != TYPE_MOD) +@@ -3594,69 +3592,12 @@ static void scsi_disk_release(struct device *dev) + kfree(sdkp); + } + +-/* Process sense data after a START command finished. */ +-static void sd_start_done_work(struct work_struct *work) +-{ +- struct scsi_disk *sdkp = container_of(work, typeof(*sdkp), +- start_done_work); +- struct scsi_sense_hdr sshdr; +- int res = sdkp->start_result; +- +- if (res == 0) +- return; +- +- sd_print_result(sdkp, "Start/Stop Unit failed", res); +- +- if (res < 0) +- return; +- +- if (scsi_normalize_sense(sdkp->start_sense_buffer, +- sdkp->start_sense_len, &sshdr)) +- sd_print_sense_hdr(sdkp, &sshdr); +-} +- +-/* A START command finished. May be called from interrupt context. */ +-static void sd_start_done(struct request *req, blk_status_t status) +-{ +- const struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(req); +- struct scsi_disk *sdkp = scsi_disk(req->q->disk); +- +- sdkp->start_result = scmd->result; +- WARN_ON_ONCE(scmd->sense_len > SCSI_SENSE_BUFFERSIZE); +- sdkp->start_sense_len = scmd->sense_len; +- memcpy(sdkp->start_sense_buffer, scmd->sense_buffer, +- ARRAY_SIZE(sdkp->start_sense_buffer)); +- WARN_ON_ONCE(!schedule_work(&sdkp->start_done_work)); +-} +- +-/* Submit a START command asynchronously. */ +-static int sd_submit_start(struct scsi_disk *sdkp, u8 cmd[], u8 cmd_len) +-{ +- struct scsi_device *sdev = sdkp->device; +- struct request_queue *q = sdev->request_queue; +- struct request *req; +- struct scsi_cmnd *scmd; +- +- req = scsi_alloc_request(q, REQ_OP_DRV_IN, BLK_MQ_REQ_PM); +- if (IS_ERR(req)) +- return PTR_ERR(req); +- +- scmd = blk_mq_rq_to_pdu(req); +- scmd->cmd_len = cmd_len; +- memcpy(scmd->cmnd, cmd, cmd_len); +- scmd->allowed = sdkp->max_retries; +- req->timeout = SD_TIMEOUT; +- req->rq_flags |= RQF_PM | RQF_QUIET; +- req->end_io = sd_start_done; +- blk_execute_rq_nowait(req, /*at_head=*/true); +- +- return 0; +-} +- + static int sd_start_stop_device(struct scsi_disk *sdkp, int start) + { + unsigned char cmd[6] = { START_STOP }; /* START_VALID */ ++ struct scsi_sense_hdr sshdr; + struct scsi_device *sdp = sdkp->device; ++ int res; + + if (start) + cmd[4] |= 1; /* START */ +@@ -3667,10 +3608,23 @@ static int sd_start_stop_device(struct scsi_disk *sdkp, int start) + if (!scsi_device_online(sdp)) + return -ENODEV; + +- /* Wait until processing of sense data has finished. */ +- flush_work(&sdkp->start_done_work); ++ res = scsi_execute(sdp, cmd, DMA_NONE, NULL, 0, NULL, &sshdr, ++ SD_TIMEOUT, sdkp->max_retries, 0, RQF_PM, NULL); ++ if (res) { ++ sd_print_result(sdkp, "Start/Stop Unit failed", res); ++ if (res > 0 && scsi_sense_valid(&sshdr)) { ++ sd_print_sense_hdr(sdkp, &sshdr); ++ /* 0x3a is medium not present */ ++ if (sshdr.asc == 0x3a) ++ res = 0; ++ } ++ } + +- return sd_submit_start(sdkp, cmd, sizeof(cmd)); ++ /* SCSI error codes must not go to the generic layer */ ++ if (res) ++ return -EIO; ++ ++ return 0; + } + + /* +@@ -3697,8 +3651,6 @@ static void sd_shutdown(struct device *dev) + sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n"); + sd_start_stop_device(sdkp, 0); + } +- +- flush_work(&sdkp->start_done_work); + } + + static int sd_suspend_common(struct device *dev, bool ignore_stop_errors) +diff --git a/drivers/scsi/sd.h b/drivers/scsi/sd.h +index b89187761d61..5eea762f84d1 100644 +--- a/drivers/scsi/sd.h ++++ b/drivers/scsi/sd.h +@@ -150,11 +150,6 @@ struct scsi_disk { + unsigned urswrz : 1; + unsigned security : 1; + unsigned ignore_medium_access_errors : 1; +- +- int start_result; +- u32 start_sense_len; +- u8 start_sense_buffer[SCSI_SENSE_BUFFERSIZE]; +- struct work_struct start_done_work; + }; + #define to_scsi_disk(obj) container_of(obj, struct scsi_disk, disk_dev) + + diff --git a/patches.suse/scsi-smartpqi-Add-controller-cache-flush-during-rmmo.patch b/patches.suse/scsi-smartpqi-Add-controller-cache-flush-during-rmmo.patch new file mode 100644 index 0000000..1a40df6 --- /dev/null +++ b/patches.suse/scsi-smartpqi-Add-controller-cache-flush-during-rmmo.patch @@ -0,0 +1,45 @@ +From: Gilbert Wu +Date: Tue, 8 Nov 2022 13:22:03 -0600 +Subject: scsi: smartpqi: Add controller cache flush during rmmod +Patch-mainline: v6.2-rc1 +Git-commit: 14063fb625c4541f48ff0dc7ae005b0d5a159c3f +References: bsc#1207315 + +Add in a call to flush the controller cache during driver removal. + +Reviewed-by: Scott Benesh +Reviewed-by: Mike Mcgowan +Reviewed-by: Kevin Barnett +Signed-off-by: Gilbert Wu +Signed-off-by: Don Brace +Link: https://lore.kernel.org/r/166793532388.322537.878022136408270892.stgit@brunhilda +Signed-off-by: Martin K. Petersen +Acked-by: Martin Wilck +--- + drivers/scsi/smartpqi/smartpqi_init.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +--- a/drivers/scsi/smartpqi/smartpqi_init.c ++++ b/drivers/scsi/smartpqi/smartpqi_init.c +@@ -9040,6 +9040,7 @@ static void pqi_pci_remove(struct pci_de + { + struct pqi_ctrl_info *ctrl_info; + u16 vendor_id; ++ int rc; + + ctrl_info = pci_get_drvdata(pci_dev); + if (!ctrl_info) +@@ -9051,6 +9052,13 @@ static void pqi_pci_remove(struct pci_de + else + ctrl_info->ctrl_removal_state = PQI_CTRL_GRACEFUL_REMOVAL; + ++ if (ctrl_info->ctrl_removal_state == PQI_CTRL_GRACEFUL_REMOVAL) { ++ rc = pqi_flush_cache(ctrl_info, RESTART); ++ if (rc) ++ dev_err(&pci_dev->dev, ++ "unable to flush controller cache during remove\n"); ++ } ++ + pqi_remove_ctrl(ctrl_info); + } + diff --git a/patches.suse/scsi-smartpqi-Add-new-controller-PCI-IDs.patch b/patches.suse/scsi-smartpqi-Add-new-controller-PCI-IDs.patch new file mode 100644 index 0000000..e43852c --- /dev/null +++ b/patches.suse/scsi-smartpqi-Add-new-controller-PCI-IDs.patch @@ -0,0 +1,127 @@ +From: Mike McGowen +Date: Tue, 8 Nov 2022 13:21:43 -0600 +Subject: scsi: smartpqi: Add new controller PCI IDs +Patch-mainline: v6.2-rc1 +Git-commit: 0b93cf2a9097b1c3d75642ef878ba87f15f03043 +References: bsc#1207315 + +All PCI ID entries in Hex. +Add PCI IDs for ByteDance controllers: + VID / DID / SVID / SDID + ---- ---- ---- ---- + ByteHBA JGH43024-8 9005 / 028f / 1e93 / 1000 + ByteHBA JGH43034-8 9005 / 028f / 1e93 / 1001 + ByteHBA JGH44014-8 9005 / 028f / 1e93 / 1002 + +Add PCI IDs for new Inspur controllers: + VID / DID / SVID / SDID + ---- ---- ---- ---- + INSPUR RT0800M7E 9005 / 028f / 1bd4 / 0086 + INSPUR RT0800M7H 9005 / 028f / 1bd4 / 0087 + INSPUR RT0804M7R 9005 / 028f / 1bd4 / 0088 + INSPUR RT0808M7R 9005 / 028f / 1bd4 / 0089 + +Add PCI IDs for new FAB A controllers: + VID / DID / SVID / SDID + ---- ---- ---- ---- + Adaptec SmartRAID 3254-16e /e 9005 / 028f / 9005 / 1475 + Adaptec HBA 1200-16e 9005 / 028f / 9005 / 14c3 + Adaptec HBA 1200-8e 9005 / 028f / 9005 / 14c4 + +Add H3C controller PCI IDs: + VID / DID / SVID / SDID + ---- ---- ---- ---- + H3C H4508-Mf-8i 9005 / 028f / 193d / 110b + +Reviewed-by: Scott Benesh +Reviewed-by: Scott Teel +Signed-off-by: Mike McGowen +Signed-off-by: Don Brace +Link: https://lore.kernel.org/r/166793530327.322537.6056884426657539311.stgit@brunhilda +Signed-off-by: Martin K. Petersen +Acked-by: Martin Wilck +--- + drivers/scsi/smartpqi/smartpqi_init.c | 44 ++++++++++++++++++++++++++++++++++ + 1 file changed, 44 insertions(+) + +--- a/drivers/scsi/smartpqi/smartpqi_init.c ++++ b/drivers/scsi/smartpqi/smartpqi_init.c +@@ -9322,6 +9322,10 @@ static const struct pci_device_id pqi_pc + }, + { + PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, ++ 0x193d, 0x110b) ++ }, ++ { ++ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, + 0x193d, 0x8460) + }, + { +@@ -9422,6 +9426,22 @@ static const struct pci_device_id pqi_pc + }, + { + PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, ++ 0x1bd4, 0x0086) ++ }, ++ { ++ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, ++ 0x1bd4, 0x0087) ++ }, ++ { ++ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, ++ 0x1bd4, 0x0088) ++ }, ++ { ++ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, ++ 0x1bd4, 0x0089) ++ }, ++ { ++ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, + 0x19e5, 0xd227) + }, + { +@@ -9670,6 +9690,10 @@ static const struct pci_device_id pqi_pc + }, + { + PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, ++ PCI_VENDOR_ID_ADAPTEC2, 0x1475) ++ }, ++ { ++ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, + PCI_VENDOR_ID_ADAPTEC2, 0x1480) + }, + { +@@ -9726,6 +9750,14 @@ static const struct pci_device_id pqi_pc + }, + { + PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, ++ PCI_VENDOR_ID_ADAPTEC2, 0x14c3) ++ }, ++ { ++ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, ++ PCI_VENDOR_ID_ADAPTEC2, 0x14c4) ++ }, ++ { ++ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, + PCI_VENDOR_ID_ADAPTEC2, 0x14d0) + }, + { +@@ -9962,6 +9994,18 @@ static const struct pci_device_id pqi_pc + }, + { + PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, ++ 0x1e93, 0x1000) ++ }, ++ { ++ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, ++ 0x1e93, 0x1001) ++ }, ++ { ++ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, ++ 0x1e93, 0x1002) ++ }, ++ { ++ PCI_DEVICE_SUB(PCI_VENDOR_ID_ADAPTEC2, 0x028f, + PCI_ANY_ID, PCI_ANY_ID) + }, + { 0 } diff --git a/patches.suse/scsi-smartpqi-Change-sysfs-raid_level-attribute-to-N.patch b/patches.suse/scsi-smartpqi-Change-sysfs-raid_level-attribute-to-N.patch new file mode 100644 index 0000000..4295597 --- /dev/null +++ b/patches.suse/scsi-smartpqi-Change-sysfs-raid_level-attribute-to-N.patch @@ -0,0 +1,33 @@ +From: Kevin Barnett +Date: Tue, 8 Nov 2022 13:21:53 -0600 +Subject: scsi: smartpqi: Change sysfs raid_level attribute to N/A for + controllers +Patch-mainline: v6.2-rc1 +Git-commit: cbe42ac15698a23b204a9b5c66eb0067b22cbd42 +References: bsc#1207315 + +Change the sysfs raid_level attribute from "RAID-0" to N/A. + +Reviewed-by: Scott Benesh +Reviewed-by: Scott Teel +Reviewed-by: Mike McGowan +Signed-off-by: Kevin Barnett +Signed-off-by: Don Brace +Link: https://lore.kernel.org/r/166793531357.322537.8639138137605612362.stgit@brunhilda +Signed-off-by: Martin K. Petersen +Acked-by: Martin Wilck +--- + drivers/scsi/smartpqi/smartpqi_init.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/scsi/smartpqi/smartpqi_init.c ++++ b/drivers/scsi/smartpqi/smartpqi_init.c +@@ -7255,7 +7255,7 @@ static ssize_t pqi_raid_level_show(struc + return -ENODEV; + } + +- if (pqi_is_logical_device(device)) ++ if (pqi_is_logical_device(device) && device->devtype == TYPE_DISK) + raid_level = pqi_raid_level_to_string(device->raid_level); + else + raid_level = "N/A"; diff --git a/patches.suse/scsi-smartpqi-Change-version-to-2.1.20-035.patch b/patches.suse/scsi-smartpqi-Change-version-to-2.1.20-035.patch new file mode 100644 index 0000000..a9da826 --- /dev/null +++ b/patches.suse/scsi-smartpqi-Change-version-to-2.1.20-035.patch @@ -0,0 +1,36 @@ +From: Don Brace +Date: Tue, 8 Nov 2022 13:22:14 -0600 +Subject: scsi: smartpqi: Change version to 2.1.20-035 +Patch-mainline: v6.2-rc1 +Git-commit: 2ae45329a956ff86ff8bec36463b6f49d2ca9bea +References: bsc#1207315 + +Reviewed-by: Scott Benesh +Reviewed-by: Scott Teel +Reviewed-by: Gerry Morong +Reviewed-by: Kevin Barnett +Signed-off-by: Don Brace +Link: https://lore.kernel.org/r/166793533417.322537.3074216622272955440.stgit@brunhilda +Signed-off-by: Martin K. Petersen +Acked-by: Martin Wilck +--- + drivers/scsi/smartpqi/smartpqi_init.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/drivers/scsi/smartpqi/smartpqi_init.c ++++ b/drivers/scsi/smartpqi/smartpqi_init.c +@@ -33,11 +33,11 @@ + #define BUILD_TIMESTAMP + #endif + +-#define DRIVER_VERSION "2.1.18-045" ++#define DRIVER_VERSION "2.1.20-035" + #define DRIVER_MAJOR 2 + #define DRIVER_MINOR 1 +-#define DRIVER_RELEASE 18 +-#define DRIVER_REVISION 45 ++#define DRIVER_RELEASE 20 ++#define DRIVER_REVISION 35 + + #define DRIVER_NAME "Microchip SmartPQI Driver (v" \ + DRIVER_VERSION BUILD_TIMESTAMP ")" diff --git a/patches.suse/scsi-smartpqi-Convert-to-host_tagset.patch b/patches.suse/scsi-smartpqi-Convert-to-host_tagset.patch new file mode 100644 index 0000000..db0d949 --- /dev/null +++ b/patches.suse/scsi-smartpqi-Convert-to-host_tagset.patch @@ -0,0 +1,192 @@ +From: Don Brace +Date: Tue, 8 Nov 2022 13:21:38 -0600 +Subject: scsi: smartpqi: Convert to host_tagset +Patch-mainline: v6.2-rc1 +Git-commit: b27ac2faa2fc0b2677cf1cbd270af734a1f5fd95 +References: bsc#1207315 + +Add support for host_tagset. + +Also move the reserved command slots to the end of the pool to eliminate an +addition operation for every SCSI request. + +This patch was originally authored by Hannes Reinecke here: + +Link: https://lore.kernel.org/linux-block/20191126131009.71726-8-hare@suse.de/ + +But we NAKed this patch because we wanted to fully test multipath +failover operations. + +Suggested-by: Hannes Reinecke +Reviewed-by: Scott Benesh +Reviewed-by: Scott Teel +Reviewed-by: Mahesh Rajashekhara +Reviewed-by: Mike McGowen +Reviewed-by: Kevin Barnett +Signed-off-by: Don Brace +Link: https://lore.kernel.org/r/166793529811.322537.3294617845448383948.stgit@brunhilda +Signed-off-by: Martin K. Petersen +Acked-by: Martin Wilck +--- + drivers/scsi/smartpqi/smartpqi.h | 3 - + drivers/scsi/smartpqi/smartpqi_init.c | 68 +++++++++++++++++++++------------- + 2 files changed, 43 insertions(+), 28 deletions(-) + +--- a/drivers/scsi/smartpqi/smartpqi.h ++++ b/drivers/scsi/smartpqi/smartpqi.h +@@ -1307,7 +1307,6 @@ struct pqi_ctrl_info { + dma_addr_t error_buffer_dma_handle; + size_t sg_chain_buffer_length; + unsigned int num_queue_groups; +- u16 max_hw_queue_index; + u16 num_elements_per_iq; + u16 num_elements_per_oq; + u16 max_inbound_iu_length_per_firmware; +@@ -1369,8 +1368,6 @@ struct pqi_ctrl_info { + u64 sas_address; + + struct pqi_io_request *io_request_pool; +- u16 next_io_request_slot; +- + struct pqi_event events[PQI_NUM_SUPPORTED_EVENTS]; + struct work_struct event_work; + +--- a/drivers/scsi/smartpqi/smartpqi_init.c ++++ b/drivers/scsi/smartpqi/smartpqi_init.c +@@ -678,23 +678,36 @@ static inline void pqi_reinit_io_request + io_request->raid_bypass = false; + } + +-static struct pqi_io_request *pqi_alloc_io_request( +- struct pqi_ctrl_info *ctrl_info) ++static inline struct pqi_io_request *pqi_alloc_io_request(struct pqi_ctrl_info *ctrl_info, struct scsi_cmnd *scmd) + { + struct pqi_io_request *io_request; +- u16 i = ctrl_info->next_io_request_slot; /* benignly racy */ ++ u16 i; + +- while (1) { ++ if (scmd) { /* SML I/O request */ ++ u32 blk_tag = blk_mq_unique_tag(scsi_cmd_to_rq(scmd)); ++ ++ i = blk_mq_unique_tag_to_tag(blk_tag); + io_request = &ctrl_info->io_request_pool[i]; +- if (atomic_inc_return(&io_request->refcount) == 1) +- break; +- atomic_dec(&io_request->refcount); +- i = (i + 1) % ctrl_info->max_io_slots; ++ if (atomic_inc_return(&io_request->refcount) > 1) { ++ atomic_dec(&io_request->refcount); ++ return NULL; ++ } ++ } else { /* IOCTL or driver internal request */ ++ /* ++ * benignly racy - may have to wait for an open slot. ++ * command slot range is scsi_ml_can_queue - ++ * [scsi_ml_can_queue + (PQI_RESERVED_IO_SLOTS - 1)] ++ */ ++ i = 0; ++ while (1) { ++ io_request = &ctrl_info->io_request_pool[ctrl_info->scsi_ml_can_queue + i]; ++ if (atomic_inc_return(&io_request->refcount) == 1) ++ break; ++ atomic_dec(&io_request->refcount); ++ i = (i + 1) % PQI_RESERVED_IO_SLOTS; ++ } + } + +- /* benignly racy */ +- ctrl_info->next_io_request_slot = (i + 1) % ctrl_info->max_io_slots; +- + pqi_reinit_io_request(io_request); + + return io_request; +@@ -4586,7 +4599,7 @@ static int pqi_submit_raid_request_synch + goto out; + } + +- io_request = pqi_alloc_io_request(ctrl_info); ++ io_request = pqi_alloc_io_request(ctrl_info, NULL); + + put_unaligned_le16(io_request->index, + &(((struct pqi_raid_path_request *)request)->request_id)); +@@ -5233,7 +5246,6 @@ static void pqi_calculate_queue_resource + } + + ctrl_info->num_queue_groups = num_queue_groups; +- ctrl_info->max_hw_queue_index = num_queue_groups - 1; + + /* + * Make sure that the max. inbound IU length is an even multiple +@@ -5567,7 +5579,9 @@ static inline int pqi_raid_submit_scsi_c + { + struct pqi_io_request *io_request; + +- io_request = pqi_alloc_io_request(ctrl_info); ++ io_request = pqi_alloc_io_request(ctrl_info, scmd); ++ if (!io_request) ++ return SCSI_MLQUEUE_HOST_BUSY; + + return pqi_raid_submit_scsi_cmd_with_io_request(ctrl_info, io_request, + device, scmd, queue_group); +@@ -5671,7 +5685,9 @@ static int pqi_aio_submit_io(struct pqi_ + struct pqi_scsi_dev *device; + + device = scmd->device->hostdata; +- io_request = pqi_alloc_io_request(ctrl_info); ++ io_request = pqi_alloc_io_request(ctrl_info, scmd); ++ if (!io_request) ++ return SCSI_MLQUEUE_HOST_BUSY; + io_request->io_complete_callback = pqi_aio_io_complete; + io_request->scmd = scmd; + io_request->raid_bypass = raid_bypass; +@@ -5743,7 +5759,10 @@ static int pqi_aio_submit_r1_write_io(s + struct pqi_io_request *io_request; + struct pqi_aio_r1_path_request *r1_request; + +- io_request = pqi_alloc_io_request(ctrl_info); ++ io_request = pqi_alloc_io_request(ctrl_info, scmd); ++ if (!io_request) ++ return SCSI_MLQUEUE_HOST_BUSY; ++ + io_request->io_complete_callback = pqi_aio_io_complete; + io_request->scmd = scmd; + io_request->raid_bypass = true; +@@ -5801,7 +5820,9 @@ static int pqi_aio_submit_r56_write_io(s + struct pqi_io_request *io_request; + struct pqi_aio_r56_path_request *r56_request; + +- io_request = pqi_alloc_io_request(ctrl_info); ++ io_request = pqi_alloc_io_request(ctrl_info, scmd); ++ if (!io_request) ++ return SCSI_MLQUEUE_HOST_BUSY; + io_request->io_complete_callback = pqi_aio_io_complete; + io_request->scmd = scmd; + io_request->raid_bypass = true; +@@ -5860,13 +5881,10 @@ static int pqi_aio_submit_r56_write_io(s + static inline u16 pqi_get_hw_queue(struct pqi_ctrl_info *ctrl_info, + struct scsi_cmnd *scmd) + { +- u16 hw_queue; +- +- hw_queue = blk_mq_unique_tag_to_hwq(blk_mq_unique_tag(scsi_cmd_to_rq(scmd))); +- if (hw_queue > ctrl_info->max_hw_queue_index) +- hw_queue = 0; +- +- return hw_queue; ++ /* ++ * We are setting host_tagset = 1 during init. ++ */ ++ return blk_mq_unique_tag_to_hwq(blk_mq_unique_tag(scsi_cmd_to_rq(scmd))); + } + + static inline bool pqi_is_bypass_eligible_request(struct scsi_cmnd *scmd) +@@ -6268,7 +6286,7 @@ static int pqi_lun_reset(struct pqi_ctrl + struct pqi_scsi_dev *device; + + device = scmd->device->hostdata; +- io_request = pqi_alloc_io_request(ctrl_info); ++ io_request = pqi_alloc_io_request(ctrl_info, NULL); + io_request->io_complete_callback = pqi_lun_reset_complete; + io_request->context = &wait; + diff --git a/patches.suse/scsi-smartpqi-Correct-device-removal-for-multi-actua.patch b/patches.suse/scsi-smartpqi-Correct-device-removal-for-multi-actua.patch new file mode 100644 index 0000000..b41afcb --- /dev/null +++ b/patches.suse/scsi-smartpqi-Correct-device-removal-for-multi-actua.patch @@ -0,0 +1,119 @@ +From: Kumar Meiyappan +Date: Tue, 8 Nov 2022 13:21:58 -0600 +Subject: scsi: smartpqi: Correct device removal for multi-actuator devices +Patch-mainline: v6.2-rc1 +Git-commit: cc9befcbbb5ebce77726f938508700d913530035 +References: bsc#1207315 + +Correct device count for multi-actuator drives which can cause kernel +panics. + +Reviewed-by: Scott Benesh +Reviewed-by: Scott Teel +Reviewed-by: Mike Mcgowan +Reviewed-by: Kevin Barnett +Signed-off-by: Kumar Meiyappan +Signed-off-by: Don Brace +Link: https://lore.kernel.org/r/166793531872.322537.9003385780343419275.stgit@brunhilda +Signed-off-by: Martin K. Petersen +Acked-by: Martin Wilck +--- + drivers/scsi/smartpqi/smartpqi.h | 2 +- + drivers/scsi/smartpqi/smartpqi_init.c | 33 ++++++++++++++++++++++++--------- + 2 files changed, 25 insertions(+), 10 deletions(-) + +--- a/drivers/scsi/smartpqi/smartpqi.h ++++ b/drivers/scsi/smartpqi/smartpqi.h +@@ -1130,7 +1130,7 @@ struct pqi_scsi_dev { + u8 phy_id; + u8 ncq_prio_enable; + u8 ncq_prio_support; +- u8 multi_lun_device_lun_count; ++ u8 lun_count; + bool raid_bypass_configured; /* RAID bypass configured */ + bool raid_bypass_enabled; /* RAID bypass enabled */ + u32 next_bypass_group[RAID_MAP_MAX_DATA_DISKS_PER_ROW]; +--- a/drivers/scsi/smartpqi/smartpqi_init.c ++++ b/drivers/scsi/smartpqi/smartpqi_init.c +@@ -1623,9 +1623,7 @@ static int pqi_get_physical_device_info( + &id_phys->alternate_paths_phys_connector, + sizeof(device->phys_connector)); + device->bay = id_phys->phys_bay_in_box; +- device->multi_lun_device_lun_count = id_phys->multi_lun_device_lun_count; +- if (!device->multi_lun_device_lun_count) +- device->multi_lun_device_lun_count = 1; ++ device->lun_count = id_phys->multi_lun_device_lun_count; + if ((id_phys->even_more_flags & PQI_DEVICE_PHY_MAP_SUPPORTED) && + id_phys->phy_count) + device->phy_id = +@@ -1759,7 +1757,7 @@ out: + return offline; + } + +-static int pqi_get_device_info(struct pqi_ctrl_info *ctrl_info, ++static int pqi_get_device_info_phys_logical(struct pqi_ctrl_info *ctrl_info, + struct pqi_scsi_dev *device, + struct bmic_identify_physical_device *id_phys) + { +@@ -1776,6 +1774,20 @@ static int pqi_get_device_info(struct pq + return rc; + } + ++static int pqi_get_device_info(struct pqi_ctrl_info *ctrl_info, ++ struct pqi_scsi_dev *device, ++ struct bmic_identify_physical_device *id_phys) ++{ ++ int rc; ++ ++ rc = pqi_get_device_info_phys_logical(ctrl_info, device, id_phys); ++ ++ if (rc == 0 && device->lun_count == 0) ++ device->lun_count = 1; ++ ++ return rc; ++} ++ + static void pqi_show_volume_status(struct pqi_ctrl_info *ctrl_info, + struct pqi_scsi_dev *device) + { +@@ -1910,7 +1922,7 @@ static inline void pqi_remove_device(str + int rc; + int lun; + +- for (lun = 0; lun < device->multi_lun_device_lun_count; lun++) { ++ for (lun = 0; lun < device->lun_count; lun++) { + rc = pqi_device_wait_for_pending_io(ctrl_info, device, lun, + PQI_REMOVE_DEVICE_PENDING_IO_TIMEOUT_MSECS); + if (rc) +@@ -2089,6 +2101,7 @@ static void pqi_scsi_update_device(struc + existing_device->sas_address = new_device->sas_address; + existing_device->queue_depth = new_device->queue_depth; + existing_device->device_offline = false; ++ existing_device->lun_count = new_device->lun_count; + + if (pqi_is_logical_device(existing_device)) { + existing_device->is_external_raid_device = new_device->is_external_raid_device; +@@ -2121,10 +2134,6 @@ static void pqi_scsi_update_device(struc + existing_device->phy_connected_dev_type = new_device->phy_connected_dev_type; + memcpy(existing_device->box, new_device->box, sizeof(existing_device->box)); + memcpy(existing_device->phys_connector, new_device->phys_connector, sizeof(existing_device->phys_connector)); +- +- existing_device->multi_lun_device_lun_count = new_device->multi_lun_device_lun_count; +- if (existing_device->multi_lun_device_lun_count == 0) +- existing_device->multi_lun_device_lun_count = 1; + } + } + +@@ -6501,6 +6510,12 @@ static void pqi_slave_destroy(struct scs + mutex_unlock(&ctrl_info->scan_mutex); + return; + } ++ ++ device->lun_count--; ++ if (device->lun_count > 0) { ++ mutex_unlock(&ctrl_info->scan_mutex); ++ return; ++ } + + spin_lock_irqsave(&ctrl_info->scsi_device_list_lock, flags); + list_del(&device->scsi_device_list_entry); diff --git a/patches.suse/scsi-smartpqi-Correct-max-LUN-number.patch b/patches.suse/scsi-smartpqi-Correct-max-LUN-number.patch new file mode 100644 index 0000000..e9bb0a8 --- /dev/null +++ b/patches.suse/scsi-smartpqi-Correct-max-LUN-number.patch @@ -0,0 +1,34 @@ +From: Kevin Barnett +Date: Tue, 8 Nov 2022 13:21:48 -0600 +Subject: scsi: smartpqi: Correct max LUN number +Patch-mainline: v6.2-rc1 +Git-commit: 7c56850637ea820a89ce2f52fca66c5ae12d0f0a +References: bsc#1207315 + +Correct maximum LUN number for multi-actuator devices. + +When multi-actuator support was added to smartpqi, the maximum number of +LUNs supported for multi-actuator devices was supposed to be changed from +unlimited to 256, but the setting was inadvertently left at unlimited. + +Reviewed-by: Scott Benesh +Reviewed-by: Scott Teel +Signed-off-by: Kevin Barnett +Signed-off-by: Don Brace +Link: https://lore.kernel.org/r/166793530842.322537.816949081443241857.stgit@brunhilda +Signed-off-by: Martin K. Petersen +Acked-by: Martin Wilck +--- + drivers/scsi/smartpqi/smartpqi_init.c | 1 - + 1 file changed, 1 deletion(-) + +--- a/drivers/scsi/smartpqi/smartpqi_init.c ++++ b/drivers/scsi/smartpqi/smartpqi_init.c +@@ -7423,7 +7423,6 @@ static int pqi_register_scsi(struct pqi_ + shost->max_channel = PQI_MAX_BUS; + shost->max_cmd_len = MAX_COMMAND_SIZE; + shost->max_lun = PQI_MAX_LUNS_PER_DEVICE; +- shost->max_lun = ~0; + shost->max_id = ~0; + shost->max_sectors = ctrl_info->max_sectors; + shost->can_queue = ctrl_info->scsi_ml_can_queue; diff --git a/patches.suse/scsi-smartpqi-Initialize-feature-section-info.patch b/patches.suse/scsi-smartpqi-Initialize-feature-section-info.patch new file mode 100644 index 0000000..9df4863 --- /dev/null +++ b/patches.suse/scsi-smartpqi-Initialize-feature-section-info.patch @@ -0,0 +1,31 @@ +From: Don Brace +Date: Tue, 8 Nov 2022 13:22:09 -0600 +Subject: scsi: smartpqi: Initialize feature section info +Patch-mainline: v6.2-rc1 +Git-commit: 921800a1deeaa832e4303e9335a31b4234c41ac1 +References: bsc#1207315 + +Initialize features to 0 before processing. + +Reviewed-by: Scott Benesh +Reviewed-by: Mike Mcgowan +Reviewed-by: Kevin Barnett +Signed-off-by: Don Brace +Link: https://lore.kernel.org/r/166793532902.322537.2436075977808555348.stgit@brunhilda +Signed-off-by: Martin K. Petersen +Acked-by: Martin Wilck +--- + drivers/scsi/smartpqi/smartpqi_init.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/scsi/smartpqi/smartpqi_init.c ++++ b/drivers/scsi/smartpqi/smartpqi_init.c +@@ -8004,7 +8004,7 @@ static int pqi_process_config_table(stru + struct pqi_config_table *config_table; + struct pqi_config_table_section_header *section; + struct pqi_config_table_section_info section_info; +- struct pqi_config_table_section_info feature_section_info; ++ struct pqi_config_table_section_info feature_section_info = {0}; + + table_length = ctrl_info->config_table_length; + if (table_length == 0) diff --git a/patches.suse/scsi-smartpqi-Replace-one-element-array-with-flexibl-ead82126.patch b/patches.suse/scsi-smartpqi-Replace-one-element-array-with-flexibl-ead82126.patch new file mode 100644 index 0000000..bc381d7 --- /dev/null +++ b/patches.suse/scsi-smartpqi-Replace-one-element-array-with-flexibl-ead82126.patch @@ -0,0 +1,50 @@ +From: "Gustavo A. R. Silva" +Date: Tue, 7 Feb 2023 15:59:43 -0600 +Subject: scsi: smartpqi: Replace one-element array with flexible-array member +Patch-mainline: v6.3-rc1 +Git-commit: ead821268c14a8f87b5cb1079aed10bb16373fe8 +References: bsc#1207315 + +One-element arrays are deprecated, and we are replacing them with flexible +array members instead. So, replace one-element array with flexible-array +member in struct report_log_lun_list. + +This helps with the ongoing efforts to tighten the FORTIFY_SOURCE routines +on memcpy(). + +Link: https://lore.kernel.org/r/Y+LJz/r6+UeLqnV3@work +Link: https://github.com/KSPP/linux/issues/79 +Link: https://github.com/KSPP/linux/issues/204 +Signed-off-by: Gustavo A. R. Silva +Acked-by: Don Brace +Reviewed-by: Kees Cook +Signed-off-by: Martin K. Petersen +Acked-by: Martin Wilck +--- + drivers/scsi/smartpqi/smartpqi.h | 2 +- + drivers/scsi/smartpqi/smartpqi_init.c | 3 ++- + 2 files changed, 3 insertions(+), 2 deletions(-) + +--- a/drivers/scsi/smartpqi/smartpqi.h ++++ b/drivers/scsi/smartpqi/smartpqi.h +@@ -954,7 +954,7 @@ struct report_log_lun { + + struct report_log_lun_list { + struct report_lun_header header; +- struct report_log_lun lun_entries[1]; ++ struct report_log_lun lun_entries[]; + }; + + struct report_phys_lun_8byte_wwid { +--- a/drivers/scsi/smartpqi/smartpqi_init.c ++++ b/drivers/scsi/smartpqi/smartpqi_init.c +@@ -1259,7 +1259,8 @@ static int pqi_get_device_lists(struct p + "report logical LUNs failed\n"); + + /* +- * Tack the controller itself onto the end of the logical device list. ++ * Tack the controller itself onto the end of the logical device list ++ * by adding a list entry that is all zeros. + */ + + logdev_data = *logdev_list; diff --git a/series.conf b/series.conf index e5809f8..dacbae1 100644 --- a/series.conf +++ b/series.conf @@ -11295,6 +11295,7 @@ patches.suse/ataflop-address-add_disk-error-handling-on-probe.patch patches.suse/floppy-address-add_disk-error-handling-on-probe.patch patches.suse/ataflop-Add-missing-semicolon-to-return-statement.patch + patches.suse/bcache-Revert-bcache-use-bvec_virt-2878.patch patches.suse/rpmsg-Fix-rpmsg_create_ept-return-when-RPMSG-config-.patch patches.suse/remoteproc-elf_loader-Fix-loading-segment-when-is_io.patch patches.suse/remoteproc-Fix-the-wrong-default-value-of-is_iomem.patch @@ -23396,6 +23397,8 @@ patches.suse/ext4-force-overhead-calculation-if-the-s_overhead_cl.patch patches.suse/io_uring-free-iovec-if-file-assignment-fails.patch patches.suse/io_uring-fix-leaks-on-IOPOLL-and-CQE_SKIP.patch + patches.suse/bcache-put-bch_bio_map-back-to-correct-location-in-journal_write_unlocked-ff26.patch + patches.suse/bcache-fix-wrong-bdev-parameter-when-calling-bio_alloc_clone-in-do_bio_hook-9dca.patch patches.suse/Input-omap4-keypad-fix-pm_runtime_get_sync-error-che.patch patches.suse/1576-drm-radeon-fix-logic-inversion-in-radeon_sync_resv.patch patches.suse/drm-panel-raspberrypi-touchscreen-Avoid-NULL-deref-i.patch @@ -33012,6 +33015,7 @@ patches.suse/scsi-megaraid_sas-Remove-unnecessary-kfree.patch patches.suse/msft-hv-2639-scsi-storvsc-Remove-WQ_MEM_RECLAIM-from-storvsc_erro.patch patches.suse/scsi-core-Fix-passthrough-retry-counter-handling.patch + patches.suse/scsi-sd-Revert-Rework-asynchronous-resume-support.patch patches.suse/0009-blk-mq-fix-io-hung-due-to-missing-commit_rqs.patch patches.suse/loop-Check-for-overflow-while-configuring-loop.patch patches.suse/0249-md-Flush-workqueue-md_rdev_misc_wq-in-md_alloc.patch @@ -36431,6 +36435,14 @@ patches.suse/scsi-qla2xxx-Fix-set-but-not-used-variable-warnings.patch patches.suse/scsi-qla2xxx-Remove-unused-variable-found_devs.patch patches.suse/scsi-lpfc-Remove-redundant-pointer-lp.patch + patches.suse/scsi-smartpqi-Convert-to-host_tagset.patch + patches.suse/scsi-smartpqi-Add-new-controller-PCI-IDs.patch + patches.suse/scsi-smartpqi-Correct-max-LUN-number.patch + patches.suse/scsi-smartpqi-Change-sysfs-raid_level-attribute-to-N.patch + patches.suse/scsi-smartpqi-Correct-device-removal-for-multi-actua.patch + patches.suse/scsi-smartpqi-Add-controller-cache-flush-during-rmmo.patch + patches.suse/scsi-smartpqi-Initialize-feature-section-info.patch + patches.suse/scsi-smartpqi-Change-version-to-2.1.20-035.patch patches.suse/scsi-scsi_debug-Fix-a-warning-in-resp_write_scat.patch patches.suse/scsi-lpfc-Use-memset_startat-helper.patch patches.suse/scsi-lpfc-Fix-WQ-CQ-EQ-resource-check.patch @@ -36702,6 +36714,7 @@ patches.suse/ACPI-resource-do-IRQ-override-on-Lenovo-14ALC7.patch patches.suse/ACPI-resource-Add-Asus-ExpertBook-B2502-to-Asus-quir.patch patches.suse/ata-ahci-Fix-PCS-quirk-application-for-suspend.patch + patches.suse/arm64-Discard-.note.GNU-stack-section.patch patches.suse/drm-i915-improve-the-catch-all-evict-to-handle-lock-.patch patches.suse/btrfs-fix-resolving-backrefs-for-inline-extent-follo.patch patches.suse/x86-kexec-Fix-double-free-of-elf-header-buffer.patch @@ -36796,6 +36809,7 @@ patches.suse/cifs-fix-potential-memory-leaks-in-session-setup.patch patches.suse/cifs-Fix-uninitialized-memory-read-for-smb311-posix-symlink-create.patch patches.suse/tomoyo-fix-broken-dependency-on-.conf.default.patch + patches.suse/NFSD-fix-use-after-free-in-nfsd4_ssc_setup_dul.patch patches.suse/HID-intel_ish-hid-Add-check-for-ishtp_dma_tx_map.patch patches.suse/HID-check-empty-report_list-in-hid_validate_values.patch patches.suse/HID-check-empty-report_list-in-bigben_probe.patch @@ -36875,6 +36889,7 @@ patches.suse/serial-atmel-fix-incorrect-baudrate-setup.patch patches.suse/staging-vchiq_arm-fix-enum-vchiq_status-return-types.patch patches.suse/driver-core-Fix-test_async_probe_init-saves-device-i.patch + patches.suse/prlimit-do_prlimit-needs-to-have-a-speculation-check.patch patches.suse/comedi-adv_pci1760-Fix-PWM-instruction-handling.patch patches.suse/w1-fix-deadloop-in-__w1_remove_master_device.patch patches.suse/w1-fix-WARNING-after-calling-w1_process.patch @@ -36898,9 +36913,12 @@ patches.suse/ipmi_ssif-Rename-idle-state-and-check.patch patches.suse/ipmi-ssif-Remove-rtc_us_timer.patch patches.suse/ipmi-ssif-Add-a-timer-between-request-retries.patch + patches.suse/scsi-smartpqi-Replace-one-element-array-with-flexibl-ead82126.patch patches.suse/mm-memcontrol-deprecate-charge-moving.patch patches.suse/ibmvnic-Assign-XPS-map-to-correct-queue-index.patch + patches.suse/0001-net-tls-fix-possible-race-condition-between-do_tls_g.patch patches.suse/bnxt_en-Avoid-order-5-memory-allocation-for-TPA-data.patch + patches.suse/s390-uaccess-add-missing-earlyclobber-annotations-to-__clear_user.patch ######################################################## # end of sorted patches @@ -37275,6 +37293,8 @@ # bsc#1189297 patches.suse/scsi_probe_lun-retry-after-timeout.patch + patches.suse/sbitmap-avoid-lockups-when-waker-gets-preempted.patch + ######################################################## # Networking drivers (wired) ######################################################## @@ -37291,6 +37311,7 @@ patches.suse/0002-regulator-mt6358-Add-OF-match-table.patch patches.suse/0003-regulator-mt6323-Add-OF-match-table.patch patches.suse/rtl8188eu-fix-const-dev_addr_fallout.patch + patches.suse/ath11k-pci-Add-more-MODULE_FIRMWARE-entries.patch ######################################################## # USB @@ -37404,6 +37425,7 @@ ######################################################## patches.rpmify/BTF-Don-t-break-ABI-when-debuginfo-is-disabled.patch patches.kabi/fb_deferred_io-kABI-workaround.patch + patches.kabi/scsi_disk-kABI-add-back-members.patch ######################################################## # SLE15-SP3 OOT performance patches evaluated but left @@ -37721,4 +37743,3 @@ # You'd better have a good reason for adding a patch # below here. ######################################################## - patches.suse/arm64-Discard-.note.GNU-stack-section.patch diff --git a/supported.conf b/supported.conf index ed4b12a..bba2558 100644 --- a/supported.conf +++ b/supported.conf @@ -5416,8 +5416,8 @@ -!optional net/phonet/pn_pep net/psample/psample # netlink packet sampling interface -!optional net/qrtr/ns --!optional net/qrtr/qrtr --!optional net/qrtr/qrtr-mhi +- net/qrtr/qrtr +- net/qrtr/qrtr-mhi -!optional net/qrtr/qrtr-smd -!optional net/qrtr/qrtr-tun net/rds/rds # Reliable Datagram Sockets (RDS) protocol