Linux ACPI
 help / color / mirror / Atom feed
From: Linus Torvalds <torvalds@linux-foundation.org>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>,
	Zhang Rui <rui.zhang@intel.com>,
	LKML <linux-kernel@vger.kernel.org>,
	ACPI Devel Maling List <linux-acpi@vger.kernel.org>,
	pm list <linux-pm@lists.linux-foundation.org>
Subject: Re: Async resume patch (was: Re: [GIT PULL] PM updates for 2.6.33)
Date: Tue, 8 Dec 2009 14:16:12 -0800 (PST)	[thread overview]
Message-ID: <alpine.LFD.2.00.0912081339040.3560@localhost.localdomain> (raw)
In-Reply-To: <Pine.LNX.4.44L0.0912081626400.3046-100000@iolanthe.rowland.org>



On Tue, 8 Dec 2009, Alan Stern wrote:
> > 
> > Sure they can. Control dependencies are trivial - it's called "branch 
> > prediction", and everybody does it, and data dependencies don't exist on 
> > many CPU architectures (even to the point of reading through a pointer 
> > that you loaded).
> 
> Wait a second.  Are you saying that with code like this:
> 
> 	if (x == 1)
> 		y = 5;
> 
> the CPU may write to y before it has finished reading the value of x?  

Well, in a way.  The branch may have been predicted, and the CPU can 
_internally_ have done the 'y=5' thing into a write buffer before it even 
did the read.

Some time later it will have to _verify_ the prediction and then perhaps 
kill the write before it makes it to a data structure that is visible to 
others, but internally from the CPU standpoint, yes, the write could have 
happened before the read.

Now, whether that write is "before" or "after" the read is debatable. But 
one way of looking at it is certainly that the write took place earlier, 
and the read might have just caused it to be undone.

And there are real effects of this - looking at the bus, you might have a 
bus transaction to get the cacheline that contains 'y' for exclusive 
access happen _before_ the bus transaction that reads in the value of 'x' 
(but you'd never see the writeout of that '5' before).

> And this write is visible to other CPUs, so that if x was initially 0
> and a second CPU sets x to 1, the second CPU may see y == 5 before it
> executes the write to x (whatever that may mean)?

Well, yes and no. CPU1 above won't release the '5' until it has confirmed 
the '1' (even if it does so by reading it late). but assuming the other 
CPU also does speculation, then yes, the situation you describe could 
happen. If the other CPU does

		z = y;
		x = 1;

then it's certainly possible that 'z' contains 5 at the end (even if both 
x and y started out zero). Because now the read of 'y' on that other CPU 
might be delayed, and the write of 'x' goes ahead, CPU1 sees the 1, and 
commits its write of 5, sp when CPU2 gets the cacheline, z will now 
contain 5.

Is it likely? No. CPU microarchitectures aim to do reads early, and writes 
late. Reads are on the critical path, writes can be buffered. But you can 
basically get into "impossible" situations where a write that was _later_ 
in the instruction stream than a read (on CPU2, the 'store 1 to x' would 
be after the load of 'y' from memory) could show up in the other order on 
another CPU.


			Linus

  parent reply	other threads:[~2009-12-08 22:16 UTC|newest]

