All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joerg Roedel <joro@8bytes.org>
To: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org,
	tglx@linutronix.de
Subject: Re: [PATCH 05/10] iommu/amd: remove the special case from get_irq_table()
Date: Thu, 15 Mar 2018 14:07:23 +0100	[thread overview]
Message-ID: <20180315130723.dunmpmbkswwvq54g@8bytes.org> (raw)
In-Reply-To: <20180315130153.3ba2loj5oplogdew@linutronix.de>

On Thu, Mar 15, 2018 at 02:01:53PM +0100, Sebastian Andrzej Siewior wrote:
> On 2018-03-15 13:53:42 [+0100], Joerg Roedel wrote:
> > On Fri, Feb 23, 2018 at 11:27:31PM +0100, Sebastian Andrzej Siewior wrote:
> > > @@ -4103,10 +4093,26 @@ static int irq_remapping_alloc(struct irq_domain *domain, unsigned int virq,
> > >  		return ret;
> > >  
> > >  	if (info->type == X86_IRQ_ALLOC_TYPE_IOAPIC) {
> > > -		if (get_irq_table(devid, true))
> > > +		struct irq_remap_table *table;
> > > +		struct amd_iommu *iommu;
> > > +
> > > +		table = get_irq_table(devid);
> > > +		if (table) {
> > > +			if (!table->min_index) {
> > > +				/*
> > > +				 * Keep the first 32 indexes free for IOAPIC
> > > +				 * interrupts.
> > > +				 */
> > > +				table->min_index = 32;
> > > +				iommu = amd_iommu_rlookup_table[devid];
> > > +				for (i = 0; i < 32; ++i)
> > > +					iommu->irte_ops->set_allocated(table, i);
> > > +			}
> > 
> > I think this needs to be protected by the table->lock.
> 
> Which part any why? The !->min_index part plus extending(setting to 32)?

In particular the set_allocated part, when get_irq_table() returns the
table is visible to other users as well. I have not checked the
irq-layer locking to be sure that can happen, though.

WARNING: multiple messages have this Message-ID (diff)
From: Joerg Roedel <joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>
To: Sebastian Andrzej Siewior
	<bigeasy-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>
Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
	tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH 05/10] iommu/amd: remove the special case from get_irq_table()
Date: Thu, 15 Mar 2018 14:07:23 +0100	[thread overview]
Message-ID: <20180315130723.dunmpmbkswwvq54g@8bytes.org> (raw)
In-Reply-To: <20180315130153.3ba2loj5oplogdew-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>

On Thu, Mar 15, 2018 at 02:01:53PM +0100, Sebastian Andrzej Siewior wrote:
> On 2018-03-15 13:53:42 [+0100], Joerg Roedel wrote:
> > On Fri, Feb 23, 2018 at 11:27:31PM +0100, Sebastian Andrzej Siewior wrote:
> > > @@ -4103,10 +4093,26 @@ static int irq_remapping_alloc(struct irq_domain *domain, unsigned int virq,
> > >  		return ret;
> > >  
> > >  	if (info->type == X86_IRQ_ALLOC_TYPE_IOAPIC) {
> > > -		if (get_irq_table(devid, true))
> > > +		struct irq_remap_table *table;
> > > +		struct amd_iommu *iommu;
> > > +
> > > +		table = get_irq_table(devid);
> > > +		if (table) {
> > > +			if (!table->min_index) {
> > > +				/*
> > > +				 * Keep the first 32 indexes free for IOAPIC
> > > +				 * interrupts.
> > > +				 */
> > > +				table->min_index = 32;
> > > +				iommu = amd_iommu_rlookup_table[devid];
> > > +				for (i = 0; i < 32; ++i)
> > > +					iommu->irte_ops->set_allocated(table, i);
> > > +			}
> > 
> > I think this needs to be protected by the table->lock.
> 
> Which part any why? The !->min_index part plus extending(setting to 32)?

In particular the set_allocated part, when get_irq_table() returns the
table is visible to other users as well. I have not checked the
irq-layer locking to be sure that can happen, though.

  reply	other threads:[~2018-03-15 13:07 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-23 22:27 iommu/amd: lock splitting & GFP_KERNEL allocation Sebastian Andrzej Siewior
2018-02-23 22:27 ` Sebastian Andrzej Siewior
2018-02-23 22:27 ` [PATCH 01/10] iommu/amd: take into account that alloc_dev_data() may return NULL Sebastian Andrzej Siewior
2018-02-23 22:27   ` Sebastian Andrzej Siewior
2018-02-23 22:27 ` [PATCH 02/10] iommu/amd: turn dev_data_list into a lock less list Sebastian Andrzej Siewior
2018-02-23 22:27   ` Sebastian Andrzej Siewior
2018-02-23 22:27 ` [PATCH 03/10] iommu/amd: split domain id out of amd_iommu_devtable_lock Sebastian Andrzej Siewior
2018-02-23 22:27   ` Sebastian Andrzej Siewior
2018-02-23 22:27 ` [PATCH 04/10] iommu/amd: split irq_lookup_table out of the amd_iommu_devtable_lock Sebastian Andrzej Siewior
2018-02-23 22:27   ` Sebastian Andrzej Siewior
2018-03-15 12:54   ` Joerg Roedel
2018-03-15 12:54     ` Joerg Roedel
2018-02-23 22:27 ` [PATCH 05/10] iommu/amd: remove the special case from get_irq_table() Sebastian Andrzej Siewior
2018-02-23 22:27   ` Sebastian Andrzej Siewior
2018-03-15 12:53   ` Joerg Roedel
2018-03-15 13:01     ` Sebastian Andrzej Siewior
2018-03-15 13:01       ` Sebastian Andrzej Siewior
2018-03-15 13:07       ` Joerg Roedel [this message]
2018-03-15 13:07         ` Joerg Roedel
2018-03-15 14:15         ` Sebastian Andrzej Siewior
2018-03-15 14:15           ` Sebastian Andrzej Siewior
2018-03-15 15:19           ` Joerg Roedel
2018-03-15 15:19             ` Joerg Roedel
2018-03-15 15:25             ` Sebastian Andrzej Siewior
2018-03-15 15:25               ` Sebastian Andrzej Siewior
2018-02-23 22:27 ` [PATCH 06/10] iommu/amd: use `table' instead `irt' as variable name in amd_iommu_update_ga() Sebastian Andrzej Siewior
2018-02-23 22:27   ` Sebastian Andrzej Siewior
2018-02-23 22:27 ` [PATCH 07/10] iommu/amd: factor out setting the remap table for a devid Sebastian Andrzej Siewior
2018-02-23 22:27   ` Sebastian Andrzej Siewior
2018-02-23 22:27 ` [PATCH 08/10] iommu/amd: drop the lock while allocating new irq remap table Sebastian Andrzej Siewior
2018-02-23 22:27   ` Sebastian Andrzej Siewior
2018-03-15 12:58   ` Joerg Roedel
2018-03-15 12:58     ` Joerg Roedel
2018-02-23 22:27 ` [PATCH 09/10] iommu/amd: declare irq_remap_table's and amd_iommu's lock as a raw_spin_lock Sebastian Andrzej Siewior
2018-02-23 22:27   ` Sebastian Andrzej Siewior
2018-02-23 22:27 ` [PATCH 10/10] iommu/amd: make amd_iommu_devtable_lock a spin_lock Sebastian Andrzej Siewior
2018-02-23 22:27   ` Sebastian Andrzej Siewior
2018-03-15 13:01 ` iommu/amd: lock splitting & GFP_KERNEL allocation Joerg Roedel
2018-03-15 13:01   ` Joerg Roedel

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=20180315130723.dunmpmbkswwvq54g@8bytes.org \
    --to=joro@8bytes.org \
    --cc=bigeasy@linutronix.de \
    --cc=iommu@lists.linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tglx@linutronix.de \
    /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.