• Magnus Karlsson's avatar
    xsk: fix XDP socket ring buffer memory ordering · f63666de
    Magnus Karlsson authored
    The ring buffer code of XDP sockets is missing a memory barrier on the
    consumer side between the load of the data and the write that signals
    that it is ok for the producer to put new data into the buffer. On
    architectures that does not guarantee that stores are not reordered
    with older loads, the producer might put data into the ring before the
    consumer had the chance to read it. As IA does guarantee this
    ordering, it would only need a compiler barrier here, but there are no
    primitives in Linux for this specific case (hinder writes to be ordered
    before older reads) so I had to add a smp_mb() here which will
    translate into a run-time synch operation on IA.
    
    Added a longish comment in the code explaining what each barrier in
    the ring implementation accomplishes and what would happen if we
    removed one of them.
    Signed-off-by: default avatarMagnus Karlsson <magnus.karlsson@intel.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    f63666de
xsk_queue.h 7.88 KB