public inbox for linux-ia64@vger.kernel.org
 help / color / mirror / Atom feed
* Re: [11/17][PATCH] kvm/ia64: add processor virtulization support.
       [not found] <42DFA526FC41B1429CE7279EF83C6BDCFF7EF5@pdsmsx415.ccr.corp.intel.com>
@ 2008-03-28 14:06 ` Akio Takebe
  2008-03-29  2:20   ` Zhang, Xiantao
  0 siblings, 1 reply; 2+ messages in thread
From: Akio Takebe @ 2008-03-28 14:06 UTC (permalink / raw)
  To: Zhang, Xiantao, Avi Kivity, Luck, Tony, Xu, Anthony, Jes Sorensen,
	kv

Hi, Xiantao and Anthony

>+void getfpreg(unsigned long regnum, struct ia64_fpreg *fpval,
>+				struct kvm_pt_regs *regs)
>+{
>+	/* Take floating register rotation into consideration*/
>+	if (regnum >= IA64_FIRST_ROTATING_FR)
>+		regnum = IA64_FIRST_ROTATING_FR + fph_index(regs,
>regnum);
>+#define CASE_FIXED_FP(reg)			\
>+	case  (reg) :				\
>+		ia64_stf_spill(fpval, reg);	\
>+	break
>+
>+	switch (regnum) {
>+		CASE_FIXED_FP(0);
>+		CASE_FIXED_FP(1);
>+		CASE_FIXED_FP(2);
>+		CASE_FIXED_FP(3);
>+		CASE_FIXED_FP(4);
>+		CASE_FIXED_FP(5);
>+
>+		CASE_FIXED_FP(6);
>+		CASE_FIXED_FP(7);
>+		CASE_FIXED_FP(8);
>+		CASE_FIXED_FP(9);
>+		CASE_FIXED_FP(10);
>+		CASE_FIXED_FP(11);
>+
Is this correct ? Though I don't know why xen do so.
In the case of Xen, the above parts are;

#define CASE_SAVED_FP(reg)                                      \
        case reg:                                               \
                fpval->u.bits[0] = regs->f##reg.u.bits[0];      \
                fpval->u.bits[1] = regs->f##reg.u.bits[1];      \
                break

                CASE_SAVED_FP(6);
                CASE_SAVED_FP(7);
                CASE_SAVED_FP(8);
                CASE_SAVED_FP(9);
                CASE_SAVED_FP(10);
                CASE_SAVED_FP(11);


>+void setfpreg(unsigned long regnum, struct ia64_fpreg *fpval,
>+					struct kvm_pt_regs *regs)
>+{
>+	/* Take floating register rotation into consideration*/
>+	if (regnum >= IA64_FIRST_ROTATING_FR)
>+		regnum = IA64_FIRST_ROTATING_FR + fph_index(regs,
>regnum);
>+
>+#define CASE_FIXED_FP(reg)			\
>+	case (reg) :				\
>+		ia64_ldf_fill(reg, fpval);	\
>+	break
>+
>+	switch (regnum) {
>+		CASE_FIXED_FP(2);
>+		CASE_FIXED_FP(3);
>+		CASE_FIXED_FP(4);
>+		CASE_FIXED_FP(5);
>+
>+		CASE_FIXED_FP(6);
>+		CASE_FIXED_FP(7);
>+		CASE_FIXED_FP(8);
>+		CASE_FIXED_FP(9);
>+		CASE_FIXED_FP(10);
>+		CASE_FIXED_FP(11);
>+
ditto.

#define CASE_RESTORED_FP(reg)                                   \
        case reg:                                               \
                regs->f##reg.u.bits[0] = fpval->u.bits[0];      \
                regs->f##reg.u.bits[1] = fpval->u.bits[1] ;     \
                break

                CASE_RESTORED_FP(6);
                CASE_RESTORED_FP(7);
                CASE_RESTORED_FP(8);
                CASE_RESTORED_FP(9);
                CASE_RESTORED_FP(10);
                CASE_RESTORED_FP(11);


Best Regards,

Akio Takebe


^ permalink raw reply	[flat|nested] 2+ messages in thread

* RE: [11/17][PATCH] kvm/ia64: add processor virtulization support.
  2008-03-28 14:06 ` [11/17][PATCH] kvm/ia64: add processor virtulization support Akio Takebe
@ 2008-03-29  2:20   ` Zhang, Xiantao
  0 siblings, 0 replies; 2+ messages in thread
From: Zhang, Xiantao @ 2008-03-29  2:20 UTC (permalink / raw)
  To: linux-ia64

Akio Takebe wrote:
> Hi, Xiantao and Anthony
> 
>> +void getfpreg(unsigned long regnum, struct ia64_fpreg *fpval,
>> +				struct kvm_pt_regs *regs)
>> +{
>> +	/* Take floating register rotation into consideration*/
>> +	if (regnum >= IA64_FIRST_ROTATING_FR)
>> +		regnum = IA64_FIRST_ROTATING_FR + fph_index(regs,
>> regnum);
>> +#define CASE_FIXED_FP(reg)			\
>> +	case  (reg) :				\
>> +		ia64_stf_spill(fpval, reg);	\
>> +	break
>> +
>> +	switch (regnum) {
>> +		CASE_FIXED_FP(0);
>> +		CASE_FIXED_FP(1);
>> +		CASE_FIXED_FP(2);
>> +		CASE_FIXED_FP(3);
>> +		CASE_FIXED_FP(4);
>> +		CASE_FIXED_FP(5);
>> +
>> +		CASE_FIXED_FP(6);
>> +		CASE_FIXED_FP(7);
>> +		CASE_FIXED_FP(8);
>> +		CASE_FIXED_FP(9);
>> +		CASE_FIXED_FP(10);
>> +		CASE_FIXED_FP(11);
>> +
> Is this correct ? Though I don't know why xen do so.
> In the case of Xen, the above parts are;
>
> #define CASE_SAVED_FP(reg)                                      \
>         case reg:                                               \
>                 fpval->u.bits[0] = regs->f##reg.u.bits[0];      \
>                 fpval->u.bits[1] = regs->f##reg.u.bits[1];      \
>                 break
> 
>                 CASE_SAVED_FP(6);
>                 CASE_SAVED_FP(7);
>                 CASE_SAVED_FP(8);
>  
Hi, Akio
	Current should be correct, because for every host<-> guest
switch, we switched FPU accordingly.  So the fpu register file is
dedicated for current vm, getting it from physical register should be
right.  But for xen's code, due to lazy fpu save/restore, current fpu
register file maybe not belong to current vcpu, so need to load it from
stack. Thanks
Xiantao 

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2008-03-29  2:20 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <42DFA526FC41B1429CE7279EF83C6BDCFF7EF5@pdsmsx415.ccr.corp.intel.com>
2008-03-28 14:06 ` [11/17][PATCH] kvm/ia64: add processor virtulization support Akio Takebe
2008-03-29  2:20   ` Zhang, Xiantao

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox