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

Re: [Xen-devel] [PATCH (V9) 2/2] xen: Add V4V implementation



>>> On 28.05.13 at 21:43, Ross Philipson <ross.philipson@xxxxxxxxxx> wrote:
> @@ -320,6 +328,8 @@ struct domain *domain_create(
>      xfree(d->mem_event);
>      if ( init_status & INIT_arch )
>          arch_domain_destroy(d);
> +    if ( init_status & INIT_v4v )
> +     v4v_destroy(d);

Hard tab.

> +static long
> +v4v_ringbuf_insertv(struct domain *d,
> +                    struct v4v_ring_info *ring_info,
> +                    v4v_ring_id_t *src_id, uint32_t message_type,
> +                    XEN_GUEST_HANDLE_PARAM(v4v_iov_t) iovs,
> +                    uint32_t niov, size_t len)
> +{
>...
> +    do {
>...
> +    } while ( 0 );
> +
> +    v4v_ring_unmap(ring_info);

With the unmapping of all pages getting deferred till here - is there
a sensible upper limit on the number of accumulated mappings? Or
are you blindly running the host out of mapping space?

> +static int
> +v4v_find_ring_mfns(struct domain *d, struct v4v_ring_info *ring_info,
> +                   uint32_t npage, XEN_GUEST_HANDLE_PARAM(v4v_pfn_t) pfn_hnd)
> +{
>...
> +    for ( i = 0; i < npage; ++i )
> +    {
> +        unsigned long pfn;

If you use scope restricted local variables (which I appreciate),
please do so consistently at least within functions. I'm particularly
thinking of "t" here...

> +
> +        if ( copy_from_guest_offset(&pfn, pfn_hnd, i, 1) )
> +        {
> +            ret = -EFAULT;
> +            v4v_dprintk("EFAULT\n");
> +            break;
> +        }
> +
> +        mfn = mfn_x(get_gfn(d, pfn, &t));
> +        if ( !mfn_valid(mfn) )
> +        {
> +            put_gfn(d, pfn);
> +            printk(KERN_ERR "v4v domain %d passed invalid mfn %"PRI_mfn" 
> ring %p seq %d\n",
> +                    d->domain_id, mfn, ring_info, i);
> +            ret = -EINVAL;
> +            break;

No handling of paged out or shared pages here, and not even a
comment saying this needs further adjustment?

Also in code that isn't a Linux clone, please use XENLOG_ instead
of KERN_ for message levels. And you absolutely have to use
XENLOG_G_ for messages concerning guest activities.

And then you properly use PRI_mfn here, yet elsewhere I saw MFNs
getting printed using bogus (void *) casts. This also calls for being
done consistently.

Finally, also printing the PFN here might aid guest side debugging.

> +static void v4v_ring_remove_mfns(struct domain *d, struct v4v_ring_info 
> *ring_info)
> +{
>...
> +    if ( ring_info->mfn_mapping )
> +        xfree(ring_info->mfn_mapping);

Pointless if().

> +#define V4V_RING_MAGIC          0xa822f72bb0b9d8ccUL
> +#define V4V_RING_DATA_MAGIC  0x45fe852220b801d4UL

Hard tab.

> +#define V4V_MESSAGE_DGRAM       0x3c2c1db8
> +#define V4V_MESSAGE_STREAM   0x70f6a8e5

Again. Was this really cleaned up, as the overview patch said?

> --- a/xen/include/xen/sched.h
> +++ b/xen/include/xen/sched.h
> @@ -24,6 +24,7 @@
>  #include <public/sysctl.h>
>  #include <public/vcpu.h>
>  #include <public/mem_event.h>
> +#include <xen/v4v.h>

Please don't, or if you absolutely have to, not after the public
headers, but along with the other xen/ ones.

> --- /dev/null
> +++ b/xen/include/xen/v4v.h
>...
> +struct v4v_domain;

What is this good for? There's no use in any of the following
function declarations.

Jan


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


 


Rackspace

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