All of lore.kernel.org
 help / color / mirror / Atom feed
From: <haozhong.zhang@intel.com>
To: Jan Beulich <jbeulich@suse.com>
Cc: andrew.cooper3@citrix.com, xen-devel@lists.xen.org
Subject: Re: [PATCH v4 03/11] x86/mce: handle host LMCE
Date: Thu, 29 Jun 2017 11:29:11 +0800	[thread overview]
Message-ID: <20170629032911.hyftah3t2x7q4jll@hz-desktop> (raw)
In-Reply-To: <5952058D0200007800101401@prv-mh.provo.novell.com>

On 06/27/17 01:13 -0600, Jan Beulich wrote:
> >>> Haozhong Zhang <haozhong.zhang@intel.com> 06/26/17 11:17 AM >>>
> >+/**
> >+ * Append a telemetry of deferred MCE to a per-cpu pending list,
> >+ * either @pending or @lmce_pending, according to rules below:
> >+ *  - if @pending is not empty, then the new telemetry will be
> >+ *    appended to @pending;
> >+ *  - if @pending is empty and the new telemetry is for a deferred
> >+ *    LMCE, then the new telemetry will be appended to @lmce_pending;
> >+ *  - if @pending is empty and the new telemetry is for a deferred
> >+ *    non-local MCE, all existing telemetries in @lmce_pending will be
> >+ *    moved to @pending and then the new telemetry will be appended to
> >+ *    @pending.
> >+ *
> >+ * This function must be called with MCIP bit set, so that it does not
> >+ * need to worry about MC# re-occurring in this function.
> >+ *
> >+ * As a result, this function can preserve the mutual exclusivity
> >+ * between @pending and @lmce_pending (see their comments in struct
> >+ * mc_telem_cpu_ctl).
> >+ *
> >+ * Parameters:
> >+ *  @cookie: telemetry of the deferred MCE
> >+ *  @lmce:   indicate whether the telemetry is for LMCE
> >+ */
> >+void mctelem_defer(mctelem_cookie_t cookie, bool lmce)
>  >{
>  	>struct mctelem_ent *tep = COOKIE2MCTE(cookie);
> >-
> >-	mctelem_xchg_head(&this_cpu(mctctl.pending), &tep->mcte_next, tep);
> >+	struct mc_telem_cpu_ctl *mctctl = &this_cpu(mctctl);
> >+
> >+	ASSERT(mctctl->pending == NULL || mctctl->lmce_pending == NULL);
> >+
> >+	if (mctctl->pending)
> >+		mctelem_xchg_head(&mctctl->pending, &tep->mcte_next, tep);
> >+	else if (lmce)
> >+		mctelem_xchg_head(&mctctl->lmce_pending, &tep->mcte_next, tep);
> >+	else {
> >+		if (mctctl->lmce_pending)
> >+			mctelem_xchg_head(&mctctl->lmce_pending,
> >+					  &mctctl->pending, NULL);
> 
> I don't think this is sufficiently proven to be safe: This may set ->pending to
> non-NULL more than once, and while your comment above considers the
> producer side, it doesn't consider the consumer(s). This is even more so that
> the consumer side uses potentially stale information to tell which list head to
> update.

What problems do you think will be caused by setting ->pending to
non-NULL more than once? The only such case is the last else branch:
it corresponds to a broadcasting MC#, so all CPUs are in the exception
context and no one is consuming ->pending at this moment.

Haozhong


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

  reply	other threads:[~2017-06-29  3:29 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-26  9:16 [PATCH v4 00/11] Add LMCE support Haozhong Zhang
2017-06-26  9:16 ` [PATCH v4 01/11] xen/mce: fix comment of struct mc_telem_cpu_ctl Haozhong Zhang
2017-06-27  6:28   ` Jan Beulich
2017-06-29  1:56     ` haozhong.zhang
2017-06-26  9:16 ` [PATCH v4 02/11] xen/mce: allow mce_barrier_{enter, exit} to return without waiting Haozhong Zhang
2017-06-27  6:38   ` Jan Beulich
2017-06-29  2:00     ` haozhong.zhang
2017-06-26  9:16 ` [PATCH v4 03/11] x86/mce: handle host LMCE Haozhong Zhang
2017-06-27  7:13   ` Jan Beulich
2017-06-29  3:29     ` haozhong.zhang [this message]
2017-06-29  6:29       ` Jan Beulich
2017-06-26  9:16 ` [PATCH v4 04/11] x86/mce_intel: detect and enable LMCE on Intel host Haozhong Zhang
2017-06-26  9:16 ` [PATCH v4 05/11] x86/vmx: expose LMCE feature via guest MSR_IA32_FEATURE_CONTROL Haozhong Zhang
2017-06-26  9:16 ` [PATCH v4 06/11] x86/vmce: emulate MSR_IA32_MCG_EXT_CTL Haozhong Zhang
2017-06-26  9:16 ` [PATCH v4 07/11] x86/vmce: enable injecting LMCE to guest on Intel host Haozhong Zhang
2017-06-26  9:16 ` [PATCH v4 08/11] x86/vmce, tools/libxl: expose LMCE capability in guest MSR_IA32_MCG_CAP Haozhong Zhang
2017-06-29 13:02   ` Wei Liu
2017-06-26  9:16 ` [PATCH v4 09/11] xen/mce: add support of vLMCE injection to XEN_MC_inject_v2 Haozhong Zhang
2017-06-26  9:16 ` [PATCH v4 10/11] tools/libxc: add support of injecting MC# to specified CPUs Haozhong Zhang
2017-06-26  9:16 ` [PATCH v4 11/11] tools/xen-mceinj: add support of injecting LMCE Haozhong Zhang

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=20170629032911.hyftah3t2x7q4jll@hz-desktop \
    --to=haozhong.zhang@intel.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=jbeulich@suse.com \
    --cc=xen-devel@lists.xen.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.