Re: Yet another ccio fix idea?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> However, since it's contained in a u64 pointer, it must reasonably be on
> an 8 byte boundary (or be triggering an unaligned poiner error) and
> therefore shouldn't span multiple cache lines anyway.

It's not a hard rule that u64 objects be aligned on an 8 byte
boundary as the PA 1.x architecture doesn't have 64-bit integer
loads and stores.  A u64 object has to be loaded with two
32-bit loads and lives in a pair of 32-bit registers.  As a 
result, an unaligned u64 object will only trigger an unaligned
pointer error if it is not aligned on a 4 byte boundary.

However in GCC, we force u64 alignment (except in packed structs)
to a 8 byte boundary.  This allows casting pointers between long
longs and doubles.  It also simplifies the GCC backend as otherwise
special treatment would be needed for long longs.  There's been some
discussion of this for x86 recently.

In this situation, the alignment of pdir's depends on how they
were originally declared.  If declared as long long, GCC will give
them 8 byte alignment, so the two words should always be in the
same cache line.  On the otherhand, if the pdir is declared as
a pair of 32-bit words, the pdir might span two cache lines.

Dave
-- 
J. David Anglin                                  dave.anglin@xxxxxxxxxxxxxx
National Research Council of Canada              (613) 990-0752 (FAX: 952-6602)
--
To unsubscribe from this list: send the line "unsubscribe linux-parisc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux SoC]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux