Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

irqbypass: Use guard(mutex) in lieu of manual lock+unlock

Use guard(mutex) to clean up irqbypass's error handling.

Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Alex Williamson <alex.williamson@redhat.com>
Link: https://lore.kernel.org/r/20250516230734.2564775-7-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>

+10 -28
+10 -28
virt/lib/irqbypass.c
··· 99 99 if (WARN_ON_ONCE(producer->eventfd)) 100 100 return -EINVAL; 101 101 102 - mutex_lock(&lock); 102 + guard(mutex)(&lock); 103 103 104 104 list_for_each_entry(tmp, &producers, node) { 105 - if (tmp->eventfd == eventfd) { 106 - ret = -EBUSY; 107 - goto out_err; 108 - } 105 + if (tmp->eventfd == eventfd) 106 + return -EBUSY; 109 107 } 110 108 111 109 list_for_each_entry(consumer, &consumers, node) { 112 110 if (consumer->eventfd == eventfd) { 113 111 ret = __connect(producer, consumer); 114 112 if (ret) 115 - goto out_err; 113 + return ret; 116 114 break; 117 115 } 118 116 } 119 117 120 118 producer->eventfd = eventfd; 121 119 list_add(&producer->node, &producers); 122 - 123 - mutex_unlock(&lock); 124 - 125 120 return 0; 126 - out_err: 127 - mutex_unlock(&lock); 128 - return ret; 129 121 } 130 122 EXPORT_SYMBOL_GPL(irq_bypass_register_producer); 131 123 ··· 133 141 if (!producer->eventfd) 134 142 return; 135 143 136 - mutex_lock(&lock); 144 + guard(mutex)(&lock); 137 145 138 146 if (producer->consumer) 139 147 __disconnect(producer, producer->consumer); 140 148 141 149 producer->eventfd = NULL; 142 150 list_del(&producer->node); 143 - mutex_unlock(&lock); 144 151 } 145 152 EXPORT_SYMBOL_GPL(irq_bypass_unregister_producer); 146 153 ··· 164 173 if (!consumer->add_producer || !consumer->del_producer) 165 174 return -EINVAL; 166 175 167 - mutex_lock(&lock); 176 + guard(mutex)(&lock); 168 177 169 178 list_for_each_entry(tmp, &consumers, node) { 170 - if (tmp->eventfd == eventfd) { 171 - ret = -EBUSY; 172 - goto out_err; 173 - } 179 + if (tmp->eventfd == eventfd) 180 + return -EBUSY; 174 181 } 175 182 176 183 list_for_each_entry(producer, &producers, node) { 177 184 if (producer->eventfd == eventfd) { 178 185 ret = __connect(producer, consumer); 179 186 if (ret) 180 - goto out_err; 187 + return ret; 181 188 break; 182 189 } 183 190 } 184 191 185 192 consumer->eventfd = eventfd; 186 193 list_add(&consumer->node, &consumers); 187 - 188 - mutex_unlock(&lock); 189 - 190 194 return 0; 191 - out_err: 192 - mutex_unlock(&lock); 193 - return ret; 194 195 } 195 196 EXPORT_SYMBOL_GPL(irq_bypass_register_consumer); 196 197 ··· 198 215 if (!consumer->eventfd) 199 216 return; 200 217 201 - mutex_lock(&lock); 218 + guard(mutex)(&lock); 202 219 203 220 if (consumer->producer) 204 221 __disconnect(consumer->producer, consumer); 205 222 206 223 consumer->eventfd = NULL; 207 224 list_del(&consumer->node); 208 - mutex_unlock(&lock); 209 225 } 210 226 EXPORT_SYMBOL_GPL(irq_bypass_unregister_consumer);