From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dulloor Subject: Re: [PATCH 1/1] Add .adjust_global callback Date: Mon, 19 Apr 2010 09:54:25 -0400 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0647989143==" Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Kathy Hadley Cc: keir.fraser@citrix.com, xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org --===============0647989143== Content-Type: multipart/related; boundary=0016367faced8ddfc20484974cbd --0016367faced8ddfc20484974cbd Content-Type: multipart/alternative; boundary=0016367faced8ddfbc0484974cbc --0016367faced8ddfbc0484974cbc Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable You don't have to explicitly set adjust_global to NULL for credit and sedf. -dulloor On Mon, Apr 19, 2010 at 9:39 AM, Kathy Hadley wrote: > Resubmitting now that I have been added to the Xen-devel mailing list. > > > > Kathy Hadley > > DornerWorks, Ltd. > > > > *From:* Kathy Hadley > *Sent:* Friday, April 16, 2010 10:14 AM > *To:* 'xen-devel@lists.xensource.com' > *Cc:* 'Keir.Fraser@citrix.com' > *Subject:* [Xen-Devel] [PATCH 1/1] Add .adjust_global callback > > > > This patch adds an .adjust_global scheduler callback function, which allo= ws > adjusting the global scheduler parameters (rather than just one domain=92= s > parameters). This patch supports the addition of an ARINC 653 scheduler > (which will be submitted in a subsequent patch), and was suggested by Geo= rge > Dunlap and Keir Fraser in response to an earlier patch (ref: [Xen-devel] > [PATCH 1/1] Xen ARINC 653 scheduler). > > > > Thanks and regards, > > > > > > [image: cid:image001.jpg@01CAD7E0.50E45D70] > > *Kathy Hadley > *DornerWorks, Ltd. > *Embedded Systems Engineering > > *3445 Lake Eastbrook Blvd SE > Grand Rapids, MI 49546 > > Direct: 616.389.6127 > > Tel: 616.245.8369 > > Fax: 616.245.8372 > > > > Kathy.Hadley@DornerWorks.com > > www.DornerWorks.com > > [image: cid:image002.jpg@01CAD7E0.50E45D70] > > *Honored as one of the 2010 =93Michigan 50 Companies to Watch=94* > > > > diff -rupN a/xen/common/domctl.c b/xen/common/domctl.c > > --- a/xen/common/domctl.c 2010-04-07 12:12:06.000000000 -0400 > > +++ b/xen/common/domctl.c 2010-04-14 10:57:11.262796000 -0400 > > @@ -592,22 +592,35 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc > > > > case XEN_DOMCTL_scheduler_op: > > { > > - struct domain *d; > > - > > - ret =3D -ESRCH; > > - if ( (d =3D rcu_lock_domain_by_id(op->domain)) =3D=3D NULL ) > > - break; > > + if ( (op->u.scheduler_op.cmd =3D=3D > XEN_DOMCTL_SCHEDOP_put_global_info) > > + || (op->u.scheduler_op.cmd =3D=3D > XEN_DOMCTL_SCHEDOP_get_global_info) ) > > + { > > + ret =3D sched_adjust_global(&op->u.scheduler_op); > > + if (op->u.scheduler_op.cmd =3D=3D > XEN_DOMCTL_SCHEDOP_get_global_info) > > + { > > + if ( copy_to_guest(u_domctl, op, 1) ) > > + ret =3D -EFAULT; > > + } > > + } > > + else > > + { > > + struct domain *d; > > > > - ret =3D xsm_scheduler(d); > > - if ( ret ) > > - goto scheduler_op_out; > > + ret =3D -ESRCH; > > + if ( (d =3D rcu_lock_domain_by_id(op->domain)) =3D=3D NULL ) > > + break; > > > > - ret =3D sched_adjust(d, &op->u.scheduler_op); > > - if ( copy_to_guest(u_domctl, op, 1) ) > > - ret =3D -EFAULT; > > + ret =3D xsm_scheduler(d); > > + if ( ret ) > > + goto scheduler_op_out; > > + > > + ret =3D sched_adjust(d, &op->u.scheduler_op); > > + if ( copy_to_guest(u_domctl, op, 1) ) > > + ret =3D -EFAULT; > > > > - scheduler_op_out: > > - rcu_unlock_domain(d); > > + scheduler_op_out: > > + rcu_unlock_domain(d); > > + } > > } > > break; > > > > diff -rupN a/xen/common/sched_credit.c b/xen/common/sched_credit.c > > --- a/xen/common/sched_credit.c 2010-04-07 12:12:06.000000000 > -0400 > > +++ b/xen/common/sched_credit.c 2010-04-13 17:30:40.710992000 -040= 0 > > @@ -1404,6 +1404,7 @@ const struct scheduler sched_credit_def > > .wake =3D csched_vcpu_wake, > > > > .adjust =3D csched_dom_cntl, > > + .adjust_global =3D NULL, > > > > .pick_cpu =3D csched_cpu_pick, > > .do_schedule =3D csched_schedule, > > diff -rupN a/xen/common/sched_sedf.c b/xen/common/sched_sedf.c > > --- a/xen/common/sched_sedf.c 2010-04-07 12:12:06.000000000 -0400 > > +++ b/xen/common/sched_sedf.c 2010-04-13 17:30:40.710992000 -040= 0 > > @@ -1473,6 +1473,7 @@ const struct scheduler sched_sedf_def =3D > > .sleep =3D sedf_sleep, > > .wake =3D sedf_wake, > > .adjust =3D sedf_adjust, > > + .adjust_global =3D NULL, > > }; > > > > /* > > diff -rupN a/xen/common/schedule.c b/xen/common/schedule.c > > --- a/xen/common/schedule.c 2010-04-07 12:12:06.000000000 -0400 > > +++ b/xen/common/schedule.c 2010-04-14 10:57:11.262796000 -0400 > > @@ -804,6 +804,21 @@ long sched_adjust(struct domain *d, stru > > return ret; > > } > > > > +/* Adjust scheduling parameters globally */ > > +long sched_adjust_global(struct xen_domctl_scheduler_op *op) > > +{ > > + long ret; > > + > > + if ( (op->sched_id !=3D ops.sched_id) > > + || ( (op->cmd !=3D XEN_DOMCTL_SCHEDOP_put_global_info) > > + && (op->cmd !=3D XEN_DOMCTL_SCHEDOP_get_global_info) ) ) > > + return -EINVAL; > > + > > + ret =3D SCHED_OP(adjust_global, op); > > + > > + return ret; > > +} > > + > > static void vcpu_periodic_timer_work(struct vcpu *v) > > { > > s_time_t now =3D NOW(); > > diff -rupN a/xen/include/public/domctl.h b/xen/include/public/domctl.h > > --- a/xen/include/public/domctl.h 2010-04-07 12:12:06.000000000 -0400 > > +++ b/xen/include/public/domctl.h 2010-04-14 10:57:11.262796000 > -0400 > > @@ -306,6 +306,8 @@ DEFINE_XEN_GUEST_HANDLE(xen_domctl_max_v > > /* Set or get info? */ > > #define XEN_DOMCTL_SCHEDOP_putinfo 0 > > #define XEN_DOMCTL_SCHEDOP_getinfo 1 > > +#define XEN_DOMCTL_SCHEDOP_put_global_info 2 > > +#define XEN_DOMCTL_SCHEDOP_get_global_info 3 > > struct xen_domctl_scheduler_op { > > uint32_t sched_id; /* XEN_SCHEDULER_* */ > > uint32_t cmd; /* XEN_DOMCTL_SCHEDOP_* */ > > diff -rupN a/xen/include/xen/sched.h b/xen/include/xen/sched.h > > --- a/xen/include/xen/sched.h 2010-04-07 12:12:06.000000000 -0400 > > +++ b/xen/include/xen/sched.h 2010-04-13 17:30:40.710992000 -0400 > > @@ -472,6 +472,7 @@ void sched_destroy_vcpu(struct vcpu *v); > > int sched_init_domain(struct domain *d); > > void sched_destroy_domain(struct domain *d); > > long sched_adjust(struct domain *, struct xen_domctl_scheduler_op *); > > +long sched_adjust_global(struct xen_domctl_scheduler_op *); > > int sched_id(void); > > void sched_tick_suspend(void); > > void sched_tick_resume(void); > > diff -rupN a/xen/include/xen/sched-if.h b/xen/include/xen/sched-if.h > > --- a/xen/include/xen/sched-if.h 2010-04-07 12:12:06.000000000 -0400 > > +++ b/xen/include/xen/sched-if.h 2010-04-13 17:30:40.710992000 > -0400 > > @@ -76,6 +76,7 @@ struct scheduler { > > int (*pick_cpu) (struct vcpu *); > > int (*adjust) (struct domain *, > > struct xen_domctl_scheduler_op *); > > + int (*adjust_global) (struct xen_domctl_scheduler_op *); > > void (*dump_settings) (void); > > void (*dump_cpu_state) (int); > > > > > > > > > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel > > --0016367faced8ddfbc0484974cbc Content-Type: text/html; charset=windows-1252 Content-Transfer-Encoding: quoted-printable You don't have to explicitly set adjust_global to NULL for credit and s= edf.

