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