|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v5 2/7] xen/evtchn: Add an helper to reserve/allocate a port
From: Stanislav Kinsburskii <staskins@xxxxxxxxxx>
In a follow-up patch we will want to either reserve or allocate a port
for various event channel helpers.
A new wrapper is introduced to either reserve a given port or allocate
a fresh one if zero.
Take the opportunity to replace the open-coded version in
evtchn_bind_virq().
Signed-off-by: Stanislav Kinsburskii <staskins@xxxxxxxxxx>
Signed-off-by: Julien Grall <jgrall@xxxxxxxxxx>
Signed-off-by: Rahul Singh <rahul.singh@xxxxxxx>
Acked-by: Jan Beulich <jbeulich@xxxxxxxx>
---
Changes in v5:
- no changes
Changes in v4:
- Change the Author to Stanislav Kinsburskii <staskins@xxxxxxxxxx>
Changes in v3:
- minor comments in commit msg
Changes in v2:
- new patch in this version
---
xen/common/event_channel.c | 29 ++++++++++++++++-------------
1 file changed, 16 insertions(+), 13 deletions(-)
diff --git a/xen/common/event_channel.c b/xen/common/event_channel.c
index f81c229358..565ab71881 100644
--- a/xen/common/event_channel.c
+++ b/xen/common/event_channel.c
@@ -305,6 +305,18 @@ void evtchn_free(struct domain *d, struct evtchn *chn)
xsm_evtchn_close_post(chn);
}
+static int evtchn_get_port(struct domain *d, evtchn_port_t port)
+{
+ int rc;
+
+ if ( port != 0 )
+ rc = evtchn_allocate_port(d, port);
+ else
+ rc = get_free_port(d);
+
+ return rc ?: port;
+}
+
int evtchn_alloc_unbound(evtchn_alloc_unbound_t *alloc)
{
struct evtchn *chn;
@@ -462,19 +474,10 @@ int evtchn_bind_virq(evtchn_bind_virq_t *bind,
evtchn_port_t port)
if ( read_atomic(&v->virq_to_evtchn[virq]) )
ERROR_EXIT(-EEXIST);
- if ( port != 0 )
- {
- if ( (rc = evtchn_allocate_port(d, port)) != 0 )
- ERROR_EXIT(rc);
- }
- else
- {
- int alloc_port = get_free_port(d);
-
- if ( alloc_port < 0 )
- ERROR_EXIT(alloc_port);
- port = alloc_port;
- }
+ port = rc = evtchn_get_port(d, port);
+ if ( rc < 0 )
+ ERROR_EXIT(rc);
+ rc = 0;
chn = evtchn_from_port(d, port);
--
2.25.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |