lkml.org 
[lkml]   [2006]   [Mar]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH] simplify update_times (avoid jiffies/jiffies_64 aliasing problem)
Andi Kleen <ak@muc.de> 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 majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2006-03-04 12:44    [from the cache]
©2003-2011 Jasper Spaans