Linux 2.6.x : cpm_dpalloc alignment bug perhaps not fully resolved
Hi Leo, Thanks for the reply. The patch, I already applied, comes directly from Pantelis and is the same code as found at http://patchwork.ozlabs.org/linuxppc/patch?id=3484 What do you mean by the alignment patch ? I suspect a problem in the cpm_dpfree function, not in the cpm_dpalloc function. I'll try to give more details. Best regards Laurent -Message d'origine- De : Li Yang-r58472 [mailto:LeoLi at freescale.com] Envoy? : mer. 5 juillet 2006 03:32 ? : Laurent Lagrange; pantelis at embeddedalley.com Cc : linuxppc-embedded at ozlabs.org Objet : RE: Linux 2.6.x : cpm_dpalloc alignment bug perhaps not fully resolved Did you apply the alignment patch too? AFAIK, the problem is never fixed in mainstream trees. Best Regards, Leo
Linux 2.6.x : cpm_dpalloc alignment bug perhaps not fully resolved
-Message d'origine- De : Li Yang-r58472 [mailto:LeoLi at freescale.com] Envoy? : mer. 5 juillet 2006 09:36 ? : Laurent Lagrange; pantelis at embeddedalley.com The patch, I already applied, comes directly from Pantelis and is the same code as found at http://patchwork.ozlabs.org/linuxppc/patch?id=3484 Sure, it is the patch I mentioned. Also be noted that the patch only fixes rheap in arch/ppc/. If you are using latest 2.6 source, you are most probably using code under arch/powerpc/. I use a Linux 2.6.9 for MPC8260 and the arch/ppc/lib/rheap.c file. I have no arch/powerpc tree in this kernel. Before applying the patch, I was not able to get a right aligned area with cpm_dpalloc. After applying it, cpm_dpalloc seems to be right until I use cpm_dpfree and then cpm_dpalloc on the same area. Another idea ? Thanks Laurent
Linux 2.6.x : cpm_dpalloc alignment bug perhaps not fully resolved
On Wednesday 05 July 2006 12:11, Laurent Lagrange wrote: -Message d'origine- De : Li Yang-r58472 [mailto:LeoLi at freescale.com] Envoy? : mer. 5 juillet 2006 09:36 ? : Laurent Lagrange; pantelis at embeddedalley.com The patch, I already applied, comes directly from Pantelis and is the same code as found at http://patchwork.ozlabs.org/linuxppc/patch?id=3484 Sure, it is the patch I mentioned. Also be noted that the patch only fixes rheap in arch/ppc/. If you are using latest 2.6 source, you are most probably using code under arch/powerpc/. I use a Linux 2.6.9 for MPC8260 and the arch/ppc/lib/rheap.c file. I have no arch/powerpc tree in this kernel. Before applying the patch, I was not able to get a right aligned area with cpm_dpalloc. After applying it, cpm_dpalloc seems to be right until I use cpm_dpfree and then cpm_dpalloc on the same area. Another idea ? Thanks Laurent Should be a bug at the free. I'll take a look at it when I have a few spare cycles. Pantelis
Linux 2.6.x : cpm_dpalloc alignment bug perhaps not fully resolved
-Message d'origine- De : Pantelis Antoniou [mailto:pantelis at embeddedalley.com] Envoy? : mer. 5 juillet 2006 10:38 ? : Laurent Lagrange Cc : 'Li Yang-r58472'; linuxppc-embedded at ozlabs.org Objet : Re: Linux 2.6.x : cpm_dpalloc alignment bug perhaps not fully resolved Should be a bug at the free. I'll take a look at it when I have a few spare cycles. Pantelis Yes, I think so. I'll try to get more details if I can help you. Best regards Laurent
Linux 2.6.x : cpm_dpalloc alignment bug perhaps not fully resolved
Hello Pantelis, Few months ago (25 January 2006), I sent a mail about an alignment bug in cpm_dpalloc. I applied and verified the provided patch. I was very satisfied with the result. Today I port a driver from Linux 2.4 to Linux 2.6 and I have strange results. The driver allocates rx and tx bds (8 bytes aligned) in the module_init for 4 SCC ports. That is always right. Then one port is opened by an application and a user configuration is set via an ioctl (set_conf). This ioctl first frees the old bds : cpm_dpfree(chan-rx_bd_offset); cpm_dpfree(chan-tx_bd_offset); then allocates the new ones : chan-rx_bd_offset = cpm_dpalloc(sizeof(cbd_t) * chan-conf.rx_bufnbr, 8); chan-tx_bd_offset = cpm_dpalloc(sizeof(cbd_t) * chan-conf.tx_bufnbr, 8); with rx_bufnbr == 8 and tx_bufnbr == 2 module_init SCC1 rx_bd_offset=160 SCC1 tx_bd_offset=1a8 SCC2 rx_bd_offset=1c0 SCC2 tx_bd_offset=208 SCC3 rx_bd_offset=220 SCC3 tx_bd_offset=260 SCC4 rx_bd_offset=278 SCC4 tx_bd_offset=2c0 set_conf SCC1 rx_bd_offset=160 SCC1 tx_bd_offset=1a4 - ??? module_init SCC1 rx_bd_offset=160 SCC1 tx_bd_offset=1a8 SCC2 rx_bd_offset=1c0 SCC2 tx_bd_offset=208 SCC3 rx_bd_offset=220 SCC3 tx_bd_offset=260 SCC4 rx_bd_offset=278 SCC4 tx_bd_offset=2c0 set_conf SCC2 rx_bd_offset=1c0 SCC2 tx_bd_offset=202 - ??? module_init SCC1 rx_bd_offset=160 SCC1 tx_bd_offset=1a8 SCC2 rx_bd_offset=1c0 SCC2 tx_bd_offset=208 SCC3 rx_bd_offset=220 SCC3 tx_bd_offset=260 SCC4 rx_bd_offset=278 SCC4 tx_bd_offset=2c0 set_conf SCC3 rx_bd_offset=220 SCC3 tx_bd_offset=260 - ok module_init SCC1 rx_bd_offset=160 SCC1 tx_bd_offset=1a8 SCC2 rx_bd_offset=1c0 SCC2 tx_bd_offset=208 SCC3 rx_bd_offset=220 SCC3 tx_bd_offset=260 SCC4 rx_bd_offset=278 SCC4 tx_bd_offset=2c0 set_conf SCC4 rx_bd_offset=278 SCC4 tx_bd_offset=2c0 - ok WARNING : if I only uses the SCC1 port without allocating bds for the other ports, I can free and reallocate the bds for the SCC1 port as many times I want. module_init SCC1 rx_bd_offset=160 SCC1 tx_bd_offset=1a8 set_conf SCC1 rx_bd_offset=160 SCC1 tx_bd_offset=1a8 - ok Really, I don't understand how this can arise. Any idea ? Thanks Laurent