Re: [openib-general] [PATCH] agent: Handle out of order send completions

2004-11-11 Thread Hal Rosenstock
On Wed, 2004-11-10 at 14:07, Sean Hefty wrote:
 Hal Rosenstock wrote:
 
  -   send_wr.wr_id = ++port_priv-wr_id;
  +   send_wr.wr_id = (unsigned long)agent_send_wr-send_list;
 {snip}
  +   send_wr = (struct list_head *)(unsigned long)mad_send_wc-wr_id;
  +   agent_send_wr =  container_of(send_wr, struct ib_agent_send_wr,
   send_list);
 
 I think it may be clearer to set the wr_id to agent_send_wr, rather than 
 a subfield.

Yes, that would be better (clearer and less code). Patch shortly for
this.

-- Hal

___
openib-general mailing list
[EMAIL PROTECTED]
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general


[openib-general] [PATCH] agent: Handle out of order send completions

2004-11-10 Thread Hal Rosenstock
agent: Handle out of order send completions
(Issue pointed out by Sean)

Index: agent_priv.h
===
--- agent_priv.h(revision 1183)
+++ agent_priv.h(working copy)
@@ -46,7 +46,6 @@
struct ib_mad_agent *lr_smp_agent;/* LR SM class */
struct ib_mad_agent *perf_mgmt_agent; /* PerfMgmt class */
struct ib_mr *mr;
-   u64 wr_id;
 };
 
 #endif /* __IB_AGENT_PRIV_H__ */
Index: agent.c
===
--- agent.c (revision 1192)
+++ agent.c (working copy)
@@ -117,9 +117,9 @@
/* PCI mapping */
gather_list.addr = pci_map_single(mad_agent-device-dma_device,
  mad-mad,
- sizeof mad-mad,
+ sizeof(mad-mad),
  PCI_DMA_TODEVICE);
-   gather_list.length = sizeof mad-mad;
+   gather_list.length = sizeof(mad-mad);
gather_list.lkey = (*port_priv-mr).lkey;
 
send_wr.next = NULL;
@@ -172,7 +172,7 @@
send_wr.wr.ud.remote_qkey = 0; /* for SMPs */
}
send_wr.wr.ud.mad_hdr = mad-mad.mad.mad_hdr;
-   send_wr.wr_id = ++port_priv-wr_id;
+   send_wr.wr_id = (unsigned long)agent_send_wr-send_list;
 
pci_unmap_addr_set(agent_send_wr, mapping, gather_list.addr);
 
@@ -182,7 +182,7 @@
spin_unlock_irqrestore(port_priv-send_list_lock, flags);
pci_unmap_single(mad_agent-device-dma_device,
 pci_unmap_addr(agent_send_wr, mapping),
-sizeof mad-mad,
+sizeof(mad-mad),
 PCI_DMA_TODEVICE);
ib_destroy_ah(agent_send_wr-ah);
kfree(agent_send_wr);
@@ -247,31 +247,18 @@
return;
}
 
-   /* Completion corresponds to first entry on posted MAD send list */
spin_lock_irqsave(port_priv-send_list_lock, flags);
-   if (list_empty(port_priv-send_posted_list)) {
-   spin_unlock_irqrestore(port_priv-send_list_lock, flags);
-   printk(KERN_ERR SPFX Send completion WR ID 0x%Lx but send 
-  list is empty\n,
-  (unsigned long long) mad_send_wc-wr_id);
-   return;
-   }
-
-   agent_send_wr = list_entry(port_priv-send_posted_list,
-   struct ib_agent_send_wr,
-   send_list);
-   send_wr = agent_send_wr-send_list.next;
-   agent_send_wr = container_of(send_wr, struct ib_agent_send_wr,
+   send_wr = (struct list_head *)(unsigned long)mad_send_wc-wr_id;
+   agent_send_wr =  container_of(send_wr, struct ib_agent_send_wr,
 send_list);
-
-   /* Remove from posted send MAD list */
+   /* Remove completed send from posted send MAD list */
list_del(agent_send_wr-send_list);
spin_unlock_irqrestore(port_priv-send_list_lock, flags);
 
/* Unmap PCI */
pci_unmap_single(mad_agent-device-dma_device,
 pci_unmap_addr(agent_send_wr, mapping),
-sizeof agent_send_wr-mad-mad,
+sizeof(agent_send_wr-mad-mad),
 PCI_DMA_TODEVICE);
 
ib_destroy_ah(agent_send_wr-ah);
@@ -306,7 +293,6 @@
 
memset(port_priv, 0, sizeof *port_priv);
port_priv-port_num = port_num;
-   port_priv-wr_id = 0;
spin_lock_init(port_priv-send_list_lock);
INIT_LIST_HEAD(port_priv-send_posted_list);
 



___
openib-general mailing list
[EMAIL PROTECTED]
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general


Re: [openib-general] [PATCH] agent: Handle out of order send completions

2004-11-10 Thread Sean Hefty
Hal Rosenstock wrote:
-   send_wr.wr_id = ++port_priv-wr_id;
+   send_wr.wr_id = (unsigned long)agent_send_wr-send_list;
{snip}
+   send_wr = (struct list_head *)(unsigned long)mad_send_wc-wr_id;
+   agent_send_wr =  container_of(send_wr, struct ib_agent_send_wr,
 send_list);
I think it may be clearer to set the wr_id to agent_send_wr, rather than 
a subfield.

Thanks for doing this btw; I can take it off my to do list.  :)
- Sean
___
openib-general mailing list
[EMAIL PROTECTED]
http://openib.org/mailman/listinfo/openib-general
To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general