All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Marciniszyn, Mike" <mike.marciniszyn@intel.com>
To: Jason Gunthorpe <jgg@ziepe.ca>
Cc: "Dalessandro, Dennis" <dennis.dalessandro@intel.com>,
	"dledford@redhat.com" <dledford@redhat.com>,
	"linux-rdma@vger.kernel.org" <linux-rdma@vger.kernel.org>,
	"Wan, Kaike" <kaike.wan@intel.com>
Subject: RE: [PATCH for-rc] IB/hfi1: Insure pq is not left on waitlist
Date: Fri, 20 Mar 2020 00:26:32 +0000	[thread overview]
Message-ID: <BY5PR11MB3958128AA68368EBC40F91D786F50@BY5PR11MB3958.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20200319220403.GN20941@ziepe.ca>

> Subject: Re: [PATCH for-rc] IB/hfi1: Insure pq is not left on waitlist
> 
> On Thu, Mar 19, 2020 at 09:46:54PM +0000, Marciniszyn, Mike wrote:
> > > Subject: Re: [PATCH for-rc] IB/hfi1: Insure pq is not left on waitlist
> > >
> > > The only place that uses seqlock in infiniband is in hfi1
> > >
> > > It only calls seqlock_init and write_seqlock
> > >
> > > Never read_seqlock
> >
> > The sdma code uses read_seqbegin() and read_seq_retry() to avoid the
> spin
> > that is in that is in read_seqlock().
> 
> Hm, I see.. I did not find these uses when I was grepping, but now I'm
> even less happy with this :(
> 
> > The two calls together allow for detecting a race where the
> > interrupt handler detects if the base level submit routines
> > have enqueued to a waiter list due to a descriptor shortage
> > concurrently with the this interrupt handler.
> 
> You can't use read seqlock to protect a linked list when the write
> side is doing list_del. It is just wrong.
> 

It is not actually doing that.   The lock only protects the list_empty().

> > The full write_seqlock() is gotten when the list is not empty and the
> > req_seq_retry() detects when a list entry might have been added.
> 
> A write side inside a read_side? It is maddness.
> 
> > SDMA interrupts frequently encounter no waiters, so the lock only slows
> > down the interrupt handler.
> 
> So, if you don't care about the race with adding then just use
> list_empty with no lock and then a normal spin lock
> 

So are you suggesting the list_empty() can be uncontrolled?

Perhaps list_empty_careful() is a better choice?

> All this readlock stuff doesn't remove any races.
> 
> > > Please clean this mess too.
> >
> > The APIs associated with SDMA and iowait are pretty loose and we
> > will clean the up in a subsequent patch series.  The nature of the locking
> > should not bleed out to the client code of SDMA.   We will adjust the
> > commit message to indicate this.
> 
> So what is the explanation here? This uses a write seqlock for a
> linked list but it is OK because nothing uses the read side except to
> do list_empty, which is unnecessary, and will be fixed later?
> 

I suggest we fix the bug and submit a follow-up to clean the locking up and
the open coding.

The patch footprint would probably be too large for stable as a single patch.

Mike



  reply	other threads:[~2020-03-20  0:26 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-17 16:05 [PATCH for-rc] IB/hfi1: Insure pq is not left on waitlist Dennis Dalessandro
2020-03-18 23:49 ` Jason Gunthorpe
2020-03-19 21:46   ` Marciniszyn, Mike
2020-03-19 22:04     ` Jason Gunthorpe
2020-03-20  0:26       ` Marciniszyn, Mike [this message]
2020-03-20  0:31         ` Jason Gunthorpe

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=BY5PR11MB3958128AA68368EBC40F91D786F50@BY5PR11MB3958.namprd11.prod.outlook.com \
    --to=mike.marciniszyn@intel.com \
    --cc=dennis.dalessandro@intel.com \
    --cc=dledford@redhat.com \
    --cc=jgg@ziepe.ca \
    --cc=kaike.wan@intel.com \
    --cc=linux-rdma@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.