-dulloor

On Mon, Apr 19, 2010= at 9:39 AM, Kathy Hadley <Kathy.Hadley@dornerworks.com> wrote:

Resubmittin= g now that I have been added to the Xen-devel mailing list.

=A0<= /p>

Kathy Hadle= y

DornerWorks= , Ltd.

=A0<= /p>

From:= Kathy Hadley
Sent: Friday, April 16, 2010 10:14 AM
To: 'xen-devel@lists.xensource.com'
Cc: 'Keir.Fraser@citrix.com'
Subject: [Xen-Devel] [PATCH 1/1] Add .adjust_global callback
<= /p>

=A0

This patch adds an .adjust_global scheduler callback function, which allows adjusting the global scheduler parameters (rather th= an just one domain=92s parameters).=A0 This patch supports the addition of an ARINC 653 scheduler (which will be submitted in a subsequent patch), and= was suggested by George Dunlap and Keir Fraser in response to an earlier patch (ref: [Xen-devel] [PATCH 1/1] Xen ARINC 653 scheduler).

=A0

Thanks and regards,

=A0

=A0

3D"cid:image00=

Kathy Hadley
DornerWorks, Ltd.
Embedded Systems Engineering

3445 Lake Eastbrook Blvd SE
Grand Rapids, MI=A0 49546

