[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 3/8] xen/evtchn: modify evtchn_bind_interdomain to allocate specified port
Hi Jan, On 05/07/2022 16:11, Jan Beulich wrote: On 22.06.2022 16:38, Rahul Singh wrote:@@ -387,8 +392,19 @@ int evtchn_bind_interdomain(evtchn_bind_interdomain_t *bind) spin_lock(&ld->event_lock); }- if ( (lport = get_free_port(ld)) < 0 )- ERROR_EXIT(lport); + if ( lport != 0 ) + { + if ( (rc = evtchn_allocate_port(ld, lport)) != 0 ) + ERROR_EXIT_DOM(rc, ld); + } + else + { + int alloc_port = get_free_port(ld); + + if ( alloc_port < 0 ) + ERROR_EXIT_DOM(alloc_port, ld); + lport = alloc_port; + }This is then the 3rd instance of this pattern. I think the logic wants moving into get_free_port() (perhaps with a name change). I think the code below would be suitable. I can send it or Rahul can re-use the commit [1]: diff --git a/xen/common/event_channel.c b/xen/common/event_channel.cindex e6fb024218e949529c587b7c4755295786d6e7a7..757088580c2b2a3e55774f50b8ad7b3ec9243788 100644 (file) --- a/xen/common/event_channel.c +++ b/xen/common/event_channel.c @@ -292,6 +292,18 @@ void evtchn_free(struct domain *d, struct evtchn *chn) xsm_evtchn_close_post(chn); } +static int evtchn_get_port(struct domain *d, uint32_t port) +{ + int rc; + + if ( port != 0 ) + rc = evtchn_allocate_port(d, port); + else + rc = get_free_port(d); + + return rc != 0 ? rc : port; +} + static long evtchn_alloc_unbound(evtchn_alloc_unbound_t *alloc) { struct evtchn *chn;@@ -451,19 +463,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);[1] https://xenbits.xen.org/gitweb/?p=people/julieng/xen-unstable.git;a=commit;h=3860ed9915d6fee97a1088110ffd0a6f29f04d9a And of course like in the earlier patch the issue with sparse port numbers needs to be resolved. Jan -- Julien Grall
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |