From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: Re: [PATCH 03/10] kexec: add public interface for improved load/unload sub-ops Date: Tue, 25 Jun 2013 08:45:07 +0100 Message-ID: <51C966A302000078000E0375@nat28.tlf.novell.com> References: <1372095741-27012-1-git-send-email-david.vrabel@citrix.com> <1372095741-27012-4-git-send-email-david.vrabel@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1372095741-27012-4-git-send-email-david.vrabel@citrix.com> Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: David Vrabel Cc: Daniel Kiper , Keir Fraser , xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org >>> On 24.06.13 at 19:42, David Vrabel wrote: > @@ -152,6 +152,64 @@ typedef struct xen_kexec_range { > unsigned long start; > } xen_kexec_range_t; > > +#if __XEN_INTERFACE_VERSION__ >= 0x00040300 ... >= 0x00040400 Jan > +/* > + * A contiguous chunk of a kexec image and it's destination machine > + * address. > + */ > +typedef struct xen_kexec_segment { > + XEN_GUEST_HANDLE_64(const_void) buf; > + uint64_t buf_size; > + uint64_t dest_maddr; > + uint64_t dest_size; > +} xen_kexec_segment_t; > +DEFINE_XEN_GUEST_HANDLE(xen_kexec_segment_t); > + > +/* > + * Load a kexec image into memory. > + * > + * For KEXEC_TYPE_DEFAULT images, the segments may be anywhere in RAM. > + * The image is relocated prior to being executed. > + * > + * For KEXEC_TYPE_CRASH images, each segment of the image must reside > + * in the memory region reserved for kexec (KEXEC_RANGE_MA_CRASH) and > + * the entry point must be within the image. The caller is responsible > + * for ensuring that multiple images do not overlap. > + */ > + > +#define KEXEC_CMD_kexec_load 4 > +typedef struct xen_kexec_load { > + uint8_t type; /* One of KEXEC_TYPE_* */ > + uint8_t _pad; > + uint16_t arch; /* ELF machine type (EM_*). */ > + uint32_t nr_segments; > + XEN_GUEST_HANDLE_64(xen_kexec_segment_t) segments; > + uint64_t entry_maddr; /* image entry point machine address. */ > +} xen_kexec_load_t; > +DEFINE_XEN_GUEST_HANDLE(xen_kexec_load_t); > + > +/* > + * Unload a kexec image. > + * > + * Type must be one of KEXEC_TYPE_DEFAULT or KEXEC_TYPE_CRASH. > + */ > +#define KEXEC_CMD_kexec_unload 5 > +typedef struct xen_kexec_unload { > + uint8_t type; > +} xen_kexec_unload_t; > +DEFINE_XEN_GUEST_HANDLE(xen_kexec_unload_t); > + > +#else /* __XEN_INTERFACE_VERSION__ < 0x00040300 */ > + > +#define KEXEC_CMD_kexec_load KEXEC_CMD_kexec_load_v1 > +#define KEXEC_CMD_kexec_unload KEXEC_CMD_kexec_unload_v1 > +typedef struct xen_kexec_load { > + int type; > + xen_kexec_image_t image; > +} xen_kexec_load_t; > + > +#endif > + > #endif /* _XEN_PUBLIC_KEXEC_H */ > > /*