Direct: 616.389.6127

Tel:=A0=A0=A0=A0=A0 616.245.8369

Fax:=A0=A0=A0=A0 616.245.8372

=A0

Kathy.Hadley@DornerWorks.com

www.DornerWorks.com

3D"cid:image002.jpg@01CAD7E0.50=

Honored as one of the 2010 =93Michigan 50 Companies to Watch=94

=A0

diff -rupN a/xen/common/domctl.c b/xen/common/domctl.c

--- a/xen/common/domctl.c=A0=A0=A0=A0=A0=A0=A0 2010-04-07 12:12:06.000000000 -0400

+++ b/xen/common/domctl.c=A0=A0=A0=A0 2010-04-14 10:57:11.262796000 -0400

@@ -592,22 +592,35 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domc

=A0

=A0=A0=A0=A0 case XEN_DOMCTL_scheduler_op:

=A0=A0=A0=A0 {

-=A0=A0=A0=A0=A0=A0=A0 struct domain *d;

-

-=A0=A0=A0=A0=A0=A0=A0 ret =3D -ESRCH;

-=A0=A0=A0=A0=A0=A0=A0 if ( (d =3D rcu_lock_domain_by_id(op->domain)) =3D=3D NULL )

-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 break;

+=A0=A0=A0=A0=A0=A0=A0 if ( (op->u.scheduler_op.cmd =3D=3D XEN_DOMCTL_SCHEDOP_put_global_info= )

+=A0=A0=A0=A0=A0=A0=A0=A0=A0 || (op->u.scheduler_op.cmd =3D=3D XEN_DOMCTL_SCHEDOP_get_global_info) = )

+=A0=A0=A0=A0=A0=A0=A0 {

+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 ret =3D sched_adjust_global(&op->u.scheduler_op);

+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 if (op->u.scheduler_op.cmd =3D=3D XEN_DOMCTL_SCHEDOP_get_global_info)<= /span>

+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 {

+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 if ( copy_to_guest(u_domctl, op, 1) )

+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0 ret =3D -EFAULT;

+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 }

+=A0=A0=A0=A0=A0=A0=A0 }

+=A0=A0=A0=A0=A0=A0=A0 else

+=A0=A0=A0=A0=A0=A0=A0 {

+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 struct domain *d;

=A0

-=A0=A0=A0=A0=A0=A0=A0 ret =3D xsm_scheduler(d);

-=A0=A0=A0=A0=A0=A0=A0 if ( ret )

-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 goto scheduler_op_out;

+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 ret =3D -ESRCH;

+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 if ( (d =3D rcu_lock_domain_by_id(op->domain)) =3D=3D NULL )

+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 break;

=A0

-=A0=A0=A0=A0=A0=A0=A0 ret =3D sched_adjust(d, &op->u.scheduler_op);

-=A0=A0=A0=A0=A0=A0=A0 if ( copy_to_guest(u_domctl, op, 1) )

-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 ret =3D -EFAULT;

+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 ret =3D xsm_scheduler(d);

+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 if ( ret )

+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 goto scheduler_op_out;

+

+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 ret =3D sched_adjust(d, &op->u.scheduler_op);

+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 if ( copy_to_guest(u_domctl, op, 1) )

+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 ret =3D -EFAULT;

=A0

-=A0=A0=A0 scheduler_op_out:

-=A0=A0=A0=A0=A0=A0=A0 rcu_unlock_domain(d);

+=A0=A0=A0=A0=A0=A0=A0 scheduler_op_out:

+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 rcu_unlock_domain(d);

+=A0=A0=A0=A0=A0=A0=A0 }

=A0=A0=A0=A0 }

