[PATCH 5/9] powerpc: Introduce VSX thread_struct and CONFIG_VSX

Kumar Gala galak at kernel.crashing.org
Thu Jun 19 14:58:11 EST 2008


On Jun 18, 2008, at 11:35 PM, Michael Neuling wrote:

> In message <5AEB0769-1394-4924-803D- 
> C40CAF685519 at kernel.crashing.org> you wrote
> :
>>>
>>>
>>> Index: linux-2.6-ozlabs/include/asm-powerpc/processor.h
>>> ===================================================================
>>> --- linux-2.6-ozlabs.orig/include/asm-powerpc/processor.h
>>> +++ linux-2.6-ozlabs/include/asm-powerpc/processor.h
>>> @@ -78,6 +78,7 @@ extern long kernel_thread(int (*fn)(void
>>> /* Lazy FPU handling on uni-processor */
>>> extern struct task_struct *last_task_used_math;
>>> extern struct task_struct *last_task_used_altivec;
>>> +extern struct task_struct *last_task_used_vsx;
>>> extern struct task_struct *last_task_used_spe;
>>>
>>> #ifdef CONFIG_PPC32
>>> @@ -136,8 +137,13 @@ typedef struct {
>>> 	unsigned long seg;
>>> } mm_segment_t;
>>>
>>> +#ifdef CONFIG_VSX
>>> +#define TS_FPR(i) fpvsr.fp[i].fpr
>>> +#define TS_FPRSTART fpvsr.fp
>>> +#else
>>> #define TS_FPR(i) fpr[i]
>>> #define TS_FPRSTART fpr
>>> +#endif
>>>
>>> struct thread_struct {
>>> 	unsigned long	ksp;		/* Kernel stack pointer */
>>> @@ -155,8 +161,19 @@ struct thread_struct {
>>> 	unsigned long	dbcr0;		/* debug control register values */
>>> 	unsigned long	dbcr1;
>>> #endif
>>> +#ifdef CONFIG_VSX
>>> +	/* First 32 VSX registers (overlap with fpr[32]) */
>>> +	union {
>>> +		struct {
>>> +			double fpr;
>>> +			double vsrlow;
>>> +		} fp[32];
>>> +		vector128	vsr[32];

how about:

	union {
		struct {
			double fp;
			double vsrlow;
		} fpr;
		vector128 v;
	} fpvsr[32];

>>>
>>> +	} fpvsr __attribute__((aligned(16)));
>>
>> Do we really need a union here?  what would happen if you just  
>> changed
>> the type of fpr[32] from double to vector if #CONFIG_VSX?
>>
>> I really dont like the union and think we can just make the storage
>> look opaque which is the key.  I doubt we every really care about
>> using fpr[] as a double in the kernel.
>
> I did something similar to this for the first cut of this patch, but  
> it
> made the code accessing this structure much less readable.

really, what code is that?

- k



More information about the Linuxppc-dev mailing list