summaryrefslogtreecommitdiffstats
path: root/hw/bt.c
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2015-09-10 10:08:56 +1000
committerStewart Smith <stewart@linux.vnet.ibm.com>2015-09-11 16:32:37 +1000
commitb5f05ac337b3495cf506f5492fd053e90ae0bda3 (patch)
tree13430c290a130c3f777736abec56173f987416b2 /hw/bt.c
parentebf9084d8a4d2f70e4e7d2c6a35cac2c7f6e2681 (diff)
downloadtalos-skiboot-b5f05ac337b3495cf506f5492fd053e90ae0bda3.tar.gz
talos-skiboot-b5f05ac337b3495cf506f5492fd053e90ae0bda3.zip
timer: Pass current timer to timer callbacks
The caller usually has it and it avoids additional mftb() which can be expensive. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> [stewart@linux.vnet.ibm.com: fix run-timer unit test] Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'hw/bt.c')
-rw-r--r--hw/bt.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/hw/bt.c b/hw/bt.c
index 23fc68c5..41fe24ea 100644
--- a/hw/bt.c
+++ b/hw/bt.c
@@ -293,12 +293,10 @@ static void bt_get_resp(void)
return;
}
-static void bt_expire_old_msg(void)
+static void bt_expire_old_msg(uint64_t tb)
{
- unsigned long tb;
struct bt_msg *bt_msg;
- tb = mftb();
bt_msg = list_top(&bt.msgq, struct bt_msg, link);
if (bt_msg && bt_msg->tb > 0 && (bt_msg->tb + BT_MSG_TIMEOUT) < tb) {
@@ -309,7 +307,7 @@ static void bt_expire_old_msg(void)
FIFO so just reset the flag.*/
BT_ERR(bt_msg, "Retry sending message");
bt_msg->retry_count++;
- bt_msg->tb = mftb();
+ bt_msg->tb = tb;
bt_outb(BT_CTRL_H2B_ATN, BT_CTRL);
} else {
BT_ERR(bt_msg, "Timeout sending message");
@@ -356,7 +354,8 @@ static void bt_send_and_unlock(void)
return;
}
-static void bt_poll(struct timer *t __unused, void *data __unused)
+static void bt_poll(struct timer *t __unused, void *data __unused,
+ uint64_t now)
{
uint8_t bt_ctrl;
@@ -369,7 +368,7 @@ static void bt_poll(struct timer *t __unused, void *data __unused)
lock(&bt.lock);
print_debug_queue_info();
- bt_expire_old_msg();
+ bt_expire_old_msg(now);
bt_ctrl = bt_inb(BT_CTRL);
@@ -447,7 +446,7 @@ static void bt_irq(uint32_t chip_id __unused, uint32_t irq_mask __unused)
bt.irq_ok = true;
if (ireg & BT_INTMASK_B2H_IRQ) {
bt_outb(BT_INTMASK_B2H_IRQ | BT_INTMASK_B2H_IRQEN, BT_INTMASK);
- bt_poll(NULL, NULL);
+ bt_poll(NULL, NULL, mftb());
}
}
OpenPOWER on IntegriCloud