=A0=A0=A0=A0 break;

=A0

diff -rupN a/xen/common/sched_credit.c b/xen/common/sched_credit.c

--- a/xen/common/sched_credit.c=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 2010-04-07 12:12:06.000000000 -0400

+++ b/xen/common/sched_credit.c=A0=A0=A0=A0=A0=A0=A0 2010-04-13 17:30:40.710992000 -0400

@@ -1404,6 +1404,7 @@ const struct scheduler sched_credit_def

=A0=A0=A0=A0 .wake=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 =3D csched_vcpu_wake,

=A0

=A0=A0=A0=A0 .adjust=A0=A0=A0=A0=A0=A0=A0=A0 =3D csched_dom_cntl,

+=A0=A0=A0 .adjust_global=A0 =3D NULL,

=A0

=A0=A0=A0=A0 .pick_cpu=A0=A0=A0=A0=A0=A0 =3D csched_cpu_pick,

=A0=A0=A0=A0 .do_schedule=A0=A0=A0 =3D csched_schedule,

diff -rupN a/xen/common/sched_sedf.c b/xen/common/sched_sedf.c

--- a/xen/common/sched_sedf.c 2010-04-07 12:12:06.000000000 -0400

+++ b/xen/common/sched_sedf.c=A0=A0=A0=A0=A0=A0=A0=A0=A0 2010-04-13 17:30:40.710992000 -0400

