lkml.org 
[lkml]   [2017]   [Oct]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [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?

\
 
 \ /
  Last update: 2017-10-06 22:47    [W:0.075 / U:8.088 seconds]
©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site