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

Re: [Xen-devel] [PATCH 5/5] kexec/xen: directly load images images into Xen



On Tue, Apr 09, 2013 at 11:20:36PM +0200, Daniel Kiper wrote:
> On Mon, Apr 08, 2013 at 08:06:54PM +0100, David Vrabel wrote:
> > From: David Vrabel <david.vrabel@xxxxxxxxxx>
> >
> > Xen 4.3 has an improvided kexec hypercall ABI that allows images to be
> > loaded and executed without any kernel involvement.  Use the API
> > provided by libxc to load images when running in a Xen guest.
> >
> > Support for loading images via the kexec_load syscall in non-upstream
> > ("classic") Xen kernels is no longer supported.
> >
> > Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx>
>
> [...]
>
> > diff --git a/kexec/kexec-xen.c b/kexec/kexec-xen.c
>
> [...]
>
> > +int xen_kexec_load(uint64_t entry,
> > +              uint32_t nr_segments, struct kexec_segment *segments,
> > +              uint64_t kexec_flags)
> > +{
> > +   xc_interface *xch;
> > +   xc_hypercall_buffer_array_t *array = NULL;
> > +   uint8_t type;
> > +   uint8_t arch;
> > +   xen_kexec_segment_t *xen_segs;
> > +   int s;
> > +   int ret = -1;
> > +
> > +   xch = xc_interface_open(NULL, NULL, 0);
> > +   if (!xch)
> > +           return -1;
> > +
> > +   xen_segs = calloc(nr_segments, sizeof(*xen_segs));
> > +   if (!xen_segs)
> > +           goto out;
> > +
> > +   array = xc_hypercall_buffer_array_create(xch, nr_segments);
> > +   if (array == NULL)
> > +           goto out;
> > +
> > +   for (s = 0; s < nr_segments; s++) {
> > +           DECLARE_HYPERCALL_BUFFER(void, seg_buf);
> > +
> > +           seg_buf = xc_hypercall_buffer_array_alloc(xch, array, s,
> > +                                                     seg_buf, 
> > segments[s].bufsz);
> > +           if (seg_buf == NULL)
> > +                   goto out;
> > +           memcpy(seg_buf, segments[s].buf, segments[s].bufsz);
> > +
> > +           set_xen_guest_handle(xen_segs[s].buf, seg_buf);
> > +           xen_segs[s].buf_size = segments[s].bufsz;
> > +           xen_segs[s].dest_maddr = (uint64_t)segments[s].mem;
> > +           xen_segs[s].dest_size = segments[s].memsz;
> > +   }
> > +
> > +   type = kexec_flags & KEXEC_TYPE_CRASH;
> > +   arch = (kexec_flags >> 16) & 0xffff;
>
> arch = (kexec_flags & KEXEC_ARCH_MASK) >> 16;

What is wrong with this line?
Why did not you applied it?

Daniel

_______________________________________________
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®.