From: Andrea Parri <andrea.parri@amarulasolutions.com>
To: Michael Ellerman <mpe@ellerman.id.au>
Cc: Petr Mladek <pmladek@suse.com>,
linuxppc-dev@ozlabs.org, akpm@linux-foundation.org,
tj@kernel.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org, dyoung@redhat.com,
sergey.senozhatsky@gmail.com,
Steven Rostedt <rostedt@goodmis.org>
Subject: Re: [PATCH v3 1/7] dump_stack: Support adding to the dump stack arch description
Date: Wed, 20 Feb 2019 14:44:33 +0100 [thread overview]
Message-ID: <20190220134433.GA4932@andrea> (raw)
In-Reply-To: <87va1e7pw2.fsf@concordia.ellerman.id.au>
> >> > > + * Order the stores above in vsnprintf() vs the store of the
> >> > > + * space below which joins the two strings. Note this doesn't
> >> > > + * make the code truly race free because there is no barrier on
> >> > > + * the read side. ie. Another CPU might load the uninitialised
> >> > > + * tail of the buffer first and then the space below (rather
> >> > > + * than the NULL that was there previously), and so print the
> >> > > + * uninitialised tail. But the whole string lives in BSS so in
> >> > > + * practice it should just see NULLs.
> >> >
> >> > The comment doesn't say _why_ we need to order these stores: IOW, what
> >> > will or can go wrong without this order? This isn't clear to me.
> >> >
> >> > Another good practice when adding smp_*-constructs (as discussed, e.g.,
> >> > at KS'18) is to indicate the matching construct/synch. mechanism.
> >>
> >> Yes, one barrier without a counter-part is suspicious.
> >
> > As is this silence...,
> >
> > Michael, what happened to this patch? did you submit a new version?
>
> No, I'm just busy, it's the merge window next week :)
Got it.
>
> I thought the comment was pretty clear, if the stores are observed out
> of order we might print the uninitialised tail.
>
> And the barrier on the read side would need to be in printk somewhere,
> which is obviously unpleasant.
Indeed.
>
> >> If the parallel access is really needed then we could define the
> >> current length as atomic_t and use:
> >>
> >> + atomic_cmpxchg() to reserve the space for the string
> >> + %*s to limit the printed length
> >>
> >> In the worst case, we would print an incomplete string.
> >> See below for a sample code.
> >
> > Seems worth exploring, IMO; but I'd like to first hear _clear about
> > the _intended semantics (before digging into alternatives)...
>
> It is not my intention to support concurrent updates of the string. The
> idea is you setup the string early in boot.
Understood, thanks for the clarification.
>
> The concern with a concurrent reader is simply that the string is dumped
> in the panic path, and you never really know when you're going to panic.
> Even if you only write to the string before doing SMP bringup you might
> still have another CPU go rogue and panic before then.
>
> But I probably should have just not added the barrier, it's over
> paranoid and will almost certainly never matter in practice.
Oh, well, I can only echo you: if you don't care about the stores being
_observed_ out of order, you could simply remove the barrier; if you do
care, then you need "more paranoid" on the readers side. ;-)
Andrea
>
> cheers
WARNING: multiple messages have this Message-ID (diff)
From: Andrea Parri <andrea.parri@amarulasolutions.com>
To: Michael Ellerman <mpe@ellerman.id.au>
Cc: linux-arch@vger.kernel.org, Petr Mladek <pmladek@suse.com>,
sergey.senozhatsky@gmail.com, linux-kernel@vger.kernel.org,
Steven Rostedt <rostedt@goodmis.org>,
linuxppc-dev@ozlabs.org, tj@kernel.org,
akpm@linux-foundation.org, dyoung@redhat.com
Subject: Re: [PATCH v3 1/7] dump_stack: Support adding to the dump stack arch description
Date: Wed, 20 Feb 2019 14:44:33 +0100 [thread overview]
Message-ID: <20190220134433.GA4932@andrea> (raw)
In-Reply-To: <87va1e7pw2.fsf@concordia.ellerman.id.au>
> >> > > + * Order the stores above in vsnprintf() vs the store of the
> >> > > + * space below which joins the two strings. Note this doesn't
> >> > > + * make the code truly race free because there is no barrier on
> >> > > + * the read side. ie. Another CPU might load the uninitialised
> >> > > + * tail of the buffer first and then the space below (rather
> >> > > + * than the NULL that was there previously), and so print the
> >> > > + * uninitialised tail. But the whole string lives in BSS so in
> >> > > + * practice it should just see NULLs.
> >> >
> >> > The comment doesn't say _why_ we need to order these stores: IOW, what
> >> > will or can go wrong without this order? This isn't clear to me.
> >> >
> >> > Another good practice when adding smp_*-constructs (as discussed, e.g.,
> >> > at KS'18) is to indicate the matching construct/synch. mechanism.
> >>
> >> Yes, one barrier without a counter-part is suspicious.
> >
> > As is this silence...,
> >
> > Michael, what happened to this patch? did you submit a new version?
>
> No, I'm just busy, it's the merge window next week :)
Got it.
>
> I thought the comment was pretty clear, if the stores are observed out
> of order we might print the uninitialised tail.
>
> And the barrier on the read side would need to be in printk somewhere,
> which is obviously unpleasant.
Indeed.
>
> >> If the parallel access is really needed then we could define the
> >> current length as atomic_t and use:
> >>
> >> + atomic_cmpxchg() to reserve the space for the string
> >> + %*s to limit the printed length
> >>
> >> In the worst case, we would print an incomplete string.
> >> See below for a sample code.
> >
> > Seems worth exploring, IMO; but I'd like to first hear _clear about
> > the _intended semantics (before digging into alternatives)...
>
> It is not my intention to support concurrent updates of the string. The
> idea is you setup the string early in boot.
Understood, thanks for the clarification.
>
> The concern with a concurrent reader is simply that the string is dumped
> in the panic path, and you never really know when you're going to panic.
> Even if you only write to the string before doing SMP bringup you might
> still have another CPU go rogue and panic before then.
>
> But I probably should have just not added the barrier, it's over
> paranoid and will almost certainly never matter in practice.
Oh, well, I can only echo you: if you don't care about the stores being
_observed_ out of order, you could simply remove the barrier; if you do
care, then you need "more paranoid" on the readers side. ;-)
Andrea
>
> cheers
next prev parent reply other threads:[~2019-02-20 13:44 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-07 12:46 [PATCH v3 1/7] dump_stack: Support adding to the dump stack arch description Michael Ellerman
2019-02-07 12:46 ` Michael Ellerman
2019-02-07 12:46 ` [PATCH v3 2/7] powerpc: Add PVR & CPU name to " Michael Ellerman
2019-02-07 12:46 ` Michael Ellerman
2019-02-07 12:46 ` [PATCH v3 3/7] powerpc/64: Add logical PVR to the " Michael Ellerman
2019-02-07 12:46 ` Michael Ellerman
2019-02-07 12:46 ` [PATCH v3 4/7] powerpc: Add device-tree model to " Michael Ellerman
2019-02-07 12:46 ` Michael Ellerman
2019-02-07 12:46 ` [PATCH v3 5/7] powerpc: Add ppc_md.name " Michael Ellerman
2019-02-07 12:46 ` Michael Ellerman
2019-02-07 12:46 ` [PATCH v3 6/7] powerpc/powernv: Add opal details " Michael Ellerman
2019-02-07 12:46 ` Michael Ellerman
2019-02-07 12:46 ` [PATCH v3 7/7] powerpc/pseries: Add firmware " Michael Ellerman
2019-02-07 12:46 ` Michael Ellerman
2019-02-08 2:01 ` [PATCH v3 1/7] dump_stack: Support adding to the " Sergey Senozhatsky
2019-02-08 2:01 ` Sergey Senozhatsky
2019-02-08 18:55 ` Steven Rostedt
2019-02-08 18:55 ` Steven Rostedt
2019-02-11 7:55 ` Sergey Senozhatsky
2019-02-11 7:55 ` Sergey Senozhatsky
2019-02-11 12:50 ` Andrea Parri
2019-02-11 12:50 ` Andrea Parri
2019-02-11 14:38 ` Petr Mladek
2019-02-11 14:38 ` Petr Mladek
2019-02-19 23:39 ` Andrea Parri
2019-02-19 23:39 ` Andrea Parri
2019-02-20 9:47 ` Michael Ellerman
2019-02-20 9:47 ` Michael Ellerman
2019-02-20 13:44 ` Andrea Parri [this message]
2019-02-20 13:44 ` Andrea Parri
2019-02-21 8:38 ` Petr Mladek
2019-02-21 8:38 ` Petr Mladek
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=20190220134433.GA4932@andrea \
--to=andrea.parri@amarulasolutions.com \
--cc=akpm@linux-foundation.org \
--cc=dyoung@redhat.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=pmladek@suse.com \
--cc=rostedt@goodmis.org \
--cc=sergey.senozhatsky@gmail.com \
--cc=tj@kernel.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 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.