From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Monjalon Subject: Re: [PATCH v2 0/3] timer: fix rte_timer_manage and improve unit tests Date: Mon, 03 Aug 2015 00:06:38 +0200 Message-ID: <1803527.ArLAiIq7YK@xps13> References: <1437691347-58708-1-git-send-email-rsanford2@gmail.com> <1438037168-639-1-git-send-email-rsanford2@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7Bit Cc: dev@dpdk.org To: rsanford2@gmail.com Return-path: Received: from mail-wi0-f182.google.com (mail-wi0-f182.google.com [209.85.212.182]) by dpdk.org (Postfix) with ESMTP id 1559E2E41 for ; Mon, 3 Aug 2015 00:07:53 +0200 (CEST) Received: by wibxm9 with SMTP id xm9so91496371wib.1 for ; Sun, 02 Aug 2015 15:07:53 -0700 (PDT) In-Reply-To: <1438037168-639-1-git-send-email-rsanford2@gmail.com> List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 2015-07-27 18:46, rsanford2@gmail.com: > From: Robert Sanford > > This patchset fixes a bug in timer stress test 2, adds a new stress test > to expose a race condition bug in API rte_timer_manage(), and then fixes > the rte_timer_manage() bug. > > Description of rte_timer_manage() race condition bug: Through code > inspection, we notice a potential problem in rte_timer_manage() that > leads to corruption of per-lcore pending-lists (implemented as > skip-lists). The race condition occurs when rte_timer_manage() expires > multiple timers on lcore A, while lcore B simultaneously invokes > rte_timer_reset() for one of the expiring timers (other than the first > one). > > Lcore A splits its pending-list, creating a local list of expired timers > linked through their sl_next[0] pointers, and sets the first expired > timer to the RUNNING state, all during one list-lock round trip. > Lcore A then unlocks the list-lock to run the first callback, and that > is when A and B can have different interpretations of the subsequent > expired timers' true state. Lcore B sees an expired timer still in the > PENDING state, atomically changes the timer to the CONFIG state, locks > lcore A's list-lock, and reinserts the timer into A's pending-list. > The two lcores try to use the same next-pointers to maintain both lists! > > v2 changes: > Move patch descriptions to their respective patches. > Correct checkpatch warnings. Applied, thanks