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

Re: [Xen-devel] [PATCH v4 10/13] xen/pvcalls: implement recvmsg



On Fri, 22 Sep 2017, Boris Ostrovsky wrote:
> > +static bool pvcalls_front_read_todo(struct sock_mapping *map)
> > +{
> > +   struct pvcalls_data_intf *intf = map->active.ring;
> > +   RING_IDX cons, prod;
> > +   int32_t error;
> > +
> > +   cons = intf->in_cons;
> > +   prod = intf->in_prod;
> > +   error = intf->in_error;
> > +   return (error != 0 ||
> > +           pvcalls_queued(prod, cons,
> > +                          XEN_FLEX_RING_SIZE(PVCALLS_RING_ORDER)) != 0);
> 
> 
> Does this routine have to be different from pvcalls_front_write_todo()?
> They look pretty similar. Can they be merged?
> 
> (and you don't really need 'error' variable)

pvcalls_front_write_todo and pvcalls_front_read_todo are both small
wrappers around pvcalls_queued. However, they check different indexes.
A single function would look like this:

  static bool pvcalls_front_todo(struct sock_mapping *map, bool write)
  {
        struct pvcalls_data_intf *intf = map->active.ring;
        RING_IDX cons, prod, size = XEN_FLEX_RING_SIZE(PVCALLS_RING_ORDER);
        int32_t error;
        RING_IDX q;
        bool ret;
  
        if (write) {
                cons = intf->out_cons;
                prod = intf->out_prod;
                error = intf->out_error;
        } else {
                cons = intf->in_cons;
                prod = intf->in_prod;
                error = intf->in_error;
        }
        if (error == -ENOTCONN)
                return false;
        if (error != 0)
                return true;
  
        q = pvcalls_queued(prod, cons, size);
        if (write)
                ret = !!(size - q);
        else
                ret = q != 0;
        return ret;
  }

I don't think is much of an improvement?

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

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