[RFC] New hcall mechanism Was: [PATCH 0/3] powerpc: Instrument Hypervisor Calls

Jimi Xenidis jimix at watson.ibm.com
Thu Jun 15 00:39:55 EST 2006


Looking at this patch set, it reminds me how IMNSHO the plpar calling  
mechanism in Linux are a little arcane.
When we were writing "toy" OSes for hypervisors we had the following  
assembly:

### NOTE: this code does not accommodate passing args in r11 & r12  
(arg 8 and 9),
### and 'in' could be used to streamline the fetching of r11 & r12  
from the stack where the ABI has placed them.
#define PAPR(in, out, name, func_code)	\
	_GLOBAL(name);	 		\
         /* profiling code here */		\
	std r3,-GPR_WIDTH(r1); 		\
	li r3,func_code; 		\
	HSC;				\
         /* profiling code here */		\
	ld r12,-GPR_WIDTH(r1);		\
	cmpi 0,r12,0;			\
         bne ret	## out;	/* only store regs if r12 != NULL,  
indicating the caller does not care about the return value */ \
	b ret0

ret7:	std r10, 6 * GPR_WIDTH(r12)
ret6:	std r9, 5 * GPR_WIDTH(r12)
ret5:	std r8, 4 * GPR_WIDTH(r12)
ret4:	std r7, 3 * GPR_WIDTH(r12)
ret3:	std r6, 2 * GPR_WIDTH(r12)
ret2:	std r5, 1 * GPR_WIDTH(r12)
ret1:	std r4, 0 * GPR_WIDTH(r12)
	nop
ret0:	blr
	
PAPR(4, 1,papr_enter, H_ENTER)
...

This allowes for the C interface for H_ENTER to be:
   long papr_enter(ulong *slot, ulong flags, ulong hpte_group, ulong  
hpte_v, ulong hpte_r);

making the call:
   ulong slot;
   lapr_rc = papr_enter(&slot, flags, hpte_group, hpte_v, hpte_r);
Rather than:
   ulong slot, dummy0, dummy1;
   lpar_rc = plpar_hcall(H_ENTER, flags, hpte_group, hpte_v, hpte_r,  
&slot, &dummy0, &dummy1);

The latter saving pointers to stack variables on the stack before the  
call.

A mechanism such as this could also make the profiling far simpler  
and efficient as the profiling code get generated by the PAPR() macro  
above.
I is also possible to generate the prototypes from the PAPR()  
statements above.


Comments welcome?
-JX

On Jun 13, 2006, at 11:47 PM, Mike Kravetz wrote:

> This patch series adds instrumentation to Hypervisor calls.  Code and
> ideas were taken from the patch set provided by Christopher Yeoh.
>
> The idea is to put all instrumentation code behind a configuration
> option so that it can easily be added/removed.  The instrumentation
> code is kept to a minimum in the hopes that it's impact to performance
> will not be noticed.  Statistics are made available via files in  
> sysfs.
>
> -- 
> Mike
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev at ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-dev




More information about the Linuxppc-dev mailing list