Thread overview: 234+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-05 21:16 [GIT PULL] PM updates for 2.6.33 Rafael J. Wysocki
2009-12-05 21:43 ` Linus Torvalds
2009-12-05 21:58   ` Linus Torvalds
2009-12-05 23:55     ` Rafael J. Wysocki
2009-12-06  0:45       ` Arjan van de Ven
2009-12-06  1:26         ` Rafael J. Wysocki
2009-12-06  1:58           ` Arjan van de Ven
2009-12-06  8:39             ` Ingo Molnar
2009-12-06  0:48       ` Linus Torvalds
2009-12-06  1:54         ` Rafael J. Wysocki
2009-12-06  1:57           ` Rafael J. Wysocki
2009-12-06  2:05           ` Linus Torvalds
2009-12-06  2:36             ` Rafael J. Wysocki
2009-12-06 15:23             ` Alan Stern
2009-12-06 19:04               ` [linux-pm] " Victor Lowther
2009-12-07  3:57               ` Zhang Rui
2009-12-07  5:57                 ` Linus Torvalds
2009-12-07  6:15                   ` Linus Torvalds
2009-12-17 23:28                     ` Benjamin Herrenschmidt
2009-12-07  6:37                   ` Arjan van de Ven
2009-12-07 15:13                   ` Alan Stern
2009-12-07 16:31                     ` Linus Torvalds
2009-12-07 16:55                       ` Linus Torvalds
2009-12-07 17:52                       ` Alan Stern
2009-12-07 18:05                         ` Linus Torvalds
2009-12-07 20:37                           ` Alan Stern
2009-12-07 20:48                             ` Linus Torvalds
2009-12-07 21:32                               ` Alan Stern
2009-12-07 21:41                                 ` Linus Torvalds
2009-12-07 21:47                                   ` Rafael J. Wysocki
2009-12-07 22:01                                   ` Alan Stern
2009-12-07 22:06                                     ` Linus Torvalds
2009-12-07 22:21                                       ` Alan Stern
2009-12-07 22:26                                         ` Linus Torvalds
2009-12-07 23:16                                           ` Alan Stern
2009-12-07 22:02                                   ` Rafael J. Wysocki
2009-12-07 22:16                                     ` Linus Torvalds
2009-12-07 23:51                                       ` Rafael J. Wysocki
2009-12-08  3:27                                         ` Alan Stern
2009-12-08 12:23                                           ` Async resume patch (was: Re: [GIT PULL] PM updates for 2.6.33) Rafael J. Wysocki
2009-12-08 12:35                                             ` Rafael J. Wysocki
2009-12-08 15:35                                             ` Linus Torvalds
2009-12-08 15:55                                               ` Alan Stern
2009-12-08 16:42                                                 ` Linus Torvalds
2009-12-08 18:08                                                   ` Alan Stern
2009-12-08 18:41                                                     ` Linus Torvalds
2009-12-08 18:52                                                       ` Linus Torvalds
2009-12-08 19:34                                                         ` Alan Stern
2009-12-08 19:30                                                       ` Alan Stern
2009-12-08 20:48                                                         ` Linus Torvalds
2009-12-08 21:32                                                           ` Alan Stern
2009-12-08 21:52                                                             ` Christian Borntraeger
2009-12-08 22:16                                                             ` Linus Torvalds [this message]
2009-12-09 19:06                                                               ` Alan Stern
2009-12-09 21:52                                                                 ` Linus Torvalds
2009-12-08 19:44                                               ` Rafael J. Wysocki
2009-12-08 20:16                                                 ` Alan Stern
2009-12-08 20:30                                                   ` Rafael J. Wysocki
2009-12-08 20:44                                                     ` Alan Stern
2009-12-08 20:52                                                       ` Rafael J. Wysocki
2009-12-08 21:40                                                         ` Alan Stern
2009-12-08 21:48                                                           ` spinlock in completion_done() (was: Re: Async resume patch (was: Re: [GIT PULL] PM updates for 2.6.33)) Rafael J. Wysocki
2009-12-09  9:29                                                             ` Ingo Molnar
2009-12-09 22:37                                                               ` Rafael J. Wysocki
2009-12-10  7:59                                                                 ` Ingo Molnar
2009-12-11  4:10                                                                   ` Dave Chinner
2009-12-11  7:54                                                                     ` Ingo Molnar
2009-12-12 23:07                                                                   ` [PATCH] sched: Make wakeup side variants of completion API irq safe (was: Re: spinlock in completion_done()) Rafael J. Wysocki
2009-12-08 22:18                                                           ` Async resume patch (was: Re: [GIT PULL] PM updates for 2.6.33) Linus Torvalds
2009-12-09  2:11                                                             ` Alan Stern
2009-12-08 21:08                                                   ` Linus Torvalds
2009-12-08 21:13                                                     ` Linus Torvalds
2009-12-08 22:07                                                     ` Alan Stern
2009-12-08 22:30                                                       ` Rafael J. Wysocki
2009-12-09  2:23                                                         ` Alan Stern
2009-12-09 21:56                                                           ` Rafael J. Wysocki
2009-12-09 22:27                                                             ` Alan Stern
2009-12-08 22:32                                                       ` Linus Torvalds
2009-12-09  2:35                                                         ` Alan Stern
2009-12-09  2:54                                                           ` Linus Torvalds
2009-12-09 15:24                                                             ` Alan Stern
2009-12-09 15:38                                                               ` Linus Torvalds
2009-12-09 15:57                                                                 ` Alan Stern
2009-12-25 17:09                                                                   ` Pavel Machek
2009-12-09 13:38                                                           ` Mark Brown
2009-12-09 15:49                                                             ` Alan Stern
2009-12-09 16:02                                                               ` Mark Brown
2009-12-09 16:23                                                                 ` Alan Stern
2009-12-09 16:46                                                                   ` Mark Brown
2009-12-09 16:57                                                                     ` Linus Torvalds
2009-12-09 17:45                                                                       ` Mark Brown
2009-12-09 17:57                                                                         ` Linus Torvalds
2009-12-09 18:27                                                                           ` Mark Brown
2009-12-09 17:10                                                                     ` Alan Stern
2009-12-09 17:19                                                                       ` Linus Torvalds
2009-12-09 18:08                                                                       ` Mark Brown
2009-12-08 21:04                                                 ` Linus Torvalds
2009-12-08 21:40                                                   ` Rafael J. Wysocki
2009-12-08 22:03                                                     ` Rafael J. Wysocki
2009-12-08 22:55                                                       ` Async suspend-resume patch w/ rwsems " Rafael J. Wysocki
2009-12-08 23:24                                                         ` Rafael J. Wysocki
2009-12-09 20:15                                                         ` Alan Stern
2009-12-09 22:18                                                           ` Rafael J. Wysocki
2009-12-09 22:38                                                             ` Alan Stern
2009-12-09 23:18                                                               ` Async suspend-resume patch w/ completions (was: Re: Async suspend-resume patch w/ rwsems) Rafael J. Wysocki
2009-12-10  2:51                                                                 ` Linus Torvalds
2009-12-10 19:40                                                                   ` Rafael J. Wysocki
2009-12-10 23:30                                                                     ` Linus Torvalds
2009-12-11  1:02                                                                       ` Rafael J. Wysocki
2009-12-11  1:25                                                                         ` Linus Torvalds
2009-12-11  3:42                                                                           ` Alan Stern
2009-12-11 22:17                                                                             ` Rafael J. Wysocki
2009-12-12  0:38                                                                               ` Alan Stern
2009-12-11 22:11                                                                           ` Rafael J. Wysocki
2009-12-11 22:31                                                                             ` Linus Torvalds
2009-12-11 23:48                                                                               ` Rafael J. Wysocki
2009-12-11 23:53                                                                                 ` Linus Torvalds
2009-12-12 17:48                                                                                   ` Rafael J. Wysocki
2009-12-12 18:54                                                                                     ` Linus Torvalds
2009-12-12 22:34                                                                                       ` Rafael J. Wysocki
2009-12-12 22:40                                                                                         ` Rafael J. Wysocki
2009-12-14 18:21                                                                                         ` Linus Torvalds
2009-12-14 22:11                                                                                           ` Rafael J. Wysocki
2009-12-14 22:41                                                                                             ` Linus Torvalds
2009-12-14 22:43                                                                                               ` Linus Torvalds
2009-12-14 23:18                                                                                               ` Rafael J. Wysocki
2009-12-15  0:10                                                                                                 ` Linus Torvalds
2009-12-15  0:11                                                                                                   ` Linus Torvalds
2009-12-15 11:14                                                                                                     ` Rafael J. Wysocki
2009-12-15 15:31                                                                                                       ` Linus Torvalds
2009-12-15 11:03                                                                                                   ` Rafael J. Wysocki
2009-12-15 15:26                                                                                                     ` Linus Torvalds
2009-12-15 15:55                                                                                                       ` Alan Stern
2009-12-15 16:28                                                                                                         ` Linus Torvalds
2009-12-15 18:57                                                                                                           ` Linus Torvalds
2009-12-15 20:26                                                                                                           ` Alan Stern
2009-12-15 21:26                                                                                                             ` Rafael J. Wysocki
2009-12-15 22:01                                                                                                               ` Alan Stern
2009-12-15 21:54                                                                                                             ` Linus Torvalds
2009-12-15 22:27                                                                                                               ` Alan Stern
2009-12-16  2:11                                                                                                       ` Rafael J. Wysocki
2009-12-16  6:40                                                                                                         ` Dmitry Torokhov
2009-12-18 22:43                                                                                                           ` Rafael J. Wysocki
2009-12-19 19:59                                                                                                             ` Dmitry Torokhov
2009-12-19 21:33                                                                                                               ` Rafael J. Wysocki
2009-12-19 22:29                                                                                                                 ` Rafael J. Wysocki
2009-12-19 22:43                                                                                                                   ` Dmitry Torokhov
2009-12-19 22:47                                                                                                                 ` Dmitry Torokhov
2009-12-19 23:10                                                                                                                   ` Rafael J. Wysocki
2009-12-19 23:22                                                                                                                     ` Dmitry Torokhov
2009-12-19 23:33                                                                                                                       ` Rafael J. Wysocki
2009-12-19 23:23                                                                                                                     ` Linus Torvalds
2009-12-19 23:40                                                                                                                       ` Rafael J. Wysocki
2009-12-19 23:46                                                                                                                         ` Linus Torvalds
2009-12-19 23:47                                                                                                                           ` Linus Torvalds
2009-12-19 23:54                                                                                                                             ` Rafael J. Wysocki
2009-12-19 23:53                                                                                                                           ` Rafael J. Wysocki
2009-12-20  0:09                                                                                                                             ` Linus Torvalds
2009-12-20  0:35                                                                                                                               ` Rafael J. Wysocki
2009-12-20  2:41                                                                                                                               ` Dmitry Torokhov
2009-12-20 19:25                                                                                                                                 ` [linux-pm] " Rafael J. Wysocki
2009-12-21  7:39                                                                                                                                   ` [linux-pm] Async suspend-resume patch w/ completions (was: Re: Async?suspend-resume " Dmitry Torokhov
2009-12-21 11:20                                                                                                                                     ` Vojtech Pavlik
2009-12-20  2:45                                                                                                                             ` Async suspend-resume patch w/ completions (was: Re: Async suspend-resume " Dmitry Torokhov
2009-12-20  3:59                                                                                                                         ` Alan Stern
2009-12-20 12:52                                                                                                                           ` Rafael J. Wysocki
2009-12-20 17:12                                                                                                                             ` Alan Stern
2009-12-20 18:10                                                                                                                               ` Rafael J. Wysocki
2009-12-20 19:38                                                                                                                                 ` Alan Stern
2009-12-20 19:51                                                                                                                                   ` Rafael J. Wysocki
2009-12-16 15:22                                                                                                         ` Alan Stern
2009-12-16 19:26                                                                                                           ` Rafael J. Wysocki
2009-12-16 15:47                                                                                                         ` Linus Torvalds
2009-12-16 19:27                                                                                                           ` Rafael J. Wysocki
2009-12-16 20:59                                                                                                             ` Linus Torvalds
2009-12-16 21:57                                                                                                               ` Rafael J. Wysocki
2009-12-16 22:11                                                                                                                 ` Linus Torvalds
2009-12-16 22:33                                                                                                                   ` Rafael J. Wysocki
2009-12-16 23:04                                                                                                                 ` Alan Stern
2009-12-16 23:18                                                                                                                   ` Rafael J. Wysocki
2009-12-17  1:30                                                                                                                     ` Rafael J. Wysocki
2009-12-17  1:49                                                                                                                 ` Rafael J. Wysocki
2009-12-17 20:06                                                                                                                   ` Alan Stern
2009-12-17 20:36                                                                                                                     ` Rafael J. Wysocki
2009-12-18  1:51                                                                                                                   ` Rafael J. Wysocki
2009-12-18 17:26                                                                                                                     ` Alan Stern
2009-12-19 21:41                                                                                                                       ` Rafael J. Wysocki
2009-12-20  3:48                                                                                                                         ` Alan Stern
2009-12-20 12:55                                                                                                                           ` Rafael J. Wysocki
2009-12-18 23:42                                                                                                                     ` Rafael J. Wysocki
2009-12-13 13:08                                                                                       ` Rafael J. Wysocki
2009-12-13 17:30                                                                                       ` Alan Stern
2009-12-13 19:02                                                                                         ` [linux-pm] " Alan Stern
2009-12-12  0:43                                                                                 ` Alan Stern
2009-12-12 17:35                                                                                   ` Rafael J. Wysocki
2009-12-10 15:31                                                                 ` Alan Stern
2009-12-10 15:45                                                                   ` Linus Torvalds
2009-12-10 18:37                                                                     ` Alan Stern
2009-12-10 23:51                                                                       ` Linus Torvalds
2009-12-10 21:14                                                                   ` Rafael J. Wysocki
2009-12-10 22:17                                                                     ` Alan Stern
2009-12-10 23:45                                                                       ` Rafael J. Wysocki
2009-12-07 15:15                   ` [GIT PULL] PM updates for 2.6.33 Rafael J. Wysocki
2009-12-07 16:37                     ` Linus Torvalds
2009-12-07 20:47                       ` Rafael J. Wysocki
2009-12-07 20:56                         ` Linus Torvalds
2009-12-07  5:20               ` Linus Torvalds
2009-12-07 15:42                 ` Alan Stern
2009-12-06 19:35             ` Arjan van de Ven
2009-12-06 19:58               ` Linus Torvalds
2009-12-06 20:18                 ` Arjan van de Ven
2009-12-06 21:08                   ` Linus Torvalds
2009-12-06 22:54                   ` Dmitry Torokhov
2009-12-07  0:55                     ` Arjan van de Ven
2009-12-07  2:27                       ` Dmitry Torokhov
2009-12-07  5:26                         ` Arjan van de Ven
2009-12-07  6:00                           ` Dmitry Torokhov
2009-12-21  9:01                             ` Pavel Machek
2009-12-07  1:18                     ` Arjan van de Ven
2009-12-07  2:27                       ` Dmitry Torokhov
2009-12-07  5:31                         ` Arjan van de Ven
2009-12-07  6:15                           ` Dmitry Torokhov
2009-12-07  6:31                             ` Arjan van de Ven
2009-12-07  6:32                               ` Dmitry Torokhov
2009-12-07 15:17                                 ` Rafael J. Wysocki
2009-12-06 20:36               ` Alan Stern
2009-12-06 21:17                 ` Arjan van de Ven
2009-12-06 21:46                   ` Alan Stern
2009-12-06 21:57                     ` Arjan van de Ven
2009-12-06 22:04                       ` Alan Stern
2009-12-06  0:29   ` Rafael J. Wysocki
2009-12-06  0:52     ` Linus Torvalds
2009-12-06  1:24       ` Rafael J. Wysocki
2009-12-06  1:50         ` Linus Torvalds

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.LFD.2.00.0912081339040.3560@localhost.localdomain \
    --to=torvalds@linux-foundation.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@lists.linux-foundation.org \
    --cc=rjw@sisk.pl \
    --cc=rui.zhang@intel.com \
    --cc=stern@rowland.harvard.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox