Messages in this thread | | | Date | Thu, 19 Nov 2015 10:33:54 +0000 | From | Russell King - ARM Linux <> | Subject | Re: [PATCH] clocksource: Store reg field within struct clocksource |
| |
On Thu, Nov 19, 2015 at 10:27:33AM +0100, Marc Gonzalez wrote: > On 18/11/2015 18:21, Russell King - ARM Linux wrote: > > On Wed, Nov 18, 2015 at 02:43:34PM +0100, Marc Gonzalez wrote: > > > >> Since 'struct clocksource' is ____cacheline_aligned, gcc must insert > >> a lot of padding between reg and clksrc in 'struct clocksource_mmio' > >> (for example, L1_CACHE_BYTES = 64 on ARMv7). > >> > >> Storing reg within 'struct clocksource' removes unnecessary padding, > >> and reg can then be grouped with other hot data. A nice side-effect > >> of this patch is making container_of() unnecessary, which makes the > >> code a bit simpler. > >> > >> On 32-bit platforms, reg fits in the padding between read and mask, > >> meaning no downside from storing it there. > > > > Just swap the order of 'reg' and 'clksrc'. > > You already suggested that the last time (April 1st). > What problem is this supposed to solve? > Swapping the fields does not change the amount of padding required, > and does not place reg close to the hot data. > > On a 32-bit platform, with L1_CACHE_BYTES = 64 > > sizeof(struct unaligned_clocksource) = 80 > sizeof(struct clocksource) = 128 > sizeof(struct clocksource_mmio) = 192, reg at +0, clksrc at +64 > sizeof(struct clocksource_mmio2) = 192, reg at +128, clksrc at +0 > > Same amount of padding.
Maybe the ____cacheline_aligned is inappropriate then, because it means any wrapping of struct clocksource has exactly the same problem.
-- FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up according to speedtest.net.
| |