Sandra Gilge (ADATIS) wrote:
there is following line in cc.h:
extern u8_t memp_memory_PBUF_POOL_base[] __attribute__ ((aligned (32)));

I checked the address of memp_memory_PBUF_POOL_base it is 32byte aligned

That might not be enough. With this, you only have ensured the PBUF_POOL memory starts aligned (so cache operations don't influence memory *before* that pool).
However, you still have two possible problems:
a) normally you flush the cache before TX and invalidate it before RX. However, you do so on the *data* only. Now the PBUF_POOL contains memory where "struct pbuf" is directly followed by the data buffer. Since "struct pbuf" is 16 bytes, cache operations on the data will corrupt the struct (when 32 byte alignment is required). b) the last pbuf might not end on a 32 byte boundary, so flushing/invalidating it might corrupt the next pool.

You seriously should fix this! However, I'm not convinced this is the reason for the tcp pcb list corruption, as the PBUF_POOL memory normally should be quite far away from the TCP_PCB pool... (unless your linker places them near each other).

Being like that, I'd still favour the "threading violation" problem...

> But I agree it could be easier with something like:
> #define PBUF_ALIGNMENT 32

That's true. Someone should work on that ;-)


Simon

_______________________________________________
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to