git: 09bd542d17c9 - main - xen/intr: rework xen_intr_alloc_isrc() call structure

From: Roger Pau Monné <royger_at_FreeBSD.org>
Date: Fri, 14 Apr 2023 14:00:54 UTC
The branch main has been updated by royger:

URL: https://cgit.FreeBSD.org/src/commit/?id=09bd542d17c938b236822d1dd09ef0bab8c1de04

commit 09bd542d17c938b236822d1dd09ef0bab8c1de04
Author:     Elliott Mitchell <ehem+freebsd@m5p.com>
AuthorDate: 2021-05-11 19:05:03 +0000
Commit:     Roger Pau Monné <royger@FreeBSD.org>
CommitDate: 2023-04-14 13:58:49 +0000

    xen/intr: rework xen_intr_alloc_isrc() call structure
    
    The call structure around xen_intr_alloc_isrc() was rather awful.
    Notably finding a structure for reuse is part of allocation, but this
    was done outside xen_intr_alloc_isrc().  Move this into
    xen_intr_alloc_isrc() so the function handles all allocation steps.
    
    Reviewed by: royger
    Differential Revision: https://reviews.freebsd.org/D30726
---
 sys/x86/xen/xen_intr.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/sys/x86/xen/xen_intr.c b/sys/x86/xen/xen_intr.c
index c1ca984bf6ef..6e4b1d9df1f8 100644
--- a/sys/x86/xen/xen_intr.c
+++ b/sys/x86/xen/xen_intr.c
@@ -318,6 +318,10 @@ xen_intr_alloc_isrc(enum evtchn_type type)
 	int error;
 
 	KASSERT(mtx_owned(&xen_intr_isrc_lock), ("Evtchn alloc lock not held"));
+	isrc = xen_intr_find_unused_isrc(type);
+	if (isrc != NULL) {
+		return (isrc);
+	}
 
 	if (xen_intr_auto_vector_count >= NR_EVENT_CHANNELS) {
 		if (!warned) {
@@ -424,13 +428,10 @@ xen_intr_bind_isrc(struct xenisrc **isrcp, evtchn_port_t local_port,
 	*port_handlep = NULL;
 
 	mtx_lock(&xen_intr_isrc_lock);
-	isrc = xen_intr_find_unused_isrc(type);
+	isrc = xen_intr_alloc_isrc(type);
 	if (isrc == NULL) {
-		isrc = xen_intr_alloc_isrc(type);
-		if (isrc == NULL) {
-			mtx_unlock(&xen_intr_isrc_lock);
-			return (ENOSPC);
-		}
+		mtx_unlock(&xen_intr_isrc_lock);
+		return (ENOSPC);
 	}
 	isrc->xi_port = local_port;
 	isrc->xi_close = false;