[ Sasha's backport helper bot ]
Hi,
Summary of potential issues: ⚠️ Found matching upstream commit but patch is missing proper reference to it
Found matching upstream commit: 2ccd42b959aaf490333dbd3b9b102eaf295c036a
Status in newer kernel trees: 6.14.y | Present (different SHA1: fc90e2379125) 6.12.y | Present (different SHA1: f268ee2fbb53) 6.6.y | Present (different SHA1: 3867566eb8a4) 6.1.y | Present (different SHA1: 355715264917) 5.15.y | Not found 5.10.y | Not found
Note: The patch differs from the upstream commit: --- 1: 2ccd42b959aaf ! 1: 8e0e5446dde75 s390/virtio_ccw: Don't allocate/assign airqs for non-existing queues @@ Commit message Acked-by: Christian Borntraeger borntraeger@linux.ibm.com Link: https://lore.kernel.org/r/20250402203621.940090-1-david@redhat.com Signed-off-by: Heiko Carstens hca@linux.ibm.com + (cherry picked from commit 2ccd42b959aaf490333dbd3b9b102eaf295c036a) + Signed-off-by: David Hildenbrand david@redhat.com
## drivers/s390/virtio/virtio_ccw.c ## @@ drivers/s390/virtio/virtio_ccw.c: static struct airq_info *new_airq_info(int index) - static unsigned long *get_airq_indicator(struct virtqueue *vqs[], int nvqs, - u64 *first, void **airq_info) + static unsigned long get_airq_indicator(struct virtqueue *vqs[], int nvqs, + u64 *first, void **airq_info) { - int i, j; + int i, j, queue_idx, highest_queue_idx = -1; struct airq_info *info; - unsigned long *indicator_addr = NULL; + unsigned long indicator_addr = 0; unsigned long bit, flags;
+ /* Array entries without an actual queue pointer must be ignored. */ @@ drivers/s390/virtio/virtio_ccw.c: static struct airq_info *new_airq_info(int ind for (i = 0; i < MAX_AIRQ_AREAS && !indicator_addr; i++) { mutex_lock(&airq_areas_lock); if (!airq_areas[i]) -@@ drivers/s390/virtio/virtio_ccw.c: static unsigned long *get_airq_indicator(struct virtqueue *vqs[], int nvqs, +@@ drivers/s390/virtio/virtio_ccw.c: static unsigned long get_airq_indicator(struct virtqueue *vqs[], int nvqs, if (!info) - return NULL; + return 0; write_lock_irqsave(&info->lock, flags); - bit = airq_iv_alloc(info->aiv, nvqs); + bit = airq_iv_alloc(info->aiv, highest_queue_idx + 1); if (bit == -1UL) { /* Not enough vacancies. */ write_unlock_irqrestore(&info->lock, flags); -@@ drivers/s390/virtio/virtio_ccw.c: static unsigned long *get_airq_indicator(struct virtqueue *vqs[], int nvqs, +@@ drivers/s390/virtio/virtio_ccw.c: static unsigned long get_airq_indicator(struct virtqueue *vqs[], int nvqs, *first = bit; *airq_info = info; - indicator_addr = info->aiv->vector; + indicator_addr = (unsigned long)info->aiv->vector; - for (j = 0; j < nvqs; j++) { - airq_iv_set_ptr(info->aiv, bit + j, + for (j = 0, queue_idx = 0; j < nvqs; j++) { ---
Results of testing on various branches:
| Branch | Patch Apply | Build Test | |---------------------------|-------------|------------| | stable/linux-5.4.y | Success | Success |