[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] tools/oxenstored: port XS_INTRODUCE evtchn rebind function from cxenstored



On 20/08/2019 09:21, Christian Lindig wrote:
>> +                    if (Domain.get_mfn edom) = mfn && 
>> (Connections.find_domain cons domid) != con then begin
> 
> This should use <> instead of != because != is pointer inequality in OCaml. 
> The parentheses are not strictly necessary because function application has 
> precedence. So:
> 
>       if Domain.get_mfn edom = mfn && Connections.find_domain cons domid <> 
> con then begin
> 

But I actually want to compare pointers here - the idea is that the
connection object in the hashtable indexed by domid is not the same as
connection that we got XS_INTRODUCE message from. (see
tools/xenstore/xenstrored_domain.c)

Igor

>> On 19 Aug 2019, at 19:45, Igor Druzhinin <igor.druzhinin@xxxxxxxxxx> wrote:
>>
>> C version of xenstored had this ability since 61aaed0d5 ("Allow
>> XS_INTRODUCE to be used for rebinding the xenstore evtchn.") from 2007.
>> Copy it as is to Ocaml version.
>>
>> Signed-off-by: Igor Druzhinin <igor.druzhinin@xxxxxxxxxx>
>> ---
>> tools/ocaml/xenstored/domain.ml  | 6 +++++-
>> tools/ocaml/xenstored/process.ml | 8 +++++++-
>> 2 files changed, 12 insertions(+), 2 deletions(-)
>>
>> diff --git a/tools/ocaml/xenstored/domain.ml 
>> b/tools/ocaml/xenstored/domain.ml
>> index b0a01b0..aeb185f 100644
>> --- a/tools/ocaml/xenstored/domain.ml
>> +++ b/tools/ocaml/xenstored/domain.ml
>> @@ -23,9 +23,9 @@ type t =
>> {
>>      id: Xenctrl.domid;
>>      mfn: nativeint;
>> -    remote_port: int;
>>      interface: Xenmmap.mmap_interface;
>>      eventchn: Event.t;
>> +    mutable remote_port: int;
>>      mutable port: Xeneventchn.t option;
>>      mutable bad_client: bool;
>>      mutable io_credit: int; (* the rounds of ring process left to do, 
>> default is 0,
>> @@ -71,6 +71,10 @@ let notify dom = match dom.port with
>>      Event.notify dom.eventchn port
>>
>> let bind_interdomain dom =
>> +    begin match dom.port with
>> +    | None -> ()
>> +    | Some port -> Event.unbind dom.eventchn port
>> +    end;
>>      dom.port <- Some (Event.bind_interdomain dom.eventchn dom.id 
>> dom.remote_port);
>>      debug "bound domain %d remote port %d to local port %s" dom.id 
>> dom.remote_port (string_of_port dom.port)
>>
>> diff --git a/tools/ocaml/xenstored/process.ml 
>> b/tools/ocaml/xenstored/process.ml
>> index 8a7e538..ff5c948 100644
>> --- a/tools/ocaml/xenstored/process.ml
>> +++ b/tools/ocaml/xenstored/process.ml
>> @@ -408,7 +408,13 @@ let do_introduce con _t domains cons data =
>>              in
>>      let dom =
>>              if Domains.exist domains domid then
>> -                    Domains.find domains domid
>> +                    let edom = Domains.find domains domid in
>> +                    if (Domain.get_mfn edom) = mfn && 
>> (Connections.find_domain cons domid) != con then begin
>> +                            (* Use XS_INTRODUCE for recreating the xenbus 
>> event-channel. *)
>> +                            edom.remote_port <- port;
>> +                            Domain.bind_interdomain edom;
>> +                    end;
>> +                    edom
>>              else try
>>                      let ndom = Domains.create domains domid mfn port in
>>                      Connections.add_domain cons ndom;
>> -- 
>> 2.7.4
>>
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.