Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S265067AbTFLX0o (ORCPT ); Thu, 12 Jun 2003 19:26:44 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S265068AbTFLX0o (ORCPT ); Thu, 12 Jun 2003 19:26:44 -0400 Received: from gateway-1237.mvista.com ([12.44.186.158]:58610 "EHLO hermes.mvista.com") by vger.kernel.org with ESMTP id S265067AbTFLX0n (ORCPT ); Thu, 12 Jun 2003 19:26:43 -0400 Subject: Re: [PATCH] udev enhancements to use kernel event queue From: Robert Love To: Patrick Mochel Cc: Greg KH , Andrew Morton , sdake@mvista.com, linux-kernel@vger.kernel.org In-Reply-To: References: Content-Type: text/plain Message-Id: <1055461324.662.346.camel@localhost> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.4.0 (1.4.0-2) Date: 12 Jun 2003 16:42:04 -0700 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 998 Lines: 33 On Thu, 2003-06-12 at 16:34, Patrick Mochel wrote: > > Nice thinking. It is a shame we need a lock for this, but we don't > > have an atomic_inc_and_return(). > > Those were my sentiments exactly: Heh. > +static inline int atomic_inc_and_read(atomic_t *v) > +{ > + __asm__ __volatile__( > + LOCK "incl %0" > + :"=m" (v->counter) > + :"m" (v->counter)); > + return v->counter; > +} What prevents a race between the increment and the return (i.e. you return v->counter after another person also increments it)? Only the increment is guaranteed atomic. I think you need to copy the result of the increment into a local variable _inside_ of the LOCK and return that. Whether or not that will work sanely on all architectures I dunno. Robert Love - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/