mirror of
https://github.com/torvalds/linux.git
synced 2026-01-24 23:16:46 +00:00
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: d4c53ae8e4 ("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>
This commit is contained in:
committed by
Heiko Carstens
parent
d045e166d3
commit
3317785a88
@@ -43,7 +43,7 @@ static ssize_t depth_show(struct device *dev, struct device_attribute *attr,
|
|||||||
{
|
{
|
||||||
struct ap_card *ac = to_ap_card(dev);
|
struct ap_card *ac = to_ap_card(dev);
|
||||||
|
|
||||||
return sysfs_emit(buf, "%d\n", ac->hwinfo.qd);
|
return sysfs_emit(buf, "%d\n", ac->hwinfo.qd + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static DEVICE_ATTR_RO(depth);
|
static DEVICE_ATTR_RO(depth);
|
||||||
|
|||||||
@@ -285,7 +285,7 @@ static enum ap_sm_wait ap_sm_write(struct ap_queue *aq)
|
|||||||
list_move_tail(&ap_msg->list, &aq->pendingq);
|
list_move_tail(&ap_msg->list, &aq->pendingq);
|
||||||
aq->requestq_count--;
|
aq->requestq_count--;
|
||||||
aq->pendingq_count++;
|
aq->pendingq_count++;
|
||||||
if (aq->queue_count < aq->card->hwinfo.qd) {
|
if (aq->queue_count < aq->card->hwinfo.qd + 1) {
|
||||||
aq->sm_state = AP_SM_STATE_WORKING;
|
aq->sm_state = AP_SM_STATE_WORKING;
|
||||||
return AP_SM_WAIT_AGAIN;
|
return AP_SM_WAIT_AGAIN;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user