From: "Bryan O'Sullivan" <bos@pathscale.com>
To: rdreier@cisco.com
Cc: openib-general@openib.org, linux-kernel@vger.kernel.org
Subject: [PATCH 10 of 13] ipath - simplify IB timer usage
Date: Mon, 24 Apr 2006 14:23:06 -0700 [thread overview]
Message-ID: <36447eb1f256c4c1d7bd.1145913786@eng-12.pathscale.com> (raw)
In-Reply-To: <patchbomb.1145913776@eng-12.pathscale.com>
Signed-off-by: Bryan O'Sullivan <bos@pathscale.com>
diff -r 4eabd5fc05bb -r 36447eb1f256 drivers/infiniband/hw/ipath/ipath_verbs.c
--- a/drivers/infiniband/hw/ipath/ipath_verbs.c Mon Apr 24 14:21:04 2006 -0700
+++ b/drivers/infiniband/hw/ipath/ipath_verbs.c Mon Apr 24 14:21:04 2006 -0700
@@ -449,7 +449,6 @@ static void ipath_ib_timer(void *arg)
{
struct ipath_ibdev *dev = (struct ipath_ibdev *) arg;
struct ipath_qp *resend = NULL;
- struct ipath_qp *rnr = NULL;
struct list_head *last;
struct ipath_qp *qp;
unsigned long flags;
@@ -465,32 +464,18 @@ static void ipath_ib_timer(void *arg)
last = &dev->pending[dev->pending_index];
while (!list_empty(last)) {
qp = list_entry(last->next, struct ipath_qp, timerwait);
- if (last->next == LIST_POISON1 ||
- last->next != &qp->timerwait ||
- qp->timerwait.prev != last) {
- INIT_LIST_HEAD(last);
- } else {
- list_del(&qp->timerwait);
- qp->timerwait.prev = (struct list_head *) resend;
- resend = qp;
- atomic_inc(&qp->refcount);
- }
+ list_del(&qp->timerwait);
+ qp->timer_next = resend;
+ resend = qp;
+ atomic_inc(&qp->refcount);
}
last = &dev->rnrwait;
if (!list_empty(last)) {
qp = list_entry(last->next, struct ipath_qp, timerwait);
if (--qp->s_rnr_timeout == 0) {
do {
- if (last->next == LIST_POISON1 ||
- last->next != &qp->timerwait ||
- qp->timerwait.prev != last) {
- INIT_LIST_HEAD(last);
- break;
- }
list_del(&qp->timerwait);
- qp->timerwait.prev =
- (struct list_head *) rnr;
- rnr = qp;
+ tasklet_hi_schedule(&qp->s_task);
if (list_empty(last))
break;
qp = list_entry(last->next, struct ipath_qp,
@@ -530,8 +515,7 @@ static void ipath_ib_timer(void *arg)
spin_unlock_irqrestore(&dev->pending_lock, flags);
/* XXX What if timer fires again while this is running? */
- for (qp = resend; qp != NULL;
- qp = (struct ipath_qp *) qp->timerwait.prev) {
+ for (qp = resend; qp != NULL; qp = qp->timer_next) {
struct ib_wc wc;
spin_lock_irqsave(&qp->s_lock, flags);
@@ -545,9 +529,6 @@ static void ipath_ib_timer(void *arg)
if (atomic_dec_and_test(&qp->refcount))
wake_up(&qp->wait);
}
- for (qp = rnr; qp != NULL;
- qp = (struct ipath_qp *) qp->timerwait.prev)
- tasklet_hi_schedule(&qp->s_task);
}
/**
@@ -556,9 +537,9 @@ static void ipath_ib_timer(void *arg)
*
* This is called from ipath_intr() at interrupt level when a PIO buffer is
* available after ipath_verbs_send() returned an error that no buffers were
- * available. Return 0 if we consumed all the PIO buffers and we still have
+ * available. Return 1 if we consumed all the PIO buffers and we still have
* QPs waiting for buffers (for now, just do a tasklet_hi_schedule and
- * return one).
+ * return zero).
*/
static int ipath_ib_piobufavail(void *arg)
{
@@ -579,7 +560,7 @@ static int ipath_ib_piobufavail(void *ar
spin_unlock_irqrestore(&dev->pending_lock, flags);
bail:
- return 1;
+ return 0;
}
static int ipath_query_device(struct ib_device *ibdev,
@@ -1159,7 +1140,7 @@ static ssize_t show_stats(struct class_d
len = sprintf(buf,
"RC resends %d\n"
- "RC QACKs %d\n"
+ "RC no QACK %d\n"
"RC ACKs %d\n"
"RC SEQ NAKs %d\n"
"RC RDMA seq %d\n"
diff -r 4eabd5fc05bb -r 36447eb1f256 drivers/infiniband/hw/ipath/ipath_verbs.h
--- a/drivers/infiniband/hw/ipath/ipath_verbs.h Mon Apr 24 14:21:04 2006 -0700
+++ b/drivers/infiniband/hw/ipath/ipath_verbs.h Mon Apr 24 14:21:04 2006 -0700
@@ -282,7 +282,8 @@ struct ipath_srq {
*/
struct ipath_qp {
struct ib_qp ibqp;
- struct ipath_qp *next; /* link list for QPN hash table */
+ struct ipath_qp *next; /* link list for QPN hash table */
+ struct ipath_qp *timer_next; /* link list for ipath_ib_timer() */
struct list_head piowait; /* link for wait PIO buf */
struct list_head timerwait; /* link for waiting for timeouts */
struct ib_ah_attr remote_ah_attr;
next prev parent reply other threads:[~2006-04-24 21:26 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-04-24 21:22 [PATCH 0 of 13] ipath - various fixes and cleanups Bryan O'Sullivan
2006-04-24 21:22 ` [PATCH 1 of 13] ipath - fix race with exposing reset file Bryan O'Sullivan
2006-04-24 21:22 ` [PATCH 2 of 13] ipath - set up 32-bit DMA mask if 64-bit setup fails Bryan O'Sullivan
2006-05-01 18:47 ` Roland Dreier
2006-05-01 19:56 ` Segher Boessenkool
2006-05-01 21:41 ` Roland Dreier
2006-05-01 23:13 ` Segher Boessenkool
2006-05-01 23:27 ` [openib-general] " Roland Dreier
2006-05-02 0:13 ` Segher Boessenkool
2006-05-02 0:18 ` Roland Dreier
2006-04-24 21:22 ` [PATCH 3 of 13] ipath - iterate over correct number of ports during reset Bryan O'Sullivan
2006-04-24 21:23 ` [PATCH 4 of 13] ipath - change handling of PIO buffers Bryan O'Sullivan
2006-04-25 9:32 ` Segher Boessenkool
2006-04-24 21:23 ` [PATCH 5 of 13] ipath - use proper address translation routine Bryan O'Sullivan
2006-05-01 18:50 ` Roland Dreier
2006-05-01 18:54 ` Arjan van de Ven
2006-05-01 19:00 ` Roland Dreier
2006-05-01 19:20 ` Arjan van de Ven
2006-05-01 19:28 ` Roland Dreier
2006-05-02 13:35 ` Christoph Hellwig
2006-05-02 14:24 ` Roland Dreier
2006-05-02 14:27 ` Christoph Hellwig
2006-05-02 14:55 ` Alan Cox
2006-05-02 14:58 ` Roland Dreier
2006-05-01 19:03 ` Bryan O'Sullivan
2006-04-24 21:23 ` [PATCH 6 of 13] ipath - fix verbs registration Bryan O'Sullivan
2006-04-24 21:23 ` [PATCH 7 of 13] ipath - prevent hardware from being accessed during reset Bryan O'Sullivan
2006-04-24 21:23 ` [PATCH 8 of 13] ipath - fix a number of RC protocol bugs Bryan O'Sullivan
2006-04-25 7:56 ` Andrew Morton
2006-05-01 17:22 ` Roland Dreier
2006-05-01 17:34 ` Bryan O'Sullivan
2006-04-24 21:23 ` [PATCH 9 of 13] ipath - simplify RC send posting Bryan O'Sullivan
2006-04-24 21:23 ` Bryan O'Sullivan [this message]
2006-04-24 21:23 ` [PATCH 11 of 13] ipath - improve sparse annotation Bryan O'Sullivan
2006-04-24 21:23 ` [PATCH 12 of 13] ipath - fix label name in interrupt handler Bryan O'Sullivan
2006-04-24 21:23 ` [PATCH 13 of 13] ipath - tidy up white space in a few files Bryan O'Sullivan
2006-05-01 19:17 ` Roland Dreier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=36447eb1f256c4c1d7bd.1145913786@eng-12.pathscale.com \
--to=bos@pathscale.com \
--cc=linux-kernel@vger.kernel.org \
--cc=openib-general@openib.org \
--cc=rdreier@cisco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®