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

Configure Feed

Select the types of activity you want to include in your feed.

s390/ap: Fix wrong APQN fill calculation

The upper limit of the firmware queue fill state for each APQN
is reported by the hwinfo.qd field. This field shows the
numbers 0-7 for 1-8 queue spaces available. But the exploiting
code assumed the real boundary is stored there and thus stoppes
queuing in messages one tick too early.

Correct the limit calculation and thus offer a boost
of 12.5% performance for high traffic on one APQN.

Fixes: d4c53ae8e4948 ("s390/ap: store TAPQ hwinfo in struct ap_card")
Cc: stable@vger.kernel.org
Reported-by: Ingo Franzki <ifranzki@linux.ibm.com>
Reviewed-by: Ingo Franzki <ifranzki@linux.ibm.com>
Signed-off-by: Harald Freudenberger <freude@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>

authored by

Harald Freudenberger and committed by
Heiko Carstens
3317785a d045e166

+2 -2
+1 -1
drivers/s390/crypto/ap_card.c
··· 43 43 { 44 44 struct ap_card *ac = to_ap_card(dev); 45 45 46 - return sysfs_emit(buf, "%d\n", ac->hwinfo.qd); 46 + return sysfs_emit(buf, "%d\n", ac->hwinfo.qd + 1); 47 47 } 48 48 49 49 static DEVICE_ATTR_RO(depth);
+1 -1
drivers/s390/crypto/ap_queue.c
··· 285 285 list_move_tail(&ap_msg->list, &aq->pendingq); 286 286 aq->requestq_count--; 287 287 aq->pendingq_count++; 288 - if (aq->queue_count < aq->card->hwinfo.qd) { 288 + if (aq->queue_count < aq->card->hwinfo.qd + 1) { 289 289 aq->sm_state = AP_SM_STATE_WORKING; 290 290 return AP_SM_WAIT_AGAIN; 291 291 }