Received: by 2002:a05:7412:2a91:b0:fc:a2b0:25d7 with SMTP id u17csp455844rdh; Wed, 14 Feb 2024 01:47:22 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCWWOw5SnqptvzqofC9EBkGIMONb1k1GGBSggk+EicL4vWvWknYy6yDO0ll4ZWbgoGRnx5w17lkjQdO5w7ToYlhh/+RNCV5NUlHhDgvRmg== X-Google-Smtp-Source: AGHT+IFw0dgBFXY+4gjo/4ldSKOEiEwlfvcmJr7kXSfvvsrTCHOV9EI4AIrhj/4I2NWhhusDDxpA X-Received: by 2002:a05:6808:1311:b0:3bf:f1da:633 with SMTP id y17-20020a056808131100b003bff1da0633mr2231894oiv.54.1707904041879; Wed, 14 Feb 2024 01:47:21 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707904041; cv=pass; d=google.com; s=arc-20160816; b=nXGNA/t8jZ5V2KC2keMms07BwaFXMwMJ365/yNuhFvZF5p6ocq04AKMOTrlJxP8xhj Iekzi1Y8MsbuEwll4GgxzL6u6fCScu7YhzLOHwtPShpQIMaBLwralE78yEu8b6Z8V7up qGnatTGgIHyk4unI2UK/hgOScjnAl0X3DdwXdKsSpIjhcZ3jDyCzlLHjsECtQe2GASX8 147W+5EHwTKZiL3Q2XRQW/Ddw9xWT1vnlKLycnZsjFY/Xa8jtTPgqJ7ljHGz6rlPWl7g 7AxlAoIUB4fASP9vQXcu9Yb9qeHMmCeQZueWt5m7fdlj9hMjHiErNLmMM1CJvtGzGqoR uGXw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:in-reply-to:organization:from :content-language:references:cc:to:subject:user-agent:mime-version :list-unsubscribe:list-subscribe:list-id:precedence:date:message-id :dkim-signature; bh=Otkq6DSuFM17sfAkzEm2kwL+YSuLkRnf/fQU0BAfeAQ=; fh=dgdhXTcC5ZmrtbfmXDF7xwt1zv8WSNsjUIQHPgtWAs8=; b=gXPYRfmkj+O7Q2Qri55kgrrsaqXqFPGhEbn4ZlUdfLowdeQZalFPc+GKCtG0YHmpDq mWvz8IMGGdFmZEFlIZooeHnnW58Yj4ygF8sd1UnePwUUkFhyR1sAY37DFZj88FDBqe2V juwT32e8avFiXpbU1gz5AGKe3/LIEPm+PMkJVWCtiHJ9ksX/Y0GxzYouVlyr92MKkdV3 qkM0PVNJjigPVFPs1VuXijMCZ+VXcIXw4IxNYDogLh7iLj+QMygsI8XA5PIj/UCa3mE7 FOAEAkxzYX1oPejnzziSlhvjBPo2XnMATx8XkifOWKWApE8Exjs2+3PvsW7I135Zk7I3 Iqyw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@mev.co.uk header.s=20221208-6x11dpa4 header.b=BCLoYihU; arc=pass (i=1 spf=pass spfdomain=mev.co.uk dkim=pass dkdomain=mev.co.uk dmarc=pass fromdomain=mev.co.uk); spf=pass (google.com: domain of linux-kernel+bounces-64997-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-64997-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=mev.co.uk X-Forwarded-Encrypted: i=2; AJvYcCXzZJB2T9A3TAVTB/0lQvIOscZAo/e4v7kuf0l5zY11HkoiPU8sts/0Po5nVqIMH5x7eKUbqUjNbAPar1KD/Cjs35NJ71O/TT6GqcSBWQ== Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id 10-20020a0562140d6a00b0067f8393c2adsi51466qvs.560.2024.02.14.01.47.21 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Feb 2024 01:47:21 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-64997-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@mev.co.uk header.s=20221208-6x11dpa4 header.b=BCLoYihU; arc=pass (i=1 spf=pass spfdomain=mev.co.uk dkim=pass dkdomain=mev.co.uk dmarc=pass fromdomain=mev.co.uk); spf=pass (google.com: domain of linux-kernel+bounces-64997-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-64997-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=mev.co.uk Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 9D4C21C2179C for ; Wed, 14 Feb 2024 09:47:21 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id A771A168D0; Wed, 14 Feb 2024 09:47:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=mev.co.uk header.i=@mev.co.uk header.b="BCLoYihU" Received: from smtp94.iad3b.emailsrvr.com (smtp94.iad3b.emailsrvr.com [146.20.161.94]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B9B9A1429C for ; Wed, 14 Feb 2024 09:47:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=146.20.161.94 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707904023; cv=none; b=isK9z6WrshXUUG0ALLelfAKFKV0UnLWPLm/2dtYCIvhUhNrPk9/00XZuKna3y3Lb/A2RIEoCBu33BVjHyhf7FumHV4xTy2z7wcakpABMRM3jj64caeUZEMBYVQaJ5O01Fn69aM3BgYy0b/THNfwzzYK8Kc1VH5t8fibP1hQpEFY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707904023; c=relaxed/simple; bh=/ld5vGvXRP2hSvgBY+VJzWtlXK+B5HhsvmC/rXZS9F8=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=JmWKFVtkWxJkZUnJfkZaKD/59RjVYF2Z2W1/ZdhPMn4ROmKymjjxtRG9D2fK4bft1a/IhgRXjJcSDUofnQhadhLP3hOu3In5WuNsPPU1gVlg53+yQvza3Gqhdb6CcoyR5lVj+tsa6hsu60ETwaUoeShMr4kMZaBmmuLFnHiYlac= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=mev.co.uk; spf=pass smtp.mailfrom=mev.co.uk; dkim=pass (1024-bit key) header.d=mev.co.uk header.i=@mev.co.uk header.b=BCLoYihU; arc=none smtp.client-ip=146.20.161.94 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=mev.co.uk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mev.co.uk DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=mev.co.uk; s=20221208-6x11dpa4; t=1707904015; bh=/ld5vGvXRP2hSvgBY+VJzWtlXK+B5HhsvmC/rXZS9F8=; h=Date:Subject:To:From:From; b=BCLoYihUA6MDtJU8A9Cz/n5HDcGpWb7P4OlVDK48Rd0yVD8NKSuNGp+KPDcFb7ruO NfeGZtZTW5QIYSYjRlKmVs7DJFQ1wP6/JJnyRb88XfF+NHLpyndVWl7UJ23COoFuP/ 6icn2jhdcMaQ0HkjEf6TnEEw43T9RF7P0BEAjxTo= X-Auth-ID: abbotti@mev.co.uk Received: by smtp12.relay.iad3b.emailsrvr.com (Authenticated sender: abbotti-AT-mev.co.uk) with ESMTPSA id F3306C00BA; Wed, 14 Feb 2024 04:46:54 -0500 (EST) Message-ID: <7b29252e-41dc-4fb5-a8aa-050b9c63f7bb@mev.co.uk> Date: Wed, 14 Feb 2024 09:46:54 +0000 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] comedi: comedi_test: Prevent timers rescheduling during deletion To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , H Hartley Sweeten , stable@vger.kernel.org References: <20240213181004.105072-1-abbotti@mev.co.uk> Content-Language: en-GB From: Ian Abbott Organization: MEV Ltd. In-Reply-To: <20240213181004.105072-1-abbotti@mev.co.uk> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Classification-ID: 882c513c-da9e-419c-9719-dff49a88041d-1-1 On 13/02/2024 18:10, Ian Abbott wrote: > The comedi_test devices have a couple of timers (ai_timer and ao_timer) > that can be started to simulate hardware interrupts. Their expiry > functions normally reschedule the timer. The driver code calls either > del_timer_sync() or del_timer() to delete the timers from the queue, but > does not currently prevent the timers from rescheduling themselves so > synchronized deletion may be ineffective. > > Add a couple of boolean members (one for each timer: ai_timer_enable and > ao_timer_enable) to the device private data structure to indicate > whether the timers are allowed to reschedule themselves. Set the member > to true when adding the timer to the queue, and to false when deleting > the timer from the queue in the waveform_ai_cancel() and > waveform_ao_cancel() functions. > > The del_timer_sync() function is also called from the waveform_detach() > function, but the timer enable members will already be set to false when > that function is called, so no change is needed there. > > Fixes: 403fe7f34e33 ("staging: comedi: comedi_test: fix timer race conditions") > Cc: # 4.4+ > Signed-off-by: Ian Abbott > --- > drivers/comedi/drivers/comedi_test.c | 37 +++++++++++++++++++++++++--- > 1 file changed, 33 insertions(+), 4 deletions(-) > > diff --git a/drivers/comedi/drivers/comedi_test.c b/drivers/comedi/drivers/comedi_test.c > index 30ea8b53ebf8..7fefe0de0bcc 100644 > --- a/drivers/comedi/drivers/comedi_test.c > +++ b/drivers/comedi/drivers/comedi_test.c > @@ -87,6 +87,8 @@ struct waveform_private { > struct comedi_device *dev; /* parent comedi device */ > u64 ao_last_scan_time; /* time of previous AO scan in usec */ > unsigned int ao_scan_period; /* AO scan period in usec */ > + bool ai_timer_enable:1; /* should AI timer be running? */ > + bool ao_timer_enable:1; /* should AO timer be running? */ > unsigned short ao_loopbacks[N_CHANS]; > }; > > @@ -232,12 +234,18 @@ static void waveform_ai_timer(struct timer_list *t) > if (cmd->stop_src == TRIG_COUNT && async->scans_done >= cmd->stop_arg) { > async->events |= COMEDI_CB_EOA; > } else { > + unsigned long flags; > + > if (devpriv->ai_convert_time > now) > time_increment = devpriv->ai_convert_time - now; > else > time_increment = 1; > - mod_timer(&devpriv->ai_timer, > - jiffies + usecs_to_jiffies(time_increment)); > + spin_lock_irqsave(&dev->spinlock, flags); > + if (devpriv->ai_timer_enable) { > + mod_timer(&devpriv->ai_timer, > + jiffies + usecs_to_jiffies(time_increment)); > + } > + spin_unlock_irqrestore(&dev->spinlock, flags); Actually, I should have used a plain old spin_lock() in the above (and spin_lock_bh() elsewhere in the code) instead of spin_lock_irqsave(), since there are no hard interrupts involved. I'll send a v2 patch shortly. -- -=( Ian Abbott || MEV Ltd. is a company )=- -=( registered in England & Wales. Regd. number: 02862268. )=- -=( Regd. addr.: S11 & 12 Building 67, Europa Business Park, )=- -=( Bird Hall Lane, STOCKPORT, SK3 0XA, UK. || www.mev.co.uk )=-