From: James Bottomley <James.Bottomley@HansenPartnership.com>
To: Matthew Wilcox <matthew@wil.cx>
Cc: "Moore, Eric" <Eric.Moore@lsi.com>,
"Nandigama, Nagalakshmi" <Nagalakshmi.Nandigama@lsi.com>,
"stable@vger.kernel.org" <stable@vger.kernel.org>,
"linux-scsi@vger.kernel.org" <linux-scsi@vger.kernel.org>,
"Prakash, Sathya" <Sathya.Prakash@lsi.com>,
"jejb@kernel.org" <jejb@kernel.org>
Subject: Re: [PATCH] [SCSI] mpt2sas : Fix unsafe using smp_processor_id() in preemptible
Date: Fri, 20 Apr 2012 15:07:57 +0400 [thread overview]
Message-ID: <1334920077.5879.28.camel@dabdike> (raw)
In-Reply-To: <20120418041359.GB10862@parisc-linux.org>
On Tue, 2012-04-17 at 22:13 -0600, Matthew Wilcox wrote:
> On Tue, Apr 17, 2012 at 09:35:49PM -0600, Moore, Eric wrote:
> > Jan Schmidt suggested using raw_smp_processor_id() back in February, see this: http://marc.info/?t=132974687100003&r=1&w=2
> >
> > Alex Shi recently suggested using preempt_disable() and preempt_enable() to solve the same issue, see this: http://marc.info/?t=133274303900003&r=1&w=2
> >
> > I believe the stack traces are there in both email discussion, they occur when CONFIG_DEBUG_PREEMPT is enabled.
> >
> > I would rather go with the solution giving the best performance. James Bottomley is there on the discussion with Jan Schmidt, he suggested using get_cpu() and put_cpu().
>
> I use get_cpu() / put_cpu() in the NVMe driver in similar circumstances.
> It's not noticable in the profiles :-)
>
> Where my usage differs from the patch for mpt2sas is that I hold a
> reference to the CPU over the submission. This works out well for
> me because I have per-CPU state. Might be worth considering for your
> driver ...
Right, so in this case mpt2sas doesn't care. It literally only needs a
notion of the current CPU for cache hotness of MSI queue return. It
doesn't need pinning or anything else. I think the use of
raw_smp_processor_id() in this instance is ideal, because it actually is
a "need to think about how to do this better" flag, which may mean
actually doing it in a more per-CPU state type way.
Mind you, something like
cpu = get_cpu(); put_cpu();
Is also an instant smack in the eyeballs too because it looks so daft,
so I'm not incredibly bothered. I lean towards raw_smp_processor_id()
because it's what's actually wanted, but not strongly.
James
next prev parent reply other threads:[~2012-04-20 11:08 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-17 5:55 [PATCH] [SCSI] mpt2sas : Fix unsafe using smp_processor_id() in preemptible nagalakshmi.nandigama
2012-04-18 3:14 ` Matthew Wilcox
2012-04-18 3:35 ` Moore, Eric
2012-04-18 4:13 ` Matthew Wilcox
2012-04-20 11:00 ` [PATCH] [SCSI] mpt2sas : Fix unsafe using smp_processor_id() inpreemptible Nandigama, Nagalakshmi
2012-04-23 1:29 ` Alex Shi
2012-04-20 11:07 ` James Bottomley [this message]
2012-04-27 10:39 ` [PATCH] [SCSI] mpt2sas : Fix unsafe using smp_processor_id() in preemptible Nandigama, Nagalakshmi
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=1334920077.5879.28.camel@dabdike \
--to=james.bottomley@hansenpartnership.com \
--cc=Eric.Moore@lsi.com \
--cc=Nagalakshmi.Nandigama@lsi.com \
--cc=Sathya.Prakash@lsi.com \
--cc=jejb@kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=matthew@wil.cx \
--cc=stable@vger.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.