@@ -180,30 +180,28 @@ static void vmd_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
180180static 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
194193static 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
209207static struct irq_chip vmd_msi_controller = {
@@ -225,7 +223,6 @@ static irq_hw_number_t vmd_get_hwirq(struct msi_domain_info *info,
225223 */
226224static 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
453438static struct pci_ops vmd_ops = {
0 commit comments