cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Highlighted
Observer
Observer
9,964 Views
Registered: ‎03-01-2010

lwip raw api webserver "pack dropped, no space"

Hi all,

I am trying to serve up a web page using lwip raw api project with some mods and looking at the hyperterminal output below you can see that some of it goes through and then I get a bunch of dropped packets. Does anyone have any idea of how to get past this isuue?

 

http GET: index.html
http_sent_callback: attempting to read 1400 bytes, left = 27405 bytes
http_sent_callback: attempting to read 1400 bytes, left = 26005 bytes
http_sent_callback: attempting to read 1400 bytes, left = 24605 bytes
http GET: css/main.css
http GET: css/dip/dip.css
http GET: css/led/led.css
http GET: js/dip.js
http GET: css/graycurve/graycurve.css
http_sent_callback: attempting to read 1400 bytes, left = 23205 bytes
http_sent_callback: attempting to read 1400 bytes, left = 21805 bytes
http_sent_callback: attempting to read 1400 bytes, left = 20405 bytes
http_sent_callback: attempting to read 1400 bytes, left = 19005 bytes
http_sent_callback: attempting to read 1400 bytes, left = 4875 bytes
http_sent_callback: attempting to read 1400 bytes, left = 17605 bytes
pack dropped, no space
pack dropped, no space
http_sent_callback: attempting to read 1400 bytes, left = 16205 bytes
pack dropped, no space
pack dropped, no space
pack dropped, no space
pack dropped, no space
pack dropped, no space
http_sent_callback: attempting to read 1400 bytes, left = 14805 bytes
pack dropped, no space
pack dropped, no space
pack dropped, no space
http_sent_callback: attempting to read 1400 bytes, left = 13405 bytes
pack dropped, no space
pack dropped, no space
pack dropped, no space
http GET: js/led.js
pack dropped, no space
pack dropped, no space
pack dropped, no space
pack dropped, no space
http GET: js/range.js
pack dropped, no space
pack dropped, no space
pack dropped, no space
http_sent_callback: attempting to read 1400 bytes, left = 3475 bytes
pack dropped, no space
pack dropped, no space
pack dropped, no space
pack dropped, no space
http_sent_callback: attempting to read 1400 bytes, left = 2075 bytes
pack dropped, no space
pack dropped, no space
pack dropped, no space
pack dropped, no space
http_sent_callback: attempting to read 1400 bytes, left = 12005 bytes
pack dropped, no space
pack dropped, no space
pack dropped, no space
pack dropped, no space
pack dropped, no space

 

 

Thanks,

Dmitry

0 Kudos
12 Replies
Highlighted
Visitor
Visitor
9,228 Views
Registered: ‎12-22-2013

I have the same error, please help.

Thanks

0 Kudos
Highlighted
Visitor
Visitor
9,158 Views
Registered: ‎01-11-2014

I have this message too..when I  start 2 EMAC interfaces? 

when 1 EMAC - OK!

 

0 Kudos
Highlighted
Scholar
Scholar
9,151 Views
Registered: ‎09-05-2011

I don't think lwip can handle dual mac. You may have to use something like treck to do so:
http://www.treck.com/
0 Kudos
Highlighted
Visitor
Visitor
9,141 Views
Registered: ‎01-11-2014

