[Prism54-devel] TX path problems

Jean-Baptiste Note jean-baptiste.note at wanadoo.fr
Tue May 17 20:56:30 UTC 2005


Dear list,

Still investigating occasions to share code between mgmt and data queues
on the rx and tx paths, i had a look at islpci_eth.c tonight.

I don't understand this sequence in islpci_eth.c, function islpci_eth_receive :

	offset = ((unsigned long)
		  le32_to_cpu(control_block->rx_data_low[index].address) -
		  (unsigned long) skb->data) & 3;

        then later :

	if (offset) {
		/* shift the buffer allocation offset bytes to get the right frame */
		skb_pull(skb, 2);
		skb_put(skb, 2);
	}

This is the offset thing that is done automatically when looking at an
updated value in buf->pci_addr, isn't it ? I mean the sequence :

		addr_offset = le32_to_cpu(frag->address) - buf->pci_addr;
		if (addr_offset)
		{
			printk(KERN_WARNING "%s: mgmt frame was offset by %i\n",
			       ndev->name,addr_offset);
			skb_reserve(buf->skb,addr_offset);
		}

Additionally, we do much work in the tx path under spinlock (function
islpci_eth_transmit). I modified the code so that only the essential
work is done under spinlock, irq disabled. This also paves the way for
code sharing with the mgmt queue on the tx path. Patches to follow.

JB

-- 
Jean-Baptiste Note
+33 (0)6 83 03 42 38
jean-baptiste.note at wanadoo.fr


More information about the Prism54-devel mailing list