@@ -1473,6 +1473,7 @@ const struct scheduler sched_sedf_def =3D

=A0=A0=A0=A0 .sleep=A0=A0=A0=A0=A0=A0=A0=A0=A0 =3D sedf_sleep,

=A0=A0=A0=A0 .wake=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 =3D sedf_wake,

=A0=A0=A0=A0 .adjust=A0=A0=A0=A0=A0=A0=A0=A0 =3D sedf_adjust,

+=A0=A0=A0 .adjust_global=A0 =3D NULL,

=A0};

=A0

=A0/*

diff -rupN a/xen/common/schedule.c b/xen/common/schedule.c

--- a/xen/common/schedule.c=A0=A0=A0=A0 2010-04-07 12:12:06.000000000 -0400

+++ b/xen/common/schedule.c=A0 2010-04-14 10:57:11.262796000 -0400

@@ -804,6 +804,21 @@ long sched_adjust(struct domain *d, stru

=A0=A0=A0=A0 return ret;

=A0}

=A0

+/* Adjust scheduling parameters globally */

+long sched_adjust_global(struct xen_domctl_scheduler_op *op)

+{

+=A0=A0=A0 long ret;

+

+=A0=A0=A0 if ( (op->sched_id !=3D ops.sched_id)

+=A0=A0=A0=A0=A0 || ( (op->cmd !=3D XEN_DOMCTL_SCHEDOP_put_global_info)

+=A0=A0=A0=A0=A0=A0=A0 && (op->cmd !=3D XEN_DOMCTL_SCHEDOP_get_global_info) ) )

+=A0=A0=A0=A0=A0=A0=A0 return -EINVAL;

+

+=A0=A0=A0 ret =3D SCHED_OP(adjust_global, op);

+

+=A0=A0=A0 return ret;

+}

+

=A0static void vcpu_periodic_timer_work(struct vcpu *v)

