Re: [PATCH] simplify update_times (avoid jiffies/jiffies_64 aliasing problem)

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

 



Andi Kleen <[email protected]> wrote:
>
> > b) On 64-bit machines jiffies and jiffies_64 always have the same
> >    address (don't they?) Is the compiler really going to move a read of an
> >    absolute address ahead of a modification of the same address?
> > 
> >    <looks>
> > 
> >    The address of jiffies isn't known until link time, so yup, the risk
> >    is there.
> 
> Yes maybe it would be better to just use  #define there.
> jiffies_64 always was a bit too clever.

hm.   It's actually rather hard.

One could do something like:

extern u64 __jiffy_data jiffies_64;
#define jiffies (*(u32 *)((long)&jiffies_64 + 2))

or


#if BITS_PER_LONG == 64
extern u64 __jiffy_data jiffies;
#define jiffies_64 jiffies
#else
extern union jiffy_thing {
#ifdef BIG_ENDIAN
	struct {
		u32 pad;
		u32 jiffies;
	},
	u64 jiffies_64;
#else
	u64 jiffies_64;
	struct {
		u32 pad;
		u32 jiffies;
	},
#endif
} __jiffy_data jiffies_thing;
#define jiffies_64 jiffies_thing.jiffies_64
#define jiffies jiffies_thing.jiffies
#endif

But then any code which uses `jiffies' as a local variable will explode.  I
guess we should rename those anyway.  include/linux/cyclades.h is one such.

Making `jiffies_64' a #define is less risky, but that doesn't work for
32-bit.

> > 
> > c) jiffies is declared volatile.  In practice, if I know my gcc, it's
> >    just not going to play these reordering games with a volatile.
> > 
> >    If that's true, and if some standard (presumably c99) says that it
> >    must be true then I don't think we need the patch.
> 
> The standards definition of volatile is unfortunately quite vague,
> so at least from this side you cannot rely on much.

Yup.

> Also I assume Atsushi-san did the patch because he saw a real problem?

I don't know.  I suspect its only observeable effect would be an
off-by-one-tick in wall_jiffies which will cancel out whereever anyone
takes a delta.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux