PERFORCE change 134282 for review
Kip Macy
kmacy at FreeBSD.org
Sun Jan 27 23:07:22 PST 2008
http://perforce.freebsd.org/chv.cgi?CH=134282
Change 134282 by kmacy at kmacy:pandemonium:toehead on 2008/01/28 07:06:49
add verbose logging to ddp functions
fix missed unlock in new_rx_data
Affected files ...
.. //depot/projects/toehead/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c#9 edit
.. //depot/projects/toehead/sys/dev/cxgb/ulp/tom/cxgb_cpl_socket.c#10 edit
.. //depot/projects/toehead/sys/dev/cxgb/ulp/tom/cxgb_defs.h#3 edit
.. //depot/projects/toehead/sys/dev/cxgb/ulp/tom/cxgb_vm.c#2 edit
Differences ...
==== //depot/projects/toehead/sys/dev/cxgb/ulp/tom/cxgb_cpl_io.c#9 (text+ko) ====
@@ -1604,7 +1604,7 @@
uint64_t t;
__be64 *tcb;
-
+ TRACE_ENTER;
/* Note that we only accout for CPL_GET_TCB issued by the DDP code. We
* really need a cookie in order to dispatch the RPLs.
*/
@@ -1621,7 +1621,7 @@
m_freem(m);
if (__predict_true((so->so_state & SS_NOFDREF) == 0))
sorwakeup(so);
-
+ TRACE_EXIT;
return;
}
@@ -1680,6 +1680,7 @@
if (__predict_false(so_no_receive(so) && m->m_pkthdr.len)) {
handle_excess_rx(toep, m);
+ TRACE_EXIT;
return;
}
@@ -1719,6 +1720,7 @@
q->kbuf_posted--;
panic("length not set");
m_free(m);
+ TRACE_EXIT;
return;
}
} else {
@@ -1726,6 +1728,7 @@
* but it got here way late and nobody cares anymore.
*/
m_free(m);
+ TRACE_EXIT;
return;
}
@@ -1746,6 +1749,7 @@
sbappend(&so->so_rcv, m);
if (__predict_true((so->so_state & SS_NOFDREF) == 0))
sorwakeup(so);
+ TRACE_EXIT;
}
/*
@@ -1779,6 +1783,7 @@
if (tp->rcv_nxt == rcv_nxt)
return;
+ TRACE_ENTER;
q = &toep->tp_ddp_state;
bsp = &q->buf_state[q->cur_buf];
m->m_pkthdr.len = rcv_nxt - tp->rcv_nxt;
@@ -1809,6 +1814,7 @@
* mode.
*/
q->ubuf_ddp_ready = 0;
+ TRACE_EXIT;
}
/*
@@ -1826,6 +1832,7 @@
if (__predict_false(so_no_receive(so))) {
handle_excess_rx(toep, m);
+ INP_UNLOCK(tp->t_inpcb);
return;
}
@@ -1843,6 +1850,7 @@
TOE_DEV(toeptoso(toep))->name, toep->tp_tid, m->m_seq,
tp->rcv_nxt);
m_freem(m);
+ INP_UNLOCK(tp->t_inpcb);
return;
}
#endif
@@ -1882,7 +1890,7 @@
DPRINTF("rx_data so=%p flags=0x%x len=%d\n", so, so->so_rcv.sb_flags, m->m_pkthdr.len);
sbappend_locked(&so->so_rcv, m);
- KASSERT(so->so_rcv.sb_cc < so->so_rcv.sb_mbmax,
+ KASSERT(so->so_rcv.sb_cc < (so->so_rcv.sb_mbmax << 1),
("so=%p, data contents exceed mbmax, sb_cc=%d sb_mbmax=%d",
so, so->so_rcv.sb_cc, so->so_rcv.sb_mbmax));
@@ -1926,7 +1934,8 @@
handle_excess_rx(toep, m);
return;
}
-
+
+ TRACE_ENTER;
tp = sototcpcb(so);
q = &toep->tp_ddp_state;
hdr = cplhdr(m);
@@ -1996,6 +2005,8 @@
if ((so->so_state & SS_NOFDREF) == 0)
sorwakeup_locked(so);
+
+ TRACE_EXIT;
}
#define DDP_ERR (F_DDP_PPOD_MISMATCH | F_DDP_LLIMIT_ERR | F_DDP_ULIMIT_ERR |\
@@ -2040,7 +2051,7 @@
handle_excess_rx(toep, m);
return;
}
-
+ TRACE_ENTER;
q = &toep->tp_ddp_state;
hdr = cplhdr(m);
ddp_report = ntohl(hdr->ddp_report);
@@ -2083,6 +2094,7 @@
if ((so->so_state & SS_NOFDREF) == 0)
sorwakeup_locked(so);
+ TRACE_EXIT;
}
/*
@@ -3703,7 +3715,8 @@
unsigned int tid = toep->tp_tid;
const struct tom_data *td = TOM_DATA(TOE_DEV(so));
unsigned int ppod_addr = tag * PPOD_SIZE + td->ddp_llimit;
-
+
+ TRACE_ENTER;
for (i = 0; i < nppods; ++i) {
m = m_gethdr_nofail(sizeof(*req) + PPOD_SIZE);
m_set_priority(m, mkprio(CPL_PRIORITY_CONTROL, toep));
@@ -3731,6 +3744,8 @@
send_or_defer(toep, m, 0);
ppod_addr += PPOD_SIZE;
}
+
+ TRACE_EXIT;
return (0);
}
@@ -3878,6 +3893,7 @@
struct cpl_set_tcb_field *req;
struct ddp_state *p = &toep->tp_ddp_state;
+ TRACE_ENTER;
wrlen = sizeof(*wr) + 3 * sizeof(*req) + sizeof(*getreq);
m = m_gethdr_nofail(wrlen);
m_set_priority(m, mkprio(CPL_PRIORITY_CONTROL, toep));
@@ -3932,6 +3948,7 @@
bufidx, tag0, tag1, len);
#endif
cxgb_ofld_send(TOEP_T3C_DEV(toep), m);
+ TRACE_EXIT;
}
/*
@@ -3949,6 +3966,7 @@
struct work_request_hdr *wr;
struct cpl_set_tcb_field *req;
+ TRACE_ENTER;
wrlen = sizeof(*wr) + sizeof(*req) + (len0 ? sizeof(*req) : 0) +
(len1 ? sizeof(*req) : 0) +
(modulate ? sizeof(struct cpl_rx_data_ack) : 0);
@@ -3994,6 +4012,7 @@
#endif
cxgb_ofld_send(TOEP_T3C_DEV(toep), m);
+ TRACE_EXIT;
}
void
==== //depot/projects/toehead/sys/dev/cxgb/ulp/tom/cxgb_cpl_socket.c#10 (text+ko) ====
@@ -526,6 +526,7 @@
err = sblock(&so->so_rcv, SBLOCKWAIT(flags));
if (err)
return (err);
+ TRACE_ENTER;
restart:
SOCKBUF_LOCK(&so->so_rcv);
len = uio->uio_resid;
@@ -757,6 +758,7 @@
SOCKBUF_UNLOCK(&so->so_rcv);
sbunlock(&so->so_rcv);
+ TRACE_EXIT;
return (err);
}
==== //depot/projects/toehead/sys/dev/cxgb/ulp/tom/cxgb_defs.h#3 (text+ko) ====
@@ -40,6 +40,11 @@
#define toeptoso(toep) ((toep)->tp_tp->t_inpcb->inp_socket)
#define sototoep(so) (sototcpcb((so))->t_toe)
+#define TRACE_ENTER printf("%s:%s entered", __FUNCTION__, __FILE__)
+#define TRACE_EXIT printf("%s:%s:%d exited", __FUNCTION__, __FILE__, __LINE__)
+
+
+
struct toepcb;
struct listen_ctx;
==== //depot/projects/toehead/sys/dev/cxgb/ulp/tom/cxgb_vm.c#2 (text+ko) ====
@@ -20,6 +20,9 @@
#include <vm/pmap.h>
#include <dev/cxgb/ulp/tom/cxgb_vm.h>
+#define TRACE_ENTER printf("%s:%s entered", __FUNCTION__, __FILE__)
+#define TRACE_EXIT printf("%s:%s:%d exited", __FUNCTION__, __FILE__, __LINE__)
+
/*
* This routine takes a user address range and does the following:
* - validate that the user has access to those pages (flags indicates read or write) - if not fail
@@ -50,10 +53,11 @@
* and user do not share VA - however, it appears that all FreeBSD
* architectures define it
*/
- pageslen = count * PAGE_SIZE;
+ pageslen = count * PAGE_SIZE;
if (addr + pageslen > VM_MAXUSER_ADDRESS)
return (EFAULT);
+ TRACE_ENTER;
td = curthread;
map = &td->td_proc->p_vmspace->vm_map;
pmap = &td->td_proc->p_vmspace->vm_pmap;
@@ -92,8 +96,11 @@
}
vm_page_unlock_queues();
- if (faults == 0)
+ if (faults == 0) {
+ TRACE_EXIT;
return (0);
+ }
+
/*
* Pages either have insufficient permissions or are not present
* trigger a fault where neccessary
@@ -124,6 +131,7 @@
if (*pages)
vm_page_unhold(*pages);
vm_page_unlock_queues();
+ TRACE_EXIT;
return (EFAULT);
}
More information about the p4-projects
mailing list