From: Michael Ellerman <michael@ellerman.id.au>
To: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Frans Pop <elendil@planet.nl>,
rjw@sisk.pl, jbarnes@virtuousgeek.org,
linux-pm@lists.linux-foundation.org,
linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org
Subject: Re: [PATCH 3/7] PCI PM: Fix saving of device state in pci_legacy_suspend
Date: Thu, 05 Feb 2009 13:58:10 +1100 [thread overview]
Message-ID: <1233802690.15714.25.camel@localhost> (raw)
In-Reply-To: <1233797363.4612.49.camel@pasglop>
[-- Attachment #1: Type: text/plain, Size: 4055 bytes --]
On Thu, 2009-02-05 at 12:29 +1100, Benjamin Herrenschmidt wrote:
> > > Yup, missed that change in the patch. In fact, I even missed the
> > > existence of a WARN_ONCE that takes those text arguments... baaaah. I
> > > suppose I should try to read more of lkml :-)
> >
> > But don't expect to see them on powerpc, they never make it to the
> > console.
>
> Allright, that's the problem with our implementation of WARN using a
> conditional trap, we don't carry all the variable arguments for the
> printf over.
>
> I'm tempted to turn our implementation back to normal C code with an if
> and a branch out of line, but Michael seems to say that even with
> appropriate use of unlikely() etc... gcc decides to generate the worst
> possible code every single time ...
>
> <rant>
> such as always inlining the whole printf mumbo jumbo and having the
> not-warning case branch over it, not -all- CPUs have good branch
> prediction dude, so the icache is going to scream but gcc folks know
> better of course....
> </rant>
>
> Anyway, I'll see Michael what exactly the situation is here and if we
> can fix it a way or another.
Well I'm glad you listened to me when I told you not to fire off a rant
email before I had another look at it ;)
Because Arjan has patched the generic bug.h so that we at least get the
printk on powerpc, and then use our version of __WARN().
So you should see the message at least.
As far as the code gen, with gcc 4.3.1 (debian).
WARN looks like:
#define WARN(condition, format...) ({ \
int __ret_warn_on = !!(condition); \
if (unlikely(__ret_warn_on)) \
__WARN_printf(format); \
unlikely(__ret_warn_on); \
})
Called from:
int smp_request_message_ipi(int virq, int msg)
{
int err;
...
err = request_irq(virq, smp_ipi_action[msg], IRQF_DISABLED|IRQF_PERCPU,
smp_ipi_name[msg], 0);
WARN(err < 0, "unable to request_irq %d for %s (rc %d)\n",
virq, smp_ipi_name[msg], err);
return err;
}
Comes out as:
c00000000002c9e8: 48 0a 88 c9 bl c0000000000d52b0 <.request_irq>
c00000000002c9ec: 60 00 00 00 nop
c00000000002c9f0: 2f 83 00 00 cmpwi cr7,r3,0
c00000000002c9f4: 7c 7f 1b 78 mr r31,r3
c00000000002c9f8: 40 bc 00 20 bge+ cr7,c00000000002ca18 <.smp_request_message_ipi+0x84>
c00000000002c9fc: 7c bc e8 2a ldx r5,r28,r29
c00000000002ca00: e8 7e 80 d0 ld r3,-32560(r30)
c00000000002ca04: 7f 64 db 78 mr r4,r27
c00000000002ca08: 7f e6 fb 78 mr r6,r31
c00000000002ca0c: 48 5f 53 7d bl c000000000621d88 <.printk>
c00000000002ca10: 60 00 00 00 nop
c00000000002ca14: 0f e0 00 00 twi 31,r0,0
c00000000002ca18: 38 21 00 a0 addi r1,r1,160
c00000000002ca1c: 7f e3 fb 78 mr r3,r31
c00000000002ca20: e8 01 00 10 ld r0,16(r1)
c00000000002ca24: eb 61 ff d8 ld r27,-40(r1)
c00000000002ca28: eb 81 ff e0 ld r28,-32(r1)
c00000000002ca2c: eb a1 ff e8 ld r29,-24(r1)
c00000000002ca30: eb c1 ff f0 ld r30,-16(r1)
c00000000002ca34: eb e1 ff f8 ld r31,-8(r1)
c00000000002ca38: 7c 08 03 a6 mtlr r0
c00000000002ca3c: 4e 80 00 20 blr
So it's jumping over the if body, rather than moving it out of the
straight line. It is hinting it right, so we should check if that helps
us at all.
cheers
--
Michael Ellerman
OzLabs, IBM Australia Development Lab
wwweb: http://michael.ellerman.id.au
phone: +61 2 6212 1183 (tie line 70 21183)
We do not inherit the earth from our ancestors,
we borrow it from our children. - S.M.A.R.T Person
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 197 bytes --]
next prev parent reply other threads:[~2009-02-05 2:58 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-04 0:54 [PATCH 0/7] PCI PM: Fixes and refinements Rafael J. Wysocki
2009-02-04 0:56 ` [PATCH 1/7] PCI PM: Fix handling of devices without drivers Rafael J. Wysocki
2009-02-04 1:53 ` Benjamin Herrenschmidt
2009-02-04 2:23 ` Linus Torvalds
2009-02-04 2:49 ` Benjamin Herrenschmidt
2009-02-04 12:12 ` Rafael J. Wysocki
2009-02-04 12:10 ` Rafael J. Wysocki
2009-02-04 0:57 ` [PATCH 2/7] PCI PM: Check if the state has been saved before trying to restore it Rafael J. Wysocki
2009-02-04 1:54 ` Benjamin Herrenschmidt
2009-02-04 0:59 ` [PATCH 3/7] PCI PM: Fix saving of device state in pci_legacy_suspend Rafael J. Wysocki
2009-02-04 1:56 ` Benjamin Herrenschmidt
2009-02-04 10:14 ` Frans Pop
2009-02-04 21:38 ` Benjamin Herrenschmidt
2009-02-04 21:53 ` Frans Pop
2009-02-04 21:56 ` Linus Torvalds
2009-02-05 0:40 ` Benjamin Herrenschmidt
2009-02-05 0:57 ` Michael Ellerman
2009-02-05 1:29 ` Benjamin Herrenschmidt
2009-02-05 2:58 ` Michael Ellerman [this message]
2009-02-05 4:06 ` Benjamin Herrenschmidt
2009-02-04 1:00 ` [PATCH 4/7] PCI PCIe portdrv: Simplify suspend and resume Rafael J. Wysocki
2009-02-04 1:01 ` [PATCH 5/7] PCI PM: Do not disable and enable bridges during suspend-resume Rafael J. Wysocki
2009-02-04 1:02 ` [PATCH 6/7] PCI PM: Read power state from device after trying to change it on resume Rafael J. Wysocki
2009-02-04 1:09 ` [PATCH 7/7] PCI PM: Let the core be more careful with respect to drivers using new framework Rafael J. Wysocki
2009-02-04 2:05 ` Benjamin Herrenschmidt
2009-02-05 0:47 ` Rafael J. Wysocki
2009-02-05 1:18 ` Benjamin Herrenschmidt
2009-02-05 1:23 ` [PATCH 0/7] PCI PM: Fixes and refinements Jesse Barnes
2009-02-05 1:48 ` Rafael J. Wysocki
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=1233802690.15714.25.camel@localhost \
--to=michael@ellerman.id.au \
--cc=benh@kernel.crashing.org \
--cc=elendil@planet.nl \
--cc=jbarnes@virtuousgeek.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-pm@lists.linux-foundation.org \
--cc=rjw@sisk.pl \
--cc=torvalds@linux-foundation.org \
/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