Skip to content

Commit 63984ea

Browse files
covanambjorn-helgaas
authored andcommitted
PCI: vmd: Convert to lock guards
Convert lock/unlock pairs to lock guard and tidy up the code. Signed-off-by: Nam Cao <[email protected]> Signed-off-by: Manivannan Sadhasivam <[email protected]> [bhelgaas: rebase on dev_fwnode() conversion] Signed-off-by: Bjorn Helgaas <[email protected]> Reviewed-by: Thomas Gleixner <[email protected]> Link: https://patch.msgid.link/836cca37449c70922a2bea1fb13f37940a7a7132.1750858083.git.namcao@linutronix.de
1 parent d7703cf commit 63984ea

File tree

1 file changed

+29
-44
lines changed
  • drivers/pci/controller

1 file changed

+29
-44
lines changed

drivers/pci/controller/vmd.c

Lines changed: 29 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -180,30 +180,28 @@ static void vmd_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
180180
static void vmd_irq_enable(struct irq_data *data)
181181
{
182182
struct vmd_irq *vmdirq = data->chip_data;
183-
unsigned long flags;
184183

185-
raw_spin_lock_irqsave(&list_lock, flags);
186-
WARN_ON(vmdirq->enabled);
187-
list_add_tail_rcu(&vmdirq->node, &vmdirq->irq->irq_list);
188-
vmdirq->enabled = true;
189-
raw_spin_unlock_irqrestore(&list_lock, flags);
184+
scoped_guard(raw_spinlock_irqsave, &list_lock) {
185+
WARN_ON(vmdirq->enabled);
186+
list_add_tail_rcu(&vmdirq->node, &vmdirq->irq->irq_list);
187+
vmdirq->enabled = true;
188+
}
190189

191190
data->chip->irq_unmask(data);
192191
}
193192

194193
static void vmd_irq_disable(struct irq_data *data)
195194
{
196195
struct vmd_irq *vmdirq = data->chip_data;
197-
unsigned long flags;
198196

199197
data->chip->irq_mask(data);
200198

201-
raw_spin_lock_irqsave(&list_lock, flags);
202-
if (vmdirq->enabled) {
203-
list_del_rcu(&vmdirq->node);
204-
vmdirq->enabled = false;
199+
scoped_guard(raw_spinlock_irqsave, &list_lock) {
200+
if (vmdirq->enabled) {
201+
list_del_rcu(&vmdirq->node);
202+
vmdirq->enabled = false;
203+
}
205204
}
206-
raw_spin_unlock_irqrestore(&list_lock, flags);
207205
}
208206

209207
static struct irq_chip vmd_msi_controller = {
@@ -225,7 +223,6 @@ static irq_hw_number_t vmd_get_hwirq(struct msi_domain_info *info,
225223
*/
226224
static struct vmd_irq_list *vmd_next_irq(struct vmd_dev *vmd, struct msi_desc *desc)
227225
{
228-
unsigned long flags;
229226
int i, best;
230227

231228
if (vmd->msix_count == 1 + vmd->first_vec)
@@ -242,13 +239,13 @@ static struct vmd_irq_list *vmd_next_irq(struct vmd_dev *vmd, struct msi_desc *d
242239
return &vmd->irqs[vmd->first_vec];
243240
}
244241

245-
raw_spin_lock_irqsave(&list_lock, flags);
246-
best = vmd->first_vec + 1;
247-
for (i = best; i < vmd->msix_count; i++)
248-
if (vmd->irqs[i].count < vmd->irqs[best].count)
249-
best = i;
250-
vmd->irqs[best].count++;
251-
raw_spin_unlock_irqrestore(&list_lock, flags);
242+
scoped_guard(raw_spinlock_irq, &list_lock) {
243+
best = vmd->first_vec + 1;
244+
for (i = best; i < vmd->msix_count; i++)
245+
if (vmd->irqs[i].count < vmd->irqs[best].count)
246+
best = i;
247+
vmd->irqs[best].count++;
248+
}
252249

253250
return &vmd->irqs[best];
254251
}
@@ -277,14 +274,12 @@ static void vmd_msi_free(struct irq_domain *domain,
277274
struct msi_domain_info *info, unsigned int virq)
278275
{
279276
struct vmd_irq *vmdirq = irq_get_chip_data(virq);
280-
unsigned long flags;
281277

282278
synchronize_srcu(&vmdirq->irq->srcu);
283279

284280
/* XXX: Potential optimization to rebalance */
285-
raw_spin_lock_irqsave(&list_lock, flags);
286-
vmdirq->irq->count--;
287-
raw_spin_unlock_irqrestore(&list_lock, flags);
281+
scoped_guard(raw_spinlock_irq, &list_lock)
282+
vmdirq->irq->count--;
288283

289284
kfree(vmdirq);
290285
}
@@ -387,29 +382,24 @@ static int vmd_pci_read(struct pci_bus *bus, unsigned int devfn, int reg,
387382
{
388383
struct vmd_dev *vmd = vmd_from_bus(bus);
389384
void __iomem *addr = vmd_cfg_addr(vmd, bus, devfn, reg, len);
390-
unsigned long flags;
391-
int ret = 0;
392385

393386
if (!addr)
394387
return -EFAULT;
395388

396-
raw_spin_lock_irqsave(&vmd->cfg_lock, flags);
389+
guard(raw_spinlock_irqsave)(&vmd->cfg_lock);
397390
switch (len) {
398391
case 1:
399392
*value = readb(addr);
400-
break;
393+
return 0;
401394
case 2:
402395
*value = readw(addr);
403-
break;
396+
return 0;
404397
case 4:
405398
*value = readl(addr);
406-
break;
399+
return 0;
407400
default:
408-
ret = -EINVAL;
409-
break;
401+
return -EINVAL;
410402
}
411-
raw_spin_unlock_irqrestore(&vmd->cfg_lock, flags);
412-
return ret;
413403
}
414404

415405
/*
@@ -422,32 +412,27 @@ static int vmd_pci_write(struct pci_bus *bus, unsigned int devfn, int reg,
422412
{
423413
struct vmd_dev *vmd = vmd_from_bus(bus);
424414
void __iomem *addr = vmd_cfg_addr(vmd, bus, devfn, reg, len);
425-
unsigned long flags;
426-
int ret = 0;
427415

428416
if (!addr)
429417
return -EFAULT;
430418

431-
raw_spin_lock_irqsave(&vmd->cfg_lock, flags);
419+
guard(raw_spinlock_irqsave)(&vmd->cfg_lock);
432420
switch (len) {
433421
case 1:
434422
writeb(value, addr);
435423
readb(addr);
436-
break;
424+
return 0;
437425
case 2:
438426
writew(value, addr);
439427
readw(addr);
440-
break;
428+
return 0;
441429
case 4:
442430
writel(value, addr);
443431
readl(addr);
444-
break;
432+
return 0;
445433
default:
446-
ret = -EINVAL;
447-
break;
434+
return -EINVAL;
448435
}
449-
raw_spin_unlock_irqrestore(&vmd->cfg_lock, flags);
450-
return ret;
451436
}
452437

453438
static struct pci_ops vmd_ops = {

0 commit comments

Comments
 (0)