On Tue, 2011-10-04 at 17:26 -0300, Thadeu Lima de Souza Cascardo wrote: > if (ring->bf_enabled && desc_size <= MAX_BF && !bounce && > !vlan_tag) { > *(u32 *) (&tx_desc->ctrl.vlan_tag) |= > ring->doorbell_qpn;
Could this have endianness problems ? > op_own |= htonl((bf_index & 0xffff) << 8); Probably better to use cpu_to_be/lexx() here. Also make sure your descriptors are defined with the appropriate __beXX or __leXX types so sparse can tell you when you get this wrong > /* Ensure new descirptor hits memory > * before setting ownership of this descriptor to HW */ > wmb(); > tx_desc->ctrl.owner_opcode = op_own; > wmb(); > > mlx4_bf_copy(ring->bf.reg + ring->bf.offset, (unsigned > long *) &tx_desc->ctrl, > desc_size); What does the above do ? > wmb(); > > ring->bf.offset ^= ring->bf.buf_size; Is this HW visible ? It's a bit odd, are you doing double bufferring and trying to flip a bit ? If it's HW visible, is endian correct ? } else { > /* Ensure new descirptor hits memory > * before setting ownership of this descriptor to HW */ > wmb(); > tx_desc->ctrl.owner_opcode = op_own; > - wmb(); > - writel(ring->doorbell_qpn, ring->bf.uar->map + > MLX4_SEND_DOORBELL); > } > > + wmb(); > + writel(ring->doorbell_qpn, ring->bf.uar->map + > MLX4_SEND_DOORBELL); > + > --- Cheers, Ben. _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev