All of lore.kernel.org
 help / color / mirror / Atom feed
* RE: Atomic operations
@ 2002-06-03 19:09 Gregory Giguashvili
  2002-06-03 18:43 ` H. Peter Anvin
  0 siblings, 1 reply; 25+ messages in thread
From: Gregory Giguashvili @ 2002-06-03 19:09 UTC (permalink / raw)
  To: linux-kernel

Peter,

Thanks a lot for your help. 

> atomic_t test_then_add (int i, atomic_t* v)
> {
>    atomic_t old = *v;
>    v->counter += i;
>    return old;
> }
> There is no way to do this (without waiting and trying again type
> code) that I know of on i386.  However, you can test for zeroness of
> the result, or for <= 0, or a few other options.

Could you, please, clarify what you meant saying that there was no way of
doing so. I admit, I'm no expert in i386 assembly, but this operation seems
so simple to me...

Could you, please, suggest some other implementation (with waiting and
trying again - whatever this means)?

test_and_set and test_then_add functions are coming from code written for
IRIX. Solaris has similar functionality. Windows NT also provides these
primitives in Win32 API (possibly implemented not in the most effective way,
according to what you say). The only OS where they are missing is Linux. 

Unfortunately, these primitives became an integral part of our code, which
makes it very painful to change their behavior.

Thanks in advance.
Giga

^ permalink raw reply	[flat|nested] 25+ messages in thread
* atomic operations
@ 2013-02-24  9:42 Shraddha Kamat
  2013-02-24 10:50 ` richard -rw- weinberger
  2013-02-24 12:50 ` Peter Teoh
  0 siblings, 2 replies; 25+ messages in thread
From: Shraddha Kamat @ 2013-02-24  9:42 UTC (permalink / raw)
  To: kernelnewbies

what is the relation between atomic operations and memory alignment ?

I read from UTLK that "an unaligned memory access is not atomic" 

please explain me , I am not able to get the relationship between 
memory alignment and atomicity of the operation.

^ permalink raw reply	[flat|nested] 25+ messages in thread
* Atomic operations
@ 2009-03-26  0:17 Timothy Hayes
  2009-03-26  7:25 ` Keir Fraser
  0 siblings, 1 reply; 25+ messages in thread
From: Timothy Hayes @ 2009-03-26  0:17 UTC (permalink / raw)
  To: xen-devel


[-- Attachment #1.1: Type: text/plain, Size: 1206 bytes --]

I'm sure a lot of you know XenSocket (XVMSocket), if not, it's a Loadable
Kernel Module with a socket interface that sends/receives to/from a shared
page of memory mapped between two domains. It's quite a nice idea and brings
data throughput close to UNIX sockets. I made some changes and made it
compatible with Xen 3.2 and a newer Linux kernel (I'm testing it with
2.6.25.20) however I'm noticing some odd behaviour occasionally. In it,
there are atomic_t variables in a descriptor inside a shared memory page.
When a domain sends or receives from the socket, it will use one of the
atomic_ operations to update the amount of new data available. The problem
I'm noticing is that when two domains are concurrently updating this
variable, the value becomes inconsistent leading me to believe that the
atomic_ operations might not guarantee atomicity between domains. I haven't
been able to repeat any behaviour like this when I limit the two guests to
the same physical CPU and eliminate parallelism.

Would anyone be able fill me in if I'm missing something? Are the atomic_
operations 100% foolproof for this sort of thing? If not, what would be the
best approach to use instead?

Kind regards
Tim Hayes

[-- Attachment #1.2: Type: text/html, Size: 1260 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 25+ messages in thread
* RE: Atomic operations
@ 2002-06-04  9:23 Gregory Giguashvili
  0 siblings, 0 replies; 25+ messages in thread
From: Gregory Giguashvili @ 2002-06-04  9:23 UTC (permalink / raw)
  To: Linux Kernel (E-mail)

Hello,

Thanks a lot for your help to all of you...

The last thing, I want to make sure of, is that the following type of code:

int atomic_xadd(int i, atomic_t *v)
{
	int ret;
	__asm__(LOCK "xaddl %1,%0"
		: "=m" (v->counter), "=r" (ret)
		: "0" (v->counter), "1" (i));
	return ret;
}

is less efficient than this one:

int atomic_xadd(int i, atomic_t *v)
{
	asm volatile(LOCK "xaddl %1,%0"
		: "+m" (v->counter), "+r" (i));
	return i;
}

The reason for it is that the first one is more easy to read (at least for
me as a beginner). 

Thanks again for your precious comments.
Best,
Giga

^ permalink raw reply	[flat|nested] 25+ messages in thread
* Atomic operations
@ 2002-06-03 15:58 Gregory Giguashvili
  0 siblings, 0 replies; 25+ messages in thread
From: Gregory Giguashvili @ 2002-06-03 15:58 UTC (permalink / raw)
  To: Linux Kernel (E-mail); +Cc: 'chyang@ah.edu.cn'

Hello,

I forgot to add that I know that it can be implemented using XCHG and LOCK
operations. However, I'm not an expert in ASM, so I was hoping somebody
would help me...

Thanks 
Giga


^ permalink raw reply	[flat|nested] 25+ messages in thread
* Atomic operations
@ 2002-06-03 15:04 Gregory Giguashvili
  2002-06-03 17:27 ` H. Peter Anvin
                   ` (2 more replies)
  0 siblings, 3 replies; 25+ messages in thread
From: Gregory Giguashvili @ 2002-06-03 15:04 UTC (permalink / raw)
  To: Linux Kernel (E-mail)

Hello,

I wonder if someone can help me to change the behaviour of the atomic
functions available in <asm/atomic.h> include file. The operations I need to
implement are described below:

atomic_t test_and_set (int i, atomic_t* v)
{
   atomic_t old = *v;
   v->counter = i;
   return old;
}

atomic_t test_then_add (int i, atomic_t* v)
{
   atomic_t old = *v;
   v->counter += i;
   return old;
}

Thanks in advance,
Giga


^ permalink raw reply	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2013-03-01  5:44 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-06-03 19:09 Atomic operations Gregory Giguashvili
2002-06-03 18:43 ` H. Peter Anvin
  -- strict thread matches above, loose matches on Subject: below --
2013-02-24  9:42 atomic operations Shraddha Kamat
2013-02-24 10:50 ` richard -rw- weinberger
2013-02-24 23:24   ` Valdis.Kletnieks at vt.edu
2013-02-24 12:50 ` Peter Teoh
2013-02-24 12:53   ` Peter Teoh
2013-02-25  7:15     ` Kumar amit mehta
2013-03-01  5:44   ` Arun KS
2009-03-26  0:17 Atomic operations Timothy Hayes
2009-03-26  7:25 ` Keir Fraser
2009-03-26  7:34   ` Juergen Gross
2009-03-26  7:50     ` Keir Fraser
2009-03-27 17:22       ` Timothy Hayes
2009-03-27 17:56         ` Keir Fraser
2009-03-27 20:00           ` Timothy Hayes
2002-06-04  9:23 Gregory Giguashvili
2002-06-03 15:58 Gregory Giguashvili
2002-06-03 15:04 Gregory Giguashvili
2002-06-03 17:27 ` H. Peter Anvin
2002-06-03 18:08 ` Richard B. Johnson
2002-06-03 19:36   ` Thunder from the hill
2002-06-03 21:30     ` Richard B. Johnson
2002-06-03 18:39 ` Brian Gerst
2002-06-03 19:49   ` H. Peter Anvin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.