It does not help. (( 

Since each platform nuances.

I think the problem with DMA.

Because this error indicated at this lines(in lwIP)

 

static err_t low_level_output(struct netif *netif, struct pbuf *p)
{
SYS_ARCH_DECL_PROTECT(lev);
err_t err;
struct xemac_s *xemac = (struct xemac_s *)(netif->state);
xaxiemacif_s *xaxiemacif = (xaxiemacif_s *)(xemac->state);

/*
* With AXI Ethernet on Zynq, we observed unexplained delays for
* BD Status update. As a result, we are hitting a condition where
* there are no BDs free to transmit packets. So, we have added
* this logic where we look for the status update in a definite
* loop.
*/
XAxiDma_BdRing *txring = XAxiDma_GetTxRing(&xaxiemacif->axidma);
int count = 100;

SYS_ARCH_PROTECT(lev);

while (count) {

/* check if space is available to send */
if (is_tx_space_available(xaxiemacif)) {
_unbuffered_low_level_output(xaxiemacif, p);
err = ERR_OK;
break;
} else {
#if LINK_STATS
lwip_stats.link.drop++;
#endif
process_sent_bds(txring);
count--;
}
}

if (count == 0) {
print("pack dropped, no space\r\n");
err = ERR_MEM;
}

SYS_ARCH_UNPROTECT(lev);
return err;
}

 

But declarations of func "is_tx_space_available()" is a more than one???

 

0 Kudos
Highlighted
Visitor
Visitor
9,131 Views
Registered: ‎01-11-2014

I found where problem, all works OK!
Thank to all.

Highlighted
8,960 Views
Registered: ‎03-25-2014

Hello,

 

I have the same problem than you.

 

Do you remenber the solution?

 

Regards

0 Kudos
Highlighted
7,584 Views
Registered: ‎07-05-2014

Hi,

I have the same problem than you.

Do you remember your solution?

Regards
0 Kudos
Highlighted
Visitor
Visitor
6,293 Views
Registered: ‎02-08-2015

yes, when I use both axi dma and ethernet, there are two definitions in 

 

xaxiemacif.h

xemacpsif.h

 

so, how could I resolve this problem if I want to use both AXI-DMA and Ethernet ?

 

Could you please post how you resolve this problem ?

 

Liu

0 Kudos
Highlighted
Visitor
Visitor
4,795 Views
Registered: ‎02-17-2015

I recently was suffering with this issue and came across this post, which didn't give a whole lot of information but at least hinted that it has something to do with the AXI DMA.

 

In my case my PL design is using AXI DMA cores, and everything was working fine before but then I slightly changed the PL design so that the names of the AXI DMA cores were different. I then exported the new hardware to the SDK, which overwrote my old hardware defnition. The XSDK asks you if you want to upgrade your BSPs to align with the new hardware definition so I say OK, but I think this was where the problem was - the upgrade of the BSP, although it seemed to have gone smoothly, appeared to have messed something up in the BSP, particularly with LWIP.

 

The fix - simply delete the old BSP and re create it from scratch based on the new hardware definition and copy in all of the settings from the old BSP. A tip for copying around BSPs by the way is to open the system.mss file in XSDK and go to the source tab and just copy paste everything to the new BSP - saves having to remember which check boxes etc. you had selected in the GUI wizard.

 

Maybe this will help someone else. I am using Vivado 2014.3 though so it's possible this has been fixed by now anyway in newer versions..

0 Kudos
Highlighted
Explorer
Explorer
1,735 Views
Registered: ‎06-19-2015

Hi @xilinxnii

 

Pls help me, how you solved it.

 

Thanks

Madhu

0 Kudos
Highlighted
Visitor
Visitor
1,611 Views
Registered: ‎10-24-2017

Hello!

 

In our project we are faced with this problem and found out that disabling the Microblaze hardware integer divider solves the problem.

 

If hardware integer divider is on, then the function AxiDma_BdRingCreate (axidma_v7_02_a/src/xaxidma_bdring.c, line 326) always (or with our arguments only, I don't know) returns XST_INVALID_PARAM. This is due to an error in evaluating the condition (axidma_v7_02_a/src/xaxidma_bdring.c, line 367):

 

/* Make sure PhysAddr and VirtAddr are on same Alignment */
if ((PhysAddr % Alignment) || (VirtAddr % Alignment)) {

    xdbg_printf(XDBG_DEBUG_ERROR, "BdRingCreate: Physical address"
                " %x and virtual address %x have different alignment\r\n",
		(unsigned int)PhysAddr, (unsigned int)VirtAddr);
	return XST_INVALID_PARAM;
}

 In our case

PhysAddr = VirtAddr = 0xD0038780

Alignment = 0x80

but condition always true.

 

If the hardware integer divider is off, then the condition is checked correctly.

 

We use EDk/SDK v14.7 (nt64), Microblaze v8.50.c, axi_dma v7.02.a, lwip140 v1.06.a

0 Kudos
Highlighted
Participant
Participant
760 Views
Registered: ‎01-02-2019

Hello all,

I am also facing similar issue , is there any solution for this ?

Thank you all in advance.

0 Kudos