direct-io.hg

changeset 2787:a5c335665fd6

bitkeeper revision 1.1159.142.2 (41849fadYlUYMwSy6tcq8Y-Yi8NMZA)

Clean up libxc by allowing direct use of Xen headers from userland:
#include <xen/...>
author kaf24@freefall.cl.cam.ac.uk
date Sun Oct 31 08:17:49 2004 +0000 (2004-10-31)
parents b185ccca653c
children b9377db0fc3a
files BitKeeper/etc/ignore tools/libxc/Makefile tools/libxc/xc.h tools/libxc/xc_domain.c tools/libxc/xc_evtchn.c tools/libxc/xc_linux_save.c tools/libxc/xc_misc.c tools/libxc/xc_private.h tools/misc/Makefile tools/xentrace/Makefile tools/xentrace/xentrace.c tools/xfrd/Makefile xen/Makefile
line diff
     1.1 --- a/BitKeeper/etc/ignore	Sun Oct 31 07:15:20 2004 +0000
     1.2 +++ b/BitKeeper/etc/ignore	Sun Oct 31 08:17:49 2004 +0000
     1.3 @@ -32,6 +32,7 @@ patches/*
     1.4  tools/*/build/lib*/*.py
     1.5  tools/balloon/balloon
     1.6  tools/check/.*
     1.7 +tools/libxc/xen
     1.8  tools/misc/miniterm/miniterm
     1.9  tools/misc/xen_cpuperf
    1.10  tools/web-shutdown.tap
     2.1 --- a/tools/libxc/Makefile	Sun Oct 31 07:15:20 2004 +0000
     2.2 +++ b/tools/libxc/Makefile	Sun Oct 31 08:17:49 2004 +0000
     2.3 @@ -8,9 +8,6 @@ CC       = gcc
     2.4  XEN_ROOT = ../..
     2.5  include $(XEN_ROOT)/tools/Make.defs
     2.6  
     2.7 -vpath %.h      $(XEN_HYPERVISOR_IFS)
     2.8 -INCLUDES += -I $(XEN_HYPERVISOR_IFS)
     2.9 -
    2.10  vpath %h       $(XEN_LINUX_INCLUDE)
    2.11  INCLUDES += -I $(XEN_LINUX_INCLUDE)
    2.12  
    2.13 @@ -44,7 +41,7 @@ OBJS     = $(patsubst %.c,%.o,$(SRCS))
    2.14  
    2.15  LIB      = libxc.so libxc.so.$(MAJOR) libxc.so.$(MAJOR).$(MINOR)
    2.16  
    2.17 -all: check-for-zlib $(LIB)
    2.18 +all: check-for-zlib mk-symlinks $(LIB)
    2.19  
    2.20  check-for-zlib:
    2.21  	@if [ ! -e /usr/include/zlib.h ]; then \
    2.22 @@ -54,6 +51,9 @@ check-for-zlib:
    2.23  	false; \
    2.24  	fi
    2.25  
    2.26 +mk-symlinks:
    2.27 +	ln -sf $(XEN_HYPERVISOR_IFS) xen
    2.28 +
    2.29  install: all
    2.30  	mkdir -p $(prefix)/usr/lib
    2.31  	mkdir -p $(prefix)/usr/include
    2.32 @@ -61,9 +61,7 @@ install: all
    2.33  	install -m0644 xc.h $(prefix)/usr/include
    2.34  
    2.35  clean:
    2.36 -	$(RM) *.a *.so *.o *.rpm $(LIB)
    2.37 -	$(RM) *~
    2.38 -	$(RM) $(DEPS)
    2.39 +	$(RM) *.a *.so *.o *.rpm $(LIB) *~ $(DEPS) xen
    2.40  
    2.41  rpm: all
    2.42  	rm -rf staging
     3.1 --- a/tools/libxc/xc.h	Sun Oct 31 07:15:20 2004 +0000
     3.2 +++ b/tools/libxc/xc.h	Sun Oct 31 08:17:49 2004 +0000
     3.3 @@ -3,7 +3,7 @@
     3.4   * 
     3.5   * A library for low-level access to the Xen control interfaces.
     3.6   * 
     3.7 - * Copyright (c) 2003, K A Fraser.
     3.8 + * Copyright (c) 2003-2004, K A Fraser.
     3.9   */
    3.10  
    3.11  #ifndef __XC_H__
    3.12 @@ -18,6 +18,12 @@ typedef signed short       s16;
    3.13  typedef signed long        s32;
    3.14  typedef signed long long   s64;
    3.15  
    3.16 +#include "xen/hypervisor-if.h"
    3.17 +#include "xen/dom0_ops.h"
    3.18 +#include "xen/event_channel.h"
    3.19 +#include "xen/sched_ctl.h"
    3.20 +#include "xen/io/domain_controller.h"
    3.21 +
    3.22  /* Obtain or relinquish a handle on the 'xc' library. */
    3.23  int xc_interface_open(void);
    3.24  int xc_interface_close(int xc_handle);
    3.25 @@ -34,14 +40,7 @@ typedef struct {
    3.26      unsigned long max_memkb;
    3.27  } xc_dominfo_t;
    3.28  
    3.29 -typedef struct xc_shadow_control_stats_st
    3.30 -{
    3.31 -    unsigned long fault_count;
    3.32 -    unsigned long dirty_count;
    3.33 -    unsigned long dirty_net_count;     
    3.34 -    unsigned long dirty_block_count;     
    3.35 -} xc_shadow_control_stats_t;
    3.36 -
    3.37 +typedef dom0_getdomaininfo_t xc_domaininfo_t;
    3.38  int xc_domain_create(int xc_handle, 
    3.39                       unsigned int mem_kb, 
    3.40                       int cpu,
    3.41 @@ -60,10 +59,18 @@ int xc_domain_getinfo(int xc_handle,
    3.42                        u32 first_domid, 
    3.43                        unsigned int max_doms,
    3.44                        xc_dominfo_t *info);
    3.45 +int xc_domain_getfullinfo(int xc_handle,
    3.46 +                          u32 domid,
    3.47 +                          xc_domaininfo_t *info,
    3.48 +                          full_execution_context_t *ctxt);
    3.49  int xc_domain_setcpuweight(int xc_handle,
    3.50                             u32 domid,
    3.51                             float weight);
    3.52 +long long xc_domain_get_cpu_usage(int xc_handle,
    3.53 +                                  domid_t domid);
    3.54  
    3.55 +
    3.56 +typedef dom0_shadow_control_stats_t xc_shadow_control_stats_t;
    3.57  int xc_shadow_control(int xc_handle,
    3.58                        u32 domid, 
    3.59                        unsigned int sop,
    3.60 @@ -125,27 +132,7 @@ int xc_rrobin_global_set(int xc_handle, 
    3.61  
    3.62  int xc_rrobin_global_get(int xc_handle, u64 *slice);
    3.63  
    3.64 -#define DOMID_SELF              (0x7FF0U)
    3.65 -#define DOMID_IO                (0x7FF1U)
    3.66 -#define DOMID_XEN               (0x7FF2U)
    3.67 -
    3.68 -typedef struct {
    3.69 -#define EVTCHNSTAT_closed       0  /* Chennel is not in use.                 */
    3.70 -#define EVTCHNSTAT_unbound      1  /* Channel is not bound to a source.      */
    3.71 -#define EVTCHNSTAT_interdomain  2  /* Channel is connected to remote domain. */
    3.72 -#define EVTCHNSTAT_pirq         3  /* Channel is bound to a phys IRQ line.   */
    3.73 -#define EVTCHNSTAT_virq         4  /* Channel is bound to a virtual IRQ line */
    3.74 -    int status;
    3.75 -    union {
    3.76 -        struct {
    3.77 -            u32 dom;
    3.78 -            int port;
    3.79 -        } interdomain;
    3.80 -        int pirq;
    3.81 -        int virq;
    3.82 -    } u;
    3.83 -} xc_evtchn_status_t;
    3.84 -
    3.85 +typedef evtchn_status_t xc_evtchn_status_t;
    3.86  int xc_evtchn_alloc_unbound(int xc_handle,
    3.87                              u32 dom,
    3.88                              int *port);
    3.89 @@ -179,14 +166,7 @@ int xc_readconsolering(int xc_handle,
    3.90                         unsigned int max_chars, 
    3.91                         int clear);
    3.92  
    3.93 -typedef struct {
    3.94 -    int ht_per_core;
    3.95 -    int cores;
    3.96 -    unsigned long total_pages;
    3.97 -    unsigned long free_pages;
    3.98 -    unsigned long cpu_khz;
    3.99 -} xc_physinfo_t;
   3.100 -
   3.101 +typedef dom0_physinfo_t xc_physinfo_t;
   3.102  int xc_physinfo(int xc_handle,
   3.103                  xc_physinfo_t *info);
   3.104  
     4.1 --- a/tools/libxc/xc_domain.c	Sun Oct 31 07:15:20 2004 +0000
     4.2 +++ b/tools/libxc/xc_domain.c	Sun Oct 31 08:17:49 2004 +0000
     4.3 @@ -120,16 +120,21 @@ int xc_domain_getinfo(int xc_handle,
     4.4  
     4.5  int xc_domain_getfullinfo(int xc_handle,
     4.6                            u32 domid,
     4.7 -                          dom0_op_t *op,
     4.8 -                          full_execution_context_t *ctxt )
     4.9 +                          xc_domaininfo_t *info,
    4.10 +                          full_execution_context_t *ctxt)
    4.11  {
    4.12      int rc;
    4.13 -    op->cmd = DOM0_GETDOMAININFO;
    4.14 -    op->u.getdomaininfo.domain = (domid_t)domid;
    4.15 -    op->u.getdomaininfo.ctxt = ctxt;
    4.16 +    dom0_op_t op;
    4.17  
    4.18 -    rc = do_dom0_op(xc_handle, op);
    4.19 -    if ( ((u16)op->u.getdomaininfo.domain != domid) && rc > 0 )
    4.20 +    op.cmd = DOM0_GETDOMAININFO;
    4.21 +    op.u.getdomaininfo.domain = (domid_t)domid;
    4.22 +    op.u.getdomaininfo.ctxt = ctxt;
    4.23 +
    4.24 +    rc = do_dom0_op(xc_handle, &op);
    4.25 +
    4.26 +    memcpy(info, &op.u.getdomaininfo, sizeof(*info));
    4.27 +
    4.28 +    if ( ((u16)op.u.getdomaininfo.domain != domid) && rc > 0 )
    4.29          return -ESRCH;
    4.30      else
    4.31          return rc;
     5.1 --- a/tools/libxc/xc_evtchn.c	Sun Oct 31 07:15:20 2004 +0000
     5.2 +++ b/tools/libxc/xc_evtchn.c	Sun Oct 31 08:17:49 2004 +0000
     5.3 @@ -134,21 +134,7 @@ int xc_evtchn_status(int xc_handle,
     5.4      op.u.status.port = port;
     5.5     
     5.6      if ( (rc = do_evtchn_op(xc_handle, &op)) == 0 )
     5.7 -    {
     5.8 -        switch ( status->status = op.u.status.status )
     5.9 -        {
    5.10 -        case EVTCHNSTAT_interdomain:
    5.11 -            status->u.interdomain.dom  = (u16)op.u.status.u.interdomain.dom;
    5.12 -            status->u.interdomain.port = op.u.status.u.interdomain.port;
    5.13 -            break;
    5.14 -        case EVTCHNSTAT_pirq:
    5.15 -            status->u.pirq = op.u.status.u.pirq;
    5.16 -            break;
    5.17 -        case EVTCHNSTAT_virq:
    5.18 -            status->u.virq = op.u.status.u.virq;
    5.19 -            break;
    5.20 -        }
    5.21 -    }
    5.22 +        memcpy(status, &op.u.status, sizeof(*status));
    5.23      
    5.24      return rc;
    5.25  }
     6.1 --- a/tools/libxc/xc_linux_save.c	Sun Oct 31 07:15:20 2004 +0000
     6.2 +++ b/tools/libxc/xc_linux_save.c	Sun Oct 31 08:17:49 2004 +0000
     6.3 @@ -319,9 +319,9 @@ static int analysis_phase( int xc_handle
     6.4  }
     6.5  
     6.6  
     6.7 -int suspend_and_state( int xc_handle, XcIOContext *ioctxt,		      
     6.8 -		       dom0_op_t *op,
     6.9 -		       full_execution_context_t *ctxt )
    6.10 +int suspend_and_state(int xc_handle, XcIOContext *ioctxt,		      
    6.11 +                      xc_domaininfo_t *info,
    6.12 +                      full_execution_context_t *ctxt)
    6.13  {
    6.14      int i=0;
    6.15      
    6.16 @@ -329,26 +329,26 @@ int suspend_and_state( int xc_handle, Xc
    6.17  
    6.18  retry:
    6.19  
    6.20 -    if ( xc_domain_getfullinfo( xc_handle, ioctxt->domain, op, ctxt) )
    6.21 +    if ( xc_domain_getfullinfo(xc_handle, ioctxt->domain, info, ctxt) )
    6.22      {
    6.23  	xcio_error(ioctxt, "Could not get full domain info");
    6.24  	return -1;
    6.25      }
    6.26  
    6.27 -    if ( (op->u.getdomaininfo.flags & 
    6.28 -	  ( DOMFLAGS_SHUTDOWN | (SHUTDOWN_suspend<<DOMFLAGS_SHUTDOWNSHIFT) ))
    6.29 -	 == ( DOMFLAGS_SHUTDOWN | (SHUTDOWN_suspend<<DOMFLAGS_SHUTDOWNSHIFT) ))
    6.30 +    if ( (info->flags & 
    6.31 +          (DOMFLAGS_SHUTDOWN | (SHUTDOWN_suspend<<DOMFLAGS_SHUTDOWNSHIFT))) ==
    6.32 +         (DOMFLAGS_SHUTDOWN | (SHUTDOWN_suspend<<DOMFLAGS_SHUTDOWNSHIFT)) )
    6.33      {
    6.34  	return 0; // success
    6.35      }
    6.36  
    6.37 -    if ( op->u.getdomaininfo.flags & DOMFLAGS_PAUSED )
    6.38 +    if ( info->flags & DOMFLAGS_PAUSED )
    6.39      {
    6.40  	// try unpausing domain, wait, and retest	
    6.41  	xc_domain_unpause( xc_handle, ioctxt->domain );
    6.42  
    6.43  	xcio_error(ioctxt, "Domain was paused. Wait and re-test. (%lx)",
    6.44 -		   op->u.getdomaininfo.flags);
    6.45 +		   info->flags);
    6.46  	usleep(10000);  // 10ms
    6.47  
    6.48  	goto retry;
    6.49 @@ -358,20 +358,21 @@ retry:
    6.50      if( ++i < 100 )
    6.51      {
    6.52  	xcio_error(ioctxt, "Retry suspend domain (%lx)",
    6.53 -		   op->u.getdomaininfo.flags);
    6.54 +		   info->flags);
    6.55  	usleep(10000);  // 10ms	
    6.56  	goto retry;
    6.57      }
    6.58  
    6.59      xcio_error(ioctxt, "Unable to suspend domain. (%lx)",
    6.60 -	       op->u.getdomaininfo.flags);
    6.61 +	       info->flags);
    6.62  
    6.63      return -1;
    6.64  }
    6.65  
    6.66  int xc_linux_save(int xc_handle, XcIOContext *ioctxt)
    6.67  {
    6.68 -    dom0_op_t op;
    6.69 +    xc_domaininfo_t info;
    6.70 +
    6.71      int rc = 1, i, j, k, last_iter, iter = 0;
    6.72      unsigned long mfn;
    6.73      u32 domid = ioctxt->domain;
    6.74 @@ -441,12 +442,12 @@ int xc_linux_save(int xc_handle, XcIOCon
    6.75          return 1;
    6.76      }
    6.77  
    6.78 -    if ( xc_domain_getfullinfo( xc_handle, domid, &op, &ctxt) )
    6.79 +    if ( xc_domain_getfullinfo( xc_handle, domid, &info, &ctxt) )
    6.80      {
    6.81          xcio_error(ioctxt, "Could not get full domain info");
    6.82          goto out;
    6.83      }
    6.84 -    shared_info_frame = op.u.getdomaininfo.shared_info_frame;
    6.85 +    shared_info_frame = info.shared_info_frame;
    6.86  
    6.87      /* A cheesy test to see whether the domain contains valid state. */
    6.88      if ( ctxt.pt_base == 0 ){
    6.89 @@ -454,7 +455,7 @@ int xc_linux_save(int xc_handle, XcIOCon
    6.90          goto out;
    6.91      }
    6.92      
    6.93 -    nr_pfns = op.u.getdomaininfo.max_pages; 
    6.94 +    nr_pfns = info.max_pages; 
    6.95  
    6.96      /* cheesy sanity check */
    6.97      if ( nr_pfns > 1024*1024 ){
    6.98 @@ -536,10 +537,10 @@ int xc_linux_save(int xc_handle, XcIOCon
    6.99  
   6.100          last_iter = 1;
   6.101  
   6.102 -	if ( suspend_and_state( xc_handle, ioctxt, &op, &ctxt) )
   6.103 +	if ( suspend_and_state( xc_handle, ioctxt, &info, &ctxt) )
   6.104  	{
   6.105  	    xcio_error(ioctxt, "Domain appears not to have suspended: %lx",
   6.106 -		       op.u.getdomaininfo.flags);
   6.107 +		       info.flags);
   6.108  	    goto out;
   6.109  	}
   6.110  
   6.111 @@ -900,17 +901,17 @@ int xc_linux_save(int xc_handle, XcIOCon
   6.112                  DPRINTF("Start last iteration\n");
   6.113                  last_iter = 1;
   6.114  
   6.115 -		if ( suspend_and_state( xc_handle, ioctxt, &op, &ctxt) )
   6.116 +		if ( suspend_and_state( xc_handle, ioctxt, &info, &ctxt) )
   6.117  		{
   6.118  		    xcio_error(ioctxt, "Domain appears not to have suspended: %lx",
   6.119 -			       op.u.getdomaininfo.flags);
   6.120 +			       info.flags);
   6.121  		    goto out;
   6.122  		}
   6.123  
   6.124  		xcio_info(ioctxt,
   6.125                            "SUSPEND flags %08lx shinfo %08lx eip %08lx "
   6.126 -                          "esi %08lx\n", op.u.getdomaininfo.flags,
   6.127 -                          op.u.getdomaininfo.shared_info_frame,
   6.128 +                          "esi %08lx\n",info.flags,
   6.129 +                          info.shared_info_frame,
   6.130                            ctxt.cpu_ctxt.eip, ctxt.cpu_ctxt.esi );
   6.131              } 
   6.132  
     7.1 --- a/tools/libxc/xc_misc.c	Sun Oct 31 07:15:20 2004 +0000
     7.2 +++ b/tools/libxc/xc_misc.c	Sun Oct 31 08:17:49 2004 +0000
     7.3 @@ -52,18 +52,14 @@ int xc_physinfo(int xc_handle,
     7.4  {
     7.5      int ret;
     7.6      dom0_op_t op;
     7.7 -    dom0_physinfo_t *got_info = &op.u.physinfo;
     7.8      
     7.9      op.cmd = DOM0_PHYSINFO;
    7.10      op.interface_version = DOM0_INTERFACE_VERSION;
    7.11  
    7.12 -    if((ret = do_dom0_op(xc_handle, &op))) return ret;
    7.13 +    if ( (ret = do_dom0_op(xc_handle, &op)) != 0 )
    7.14 +        return ret;
    7.15  
    7.16 -    put_info->ht_per_core = got_info->ht_per_core;
    7.17 -    put_info->cores       = got_info->cores;
    7.18 -    put_info->total_pages = got_info->total_pages;
    7.19 -    put_info->free_pages  = got_info->free_pages;
    7.20 -    put_info->cpu_khz     = got_info->cpu_khz;
    7.21 +    memcpy(put_info, &op.u.physinfo, sizeof(*put_info));
    7.22  
    7.23      return 0;
    7.24  }
     8.1 --- a/tools/libxc/xc_private.h	Sun Oct 31 07:15:20 2004 +0000
     8.2 +++ b/tools/libxc/xc_private.h	Sun Oct 31 08:17:49 2004 +0000
     8.3 @@ -16,13 +16,6 @@
     8.4  
     8.5  #include "xc.h"
     8.6  
     8.7 -/* from xen/include/hypervisor-ifs */
     8.8 -#include <hypervisor-if.h>
     8.9 -#include <dom0_ops.h>
    8.10 -#include <event_channel.h>
    8.11 -#include <sched_ctl.h>
    8.12 -#include <io/domain_controller.h>
    8.13 -
    8.14  #include <asm-xen/proc_cmd.h>
    8.15  
    8.16  
    8.17 @@ -193,15 +186,8 @@ typedef struct mfn_mapper {
    8.18      
    8.19  } mfn_mapper_t;
    8.20  
    8.21 -long long  xc_domain_get_cpu_usage( int xc_handle, domid_t domid );
    8.22 -
    8.23  #include "xc_io.h"
    8.24  
    8.25 -int xc_domain_getfullinfo(int xc_handle,
    8.26 -                          u32 domid,
    8.27 -                          dom0_op_t *op,
    8.28 -                          full_execution_context_t *ctxt );
    8.29 -
    8.30  unsigned long xc_get_m2p_start_mfn ( int xc_handle );
    8.31  
    8.32  #endif /* __XC_PRIVATE_H__ */
     9.1 --- a/tools/misc/Makefile	Sun Oct 31 07:15:20 2004 +0000
     9.2 +++ b/tools/misc/Makefile	Sun Oct 31 08:17:49 2004 +0000
     9.3 @@ -5,7 +5,6 @@ include $(XEN_ROOT)/tools/Make.defs
     9.4  CC         = gcc
     9.5  CFLAGS     = -Wall -O3 
     9.6  
     9.7 -INCLUDES += -I $(XEN_HYPERVISOR_IFS)
     9.8  INCLUDES += -I $(XEN_LINUX_INCLUDE)
     9.9  INCLUDES += -I $(XEN_XC)
    9.10  INCLUDES += -I $(XEN_LIBXC)
    10.1 --- a/tools/xentrace/Makefile	Sun Oct 31 07:15:20 2004 +0000
    10.2 +++ b/tools/xentrace/Makefile	Sun Oct 31 08:17:49 2004 +0000
    10.3 @@ -5,7 +5,6 @@ include $(XEN_ROOT)/tools/Make.defs
    10.4  CC       = gcc
    10.5  CFLAGS   = -Wall -Werror -O3
    10.6  
    10.7 -CFLAGS  += -I $(XEN_HYPERVISOR_IFS)
    10.8  CFLAGS  += -I $(XEN_LINUX_INCLUDE)
    10.9  CFLAGS  += -I $(XEN_XC)
   10.10  CFLAGS  += -I $(XEN_LIBXC)
    11.1 --- a/tools/xentrace/xentrace.c	Sun Oct 31 07:15:20 2004 +0000
    11.2 +++ b/tools/xentrace/xentrace.c	Sun Oct 31 08:17:49 2004 +0000
    11.3 @@ -22,9 +22,7 @@
    11.4  #include <signal.h>
    11.5  
    11.6  #include "xc_private.h"
    11.7 -
    11.8 -/* from xen/include/hypervisor-ifs */
    11.9 -#include <trace.h>
   11.10 +#include <xen/trace.h>
   11.11  
   11.12  extern FILE *stderr;
   11.13  
    12.1 --- a/tools/xfrd/Makefile	Sun Oct 31 07:15:20 2004 +0000
    12.2 +++ b/tools/xfrd/Makefile	Sun Oct 31 08:17:49 2004 +0000
    12.3 @@ -9,9 +9,6 @@ include $(XEN_ROOT)/tools/Make.defs
    12.4  
    12.5  XFRD_INSTALL_DIR = /usr/sbin
    12.6  
    12.7 -vpath %.h      $(XEN_HYPERVISOR_IFS)
    12.8 -INCLUDES += -I $(XEN_HYPERVISOR_IFS)
    12.9 -
   12.10  vpath %h       $(XEN_LINUX_INCLUDE)
   12.11  INCLUDES += -I $(XEN_LINUX_INCLUDE)
   12.12  
    13.1 --- a/xen/Makefile	Sun Oct 31 07:15:20 2004 +0000
    13.2 +++ b/xen/Makefile	Sun Oct 31 08:17:49 2004 +0000
    13.3 @@ -22,6 +22,10 @@ install: $(TARGET)
    13.4  	mkdir -p $(prefix)/boot
    13.5  	install -m0644 $(TARGET).gz $(prefix)/boot
    13.6  	install -m0644 $(TARGET)-syms $(prefix)/boot
    13.7 +	mkdir -p $(prefix)/usr/include/xen/io
    13.8 +	install -m0644 include/hypervisor-ifs/*.h $(prefix)/usr/include/xen
    13.9 +	install -m0644 include/hypervisor-ifs/io/*.h $(prefix)/usr/include/xen/io
   13.10 +	install -m0644 include/hypervisor-ifs/COPYING $(prefix)/usr/include/xen
   13.11  
   13.12  dist: $(TARGET)
   13.13  	$(MAKE) prefix=`pwd`/../install dist=yes install