=A0{

=A0=A0=A0=A0 s_time_t now =3D NOW();

diff -rupN a/xen/include/public/domctl.h b/xen/include/public/domctl.h<= /p>

--- a/xen/include/public/domctl.h 2010-04-07 12:12:06.000000000 -0400<= /p>

+++ b/xen/include/public/domctl.h=A0=A0=A0=A0=A0=A0=A0=A0 2010-04-14 10:57:11.262796000 -0400

@@ -306,6 +306,8 @@ DEFINE_XEN_GUEST_HANDLE(xen_domctl_max_v

=A0/* Set or get info? */

=A0#define XEN_DOMCTL_SCHEDOP_putinfo 0

=A0#define XEN_DOMCTL_SCHEDOP_getinfo 1

+#define XEN_DOMCTL_SCHEDOP_put_global_info 2

+#define XEN_DOMCTL_SCHEDOP_get_global_info 3

=A0struct xen_domctl_scheduler_op {

=A0=A0=A0=A0 uint32_t sched_id;=A0 /* XEN_SCHEDULER_* */

=A0=A0=A0=A0 uint32_t cmd;=A0=A0=A0=A0=A0=A0 /* XEN_DOMCTL_SCHEDOP_* */

diff -rupN a/xen/include/xen/sched.h b/xen/include/xen/sched.h

--- a/xen/include/xen/sched.h=A0=A0=A0=A0=A0 2010-04-07 12:12:06.000000000 -0400

+++ b/xen/include/xen/sched.h=A0 2010-04-13 17:30:40.710992000 -0400

@@ -472,6 +472,7 @@ void sched_destroy_vcpu(struct vcpu *v);

=A0int=A0 sched_init_domain(struct domain *d);

=A0void sched_destroy_domain(struct domain *d);

=A0long sched_adjust(struct domain *, struct xen_domctl_scheduler_op *);

+long sched_adjust_global(struct xen_domctl_scheduler_op *);

=A0int=A0 sched_id(void);

=A0void sched_tick_suspend(void);

=A0void sched_tick_resume(void);

diff -rupN a/xen/include/xen/sched-if.h b/xen/include/xen/sched-if.h

--- a/xen/include/xen/sched-if.h=A0=A0 2010-04-07 12:12:06.000000000 -0400

+++ b/xen/include/xen/sched-if.h=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 2010-04-13 17:30:40.710992000 -0400

@@ -76,6 +76,7 @@ struct scheduler {

=A0=A0=A0=A0 int=A0=A0=A0=A0=A0=A0=A0=A0=A0 (*pick_cpu)=A0=A0=A0=A0=A0=A0 (struct vcpu *);

=A0=A0=A0=A0 int=A0=A0=A0=A0=A0=A0=A0=A0=A0 (*adjust)=A0=A0=A0=A0=A0=A0=A0=A0 (struct domain *,

=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 struct xen_domctl_scheduler_op *);

+=A0=A0=A0 int=A0=A0=A0=A0=A0=A0=A0=A0=A0 (*adjust_global)=A0 (struct xen_domctl_scheduler_op *);

=A0=A0=A0=A0 void=A0=A0=A0=A0=A0=A0=A0=A0 (*dump_settings)=A0 (void);

=A0=A0=A0=A0 void=A0=A0=A0=A0=A0=A0=A0=A0 (*dump_cpu_state) (int);

=A0<= /p>

=A0<= /p>

=A0<= /p>

=A0

=A0


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.= com
http://l= ists.xensource.com/xen-devel


--0016367faced8ddfbc0484974cbc-- --0016367faced8ddfc20484974cbd Content-Type: image/jpeg; name="image001.jpg" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: 0.0.1 /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIf IiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCABSAGcDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwBdc1SD QLXRre10LRpBNpkErvPZKzFiOTn8Kyf+Exf/AKF7QP8AwXrU3jj/AJgP/YHt/wCRrl66YxTR5Nat UjUaTPR/D/jDwneOtvrXhvTLOQ8CdLVDGfqMZX9a6LxDoaW9oL/Q9E0W6hC7mjNijMR/eUjr9K8W rsvAfjebQbtLC+lL6bK2Pm58gnuPb1FZ1KN17uhrQxbvaYf8JGv/AEL+hf8AgvSj/hI1/wChf0L/ AMAEre8f+Go7SQazYqBbzn98q9FY9GHsf5/WuIrw6k6sJcrkeqrM2f8AhI1/6F/Qv/ABKP8AhI1/ 6F/Qv/ABKxqXk8AZNZ+3qfzDsjY/4SNf+hf0L/wASj/hI1/6F/Qv/ABKl8SeG30K30+U5P2iEebn +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 --0016367faced8ddfc20484974cbd Content-Type: image/jpeg; name="image002.jpg" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: 0.0.2 /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIf IiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCABVAFIDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDrNJOm pZzXl3Ikrx52wbhuOPbuaZbeJIJ72K2vNESGKZwiuvJBPTPFYcMUaS7o0+duOOSa6a0s7fRrZdR1 THmZ/cw4yd3bA/vfypiGaraLYXgRCSjjcoPUe1WZvI0XT0nntzdXMvCQj1/+t3NYmoanLdM93MAp AGFHRRnpW74jORayryhBAP1waAIdL1W31i4exurD7FdbdybejD2plzIdPkfzYXmMR/1adX9K5LX/ ABENJki+xuPt6ZKsOfLBGDn86q+HPF8skq2mrTl2biO4c8/Rj/WsnWgp8p1RwtSVP2iR6PaXCX+i veGyFq/zDYeSMHr0qGEtJIqL1Y4qW1cf8I/Kc92/nVfTplF7FuIGTgfU1qco/VNWXS50srOyN7dl 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 miiigD//2Q== --0016367faced8ddfc20484974cbd-- --===============0647989143== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --===============0647989143==--