• David Gibson's avatar
    [PATCH] ibmveth: Fix index increment calculation · 5826cade
    David Gibson authored
    On Thu, Oct 12, 2006 at 06:22:14PM +1000, David Gibson wrote:
    > Your recent ibmveth commit, 751ae21c
    > ("fix int rollover panic"), causes a rapid oops on my test machine
    > (POWER5 LPAR).
    >
    > I've bisected it down to that commit, but am still investigating the
    > cause of the crash itself.
    
    Found the problem, I believe: an object lesson in the need for great
    caution using ++.
    
    [...]
    @@ -213,6 +213,7 @@ static void ibmveth_replenish_buffer_poo
     		}
    
     		free_index = pool->consumer_index++ % pool->size;
    +		pool->consumer_index = free_index;
     		index = pool->free_map[free_index];
    
     		ibmveth_assert(index != IBM_VETH_INVALID_MAP);
    
    Since the ++ is used as post-increment, the increment is not included
    in free_index, and so the added line effectively reverts the
    increment.  The produced_index side has an analagous bug.
    
    The following change corrects this:
    
    The recent commit 751ae21c introduced
    a bug in the producer/consumer index calculation in the ibmveth driver
    - incautious use of the post-increment ++ operator resulted in an
    increment being immediately reverted.  This patch corrects the logic.
    
    Without this patch, the driver oopses almost immediately after
    activation on at least some machines.
    Signed-off-by: default avatarDavid Gibson <dwg@au1.ibm.com>
    Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
    5826cade
ibmveth.c 40 KB