All of lore.kernel.org
 help / color / mirror / Atom feed
* RE: Illegal use of reserved word in system.h
@ 2005-05-18 19:07 Gilbert, John
  2005-05-18 19:53 ` Adrian Bunk
  2005-05-18 23:42 ` Andi Kleen
  0 siblings, 2 replies; 60+ messages in thread
From: Gilbert, John @ 2005-05-18 19:07 UTC (permalink / raw)
  To: Adrian Bunk; +Cc: linux-kernel

Hi Adrian,
This looks like the source of some stupidity.
http://bugs.mysql.com/bug.php?id=555

Which is even more fun when you see this.
http://bugs.mysql.com/bug.php?id=10364

I think it's been in there a while, but only really blows up when built
under recent kernels.
I agree, it's probably not the right way to go.
John G.

-----Original Message-----
From: Adrian Bunk [mailto:bunk@stusta.de] 
Sent: Wednesday, May 18, 2005 12:02 PM
To: Gilbert, John
Cc: linux-kernel@vger.kernel.org
Subject: Re: Illegal use of reserved word in system.h

On Wed, May 18, 2005 at 11:23:33AM -0700, Gilbert, John wrote:

> Hello all,

Hi John,

>...
> Examples: The use of "new" in the macro __cmpxchg in system.h. This 
>hits  MySQL which links into the kernel headers to determine if the 
>platform  is SMP aware or not (don't ask me why.) ...

I haven't ever seen MySQL doing something that stupid (stupid because if
it's required, it _really_ has to be done at runtime).

Which version of MySQL have you seen such an SMP check in?

> John Gilbert

cu
Adrian

-- 

       "Is there not promise of rain?" Ling Tan asked suddenly out
        of the darkness. There had been need of rain for many days.
       "Only a promise," Lao Er said.
                                       Pearl S. Buck - Dragon Seed




-----------------------------------------
This message (including any attachments) may contain confidential
information intended for a specific individual and purpose.  If you are not
the intended recipient, delete this message.  If you are not the intended
recipient, disclosing, copying, distributing, or taking any action based on
this message is strictly prohibited.


^ permalink raw reply	[flat|nested] 60+ messages in thread
* RE: Illegal use of reserved word in system.h
@ 2005-05-20 17:30 Gilbert, John
  0 siblings, 0 replies; 60+ messages in thread
From: Gilbert, John @ 2005-05-20 17:30 UTC (permalink / raw)
  To: Dave Airlie, linux-kernel

Hello Dave,
I've already searched through the 2.6.11+ kernels, it's only used in
drm_bufs.c and drm.h (see previous patches). I can't vouch for any
applications, I probably should look through xorg at least (although a
name change won't effect binaries).
John Gilbert
jgg@dolby.com 

-----Original Message-----
From: Dave Airlie [mailto:airlied@gmail.com] 
Sent: Friday, May 20, 2005 4:50 AM
To: Alan Cox
Cc: Gilbert, John; Linux Kernel Mailing List
Subject: Re: Illegal use of reserved word in system.h

> 
> DRI one does seem to be a real bug.

Well not a bug :-) but lets call it a C++ incompatibility .. I'll see
how much work it is to change this everywhere it is used..  I don't
really want to break loads of userspace apps.. not that many drm apps
exist.. and probably very few of them use the virtual pointer...

Dave.


-----------------------------------------
This message (including any attachments) may contain confidential
information intended for a specific individual and purpose.  If you are not
the intended recipient, delete this message.  If you are not the intended
recipient, disclosing, copying, distributing, or taking any action based on
this message is strictly prohibited.


^ permalink raw reply	[flat|nested] 60+ messages in thread
* RE: Illegal use of reserved word in system.h
@ 2005-05-19 20:18 Gilbert, John
  0 siblings, 0 replies; 60+ messages in thread
From: Gilbert, John @ 2005-05-19 20:18 UTC (permalink / raw)
  To: Alan Cox, linux-kernel



On Mer, 2005-05-18 at 22:31, Gilbert, John wrote:
> #JG
> Sorry, I was borrowing the term from the g++ error that this created.
> I'm not trying to imply that someone should be arrested. ;^) Also, 
> like a few people have already mentioned, it doesn't effect the kernel

> at all as it's strictly a C program.

#Alan Cox 
And that wants submitting to the GNU compiler people as a bug I guess ;)

MySQL using kernel headers is a bit sad given that the same macros were
put into proper user mode headers and under even more open licenses by
the Mozilla people with Linus permission.

DRI one does seem to be a real bug.

#JG
Would that be the drm.h use of "virtual", or the lack of an standard
interrupt driven vertical sync interface?
If it's the later, I know of hundreds, if not thousands of programs that
would greatly benefit from such a feature. This, coupled with Andrew
Morton's low latency patch and the already available high resolution
timer support, and Linux could quickly become the multi-media king of
operating systems (not to mention gaming).
Thanks.

John Gilbert
jgg@dolby.com

-----------------------------------------
This message (including any attachments) may contain confidential
information intended for a specific individual and purpose.  If you are not
the intended recipient, delete this message.  If you are not the intended
recipient, disclosing, copying, distributing, or taking any action based on
this message is strictly prohibited.


^ permalink raw reply	[flat|nested] 60+ messages in thread
* RE: Illegal use of reserved word in system.h
@ 2005-05-19  1:51 Gilbert, John
  0 siblings, 0 replies; 60+ messages in thread
From: Gilbert, John @ 2005-05-19  1:51 UTC (permalink / raw)
  To: linux-kernel

Adrian Bunk writes:

that's not a check whether the system supports SMP.

Looking at the source code of MySQL, it seems MySQL does some dirty
tricks for using the inlines from asm/atomic.h in userspace.

It's _really_ wrong to do this.

#JG
So the really, really stupid, idiotic, yet quick and effective hack to
get MySQL to build under a later 2.6 kernel is as follows. In
mysql-4.1.12/include/my_global.h, right after the three #ifndef
CONFIG_SMP lines, add these lines...
#ifndef CONFIG_NR_CPUS
#define CONFIG_NR_CPUS
#endif /* CONFIG_NR_CPUS */

This way, MySQL can continue depending on the SMP atomic macros in
asm-i386 from the Linux kernel, without going into kernel space. I
strongly doubt this is truly multithreaded (or SMP) safe, but that's how
MySQL has been running since 4.0 at least. Someone in the know should
fix this, and end this silliness.

John Gilbert
Thanks for ignoring the sig.

-----------------------------------------
This message (including any attachments) may contain confidential
information intended for a specific individual and purpose.  If you are not
the intended recipient, delete this message.  If you are not the intended
recipient, disclosing, copying, distributing, or taking any action based on
this message is strictly prohibited.


^ permalink raw reply	[flat|nested] 60+ messages in thread
* RE: Illegal use of reserved word in system.h
@ 2005-05-18 21:31 Gilbert, John
  2005-05-19 17:37 ` Alan Cox
  0 siblings, 1 reply; 60+ messages in thread
From: Gilbert, John @ 2005-05-18 21:31 UTC (permalink / raw)
  To: linux-kernel

[-- Attachment #1: Type: text/plain, Size: 4093 bytes --]


Richard B. Johnson writes:

The subject line is invalid. We don't make law here.
The correct word is invalid, not illegal. There should not be any
"illegal" strings in the kernel either although they sometimes creep
in...

#JG
Sorry, I was borrowing the term from the g++ error that this created.
I'm not trying to imply that someone should be arrested. ;^) Also, like
a few people have already mentioned, it doesn't effect the kernel at all
as it's strictly a C program.

Now, if you want the names of structure members changed, you are going
to have to submit a patch. You will also have to patch anything that
accesses those member names in user-mode.
Nobody is going to do it for you.
	
#JG
They are very trivial patches, but I'll include them here.

It's also quite presumptuous of you that you think that you can instruct
any of the kernel developers on how to write header files. In addition,
any user-mode code that uses kernel headers is broken by definition.
There is no other operating system except BSD that gives user mode code
access to kernel-headers. Somehow, people have been able to write
working code using those operating systems without using kernel headers.

#JG
Including header files might be bad practice, but it's not uncommon, and
only truly broken when the kernel changes. I know many reasons for why
it's bad, but I also know that it's sometimes necessary (see below).
It's also usually not my code that breaks, but I often have to fix it if
I want to get the program to work.

There are people who can instruct you in the proper methods of
interfacing with the kernel. There are even many books that have been
written. I suggest that if you have a driver that requires access to
kernel headers, when being accessed by user-mode code, the driver is
broken. Unix/linux provides standard methods of interface to drivers.
They include open(), close(), read(), write(), mmap() and ioctl(). In
addition, there are various semaphores and signaling mechanisms like
poll(). If you are accessing devices or kernel functions in other than
these standard interfaces, your code is broken beyond all repair.

#JG
As a counter-example, I'm including a program that uses /dev/dri to
framelock to vsync. It's stupid in multiple ways but it seems to be
currently the only semi-portable way to do this under X windows. It also
uses two kernel headers, and if you read through the code, it's spin
waiting for the ioctl call to return the right value, sometimes skipping
a frame. If you patch this into a C++ program with the stock kernel
headers, it breaks (the drm.h and drm_bufs.c patches fix this).
I'd really appreciate if some kernel developer enabled the "Correct" way
to do this. If there was a way to wake a thread (a blocking read on
/dev/vsync?) on a video vsync interrupt, a lot of media players, games,
and other real-time graphics dependant programs could take less system
resources, and have better quality graphics. In the meantime however,
this mostly works today (with patched kernel headers).


Also kernel headers don't show if the system the SQL code is running on
is SMP aware and Ray was much better behaved.

#JG
According to Adrian Bunk, MySQL is using inlines from asm/atomic.h (yes,
very bad). The fact they set CONFIG_SMP manually to expose some
additional code, but not setting the cpu count variables breaks builds
under later 2.6 kernels. See http://bugs.mysql.com/bug.php?id=10364
Again, it's not my code. Tweaking a few kernel headers is easier than
fixing everyone else's bad code practices.

John Gilbert




-----------------------------------------
This message (including any attachments) may contain confidential
information intended for a specific individual and purpose.  If you are not
the intended recipient, delete this message.  If you are not the intended
recipient, disclosing, copying, distributing, or taking any action based on
this message is strictly prohibited.

[-- Attachment #2: patch.system.h --]
[-- Type: application/octet-stream, Size: 1013 bytes --]

--- system.h.orig	2005-05-17 17:42:50.000000000 -0700
+++ system.h	2005-05-17 17:43:18.000000000 -0700
@@ -244,26 +244,26 @@
 #endif
 
 static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
-				      unsigned long new, int size)
+				      unsigned long mynew, int size)
 {
 	unsigned long prev;
 	switch (size) {
 	case 1:
 		__asm__ __volatile__(LOCK_PREFIX "cmpxchgb %b1,%2"
 				     : "=a"(prev)
-				     : "q"(new), "m"(*__xg(ptr)), "0"(old)
+				     : "q"(mynew), "m"(*__xg(ptr)), "0"(old)
 				     : "memory");
 		return prev;
 	case 2:
 		__asm__ __volatile__(LOCK_PREFIX "cmpxchgw %w1,%2"
 				     : "=a"(prev)
-				     : "q"(new), "m"(*__xg(ptr)), "0"(old)
+				     : "q"(mynew), "m"(*__xg(ptr)), "0"(old)
 				     : "memory");
 		return prev;
 	case 4:
 		__asm__ __volatile__(LOCK_PREFIX "cmpxchgl %1,%2"
 				     : "=a"(prev)
-				     : "q"(new), "m"(*__xg(ptr)), "0"(old)
+				     : "q"(mynew), "m"(*__xg(ptr)), "0"(old)
 				     : "memory");
 		return prev;
 	}

[-- Attachment #3: patch.drm_bufs.c --]
[-- Type: application/octet-stream, Size: 1586 bytes --]

--- drm_bufs.c.orig	2005-03-29 14:51:51.000000000 -0800
+++ drm_bufs.c	2005-03-29 14:53:12.000000000 -0800
@@ -1163,7 +1163,7 @@
 	drm_buf_map_t __user *argp = (void __user *)arg;
 	int retcode = 0;
 	const int zero = 0;
-	unsigned long virtual;
+	unsigned long virt_map;
 	unsigned long address;
 	drm_buf_map_t request;
 	int i;
@@ -1199,7 +1199,7 @@
 #else
 			down_write( &current->mm->mmap_sem );
 #endif
-			virtual = do_mmap( filp, 0, map->size,
+			virt_map = do_mmap( filp, 0, map->size,
 					   PROT_READ | PROT_WRITE,
 					   MAP_SHARED,
 					   (unsigned long)map->offset );
@@ -1214,7 +1214,7 @@
 #else
 			down_write( &current->mm->mmap_sem );
 #endif
-			virtual = do_mmap( filp, 0, dma->byte_count,
+			virt_map = do_mmap( filp, 0, dma->byte_count,
 					   PROT_READ | PROT_WRITE,
 					   MAP_SHARED, 0 );
 #if LINUX_VERSION_CODE <= 0x020402
@@ -1223,12 +1223,12 @@
 			up_write( &current->mm->mmap_sem );
 #endif
 		}
-		if ( virtual > -1024UL ) {
+		if ( virt_map > -1024UL ) {
 			/* Real error */
-			retcode = (signed long)virtual;
+			retcode = (signed long)virt_map;
 			goto done;
 		}
-		request.virtual = (void __user *)virtual;
+		request.virt_map = (void __user *)virt_map;
 
 		for ( i = 0 ; i < dma->buf_count ; i++ ) {
 			if ( copy_to_user( &request.list[i].idx,
@@ -1249,7 +1249,7 @@
 				retcode = -EFAULT;
 				goto done;
 			}
-			address = virtual + dma->buflist[i]->offset; /* *** */
+			address = virt_map + dma->buflist[i]->offset; /* *** */
 			if ( copy_to_user( &request.list[i].address,
 					   &address,
 					   sizeof(address) ) ) {

[-- Attachment #4: patch.drm.h --]
[-- Type: application/octet-stream, Size: 415 bytes --]

--- drm.h.orig	2005-03-29 12:24:19.000000000 -0800
+++ drm.h	2005-03-29 12:25:41.000000000 -0800
@@ -411,7 +411,7 @@
  */
 typedef struct drm_buf_map {
 	int	      count;	/**< Length of the buffer list */
-	void	      __user *virtual;	/**< Mmap'd area in user-virtual */
+	void	      __user *virt_map;	/**< Mmap'd area in user-virtual */
 	drm_buf_pub_t __user *list;	/**< Buffer information */
 } drm_buf_map_t;
 

[-- Attachment #5: vsync.h --]
[-- Type: application/octet-stream, Size: 204 bytes --]

/* Another work in progress, hope to be able to sync to vertical refresh */

#ifndef _MYVSYNC_H
#define _MYVSYNC_H

int dri_init(void);
void dri_close(void);
void dri_vblank(void);

#endif /*_MYVSYNC_H*/

[-- Attachment #6: vsync.c --]
[-- Type: application/octet-stream, Size: 3132 bytes --]

/* A work in progress, hope to have a smoothly rotating curser and count as first test of vsync */
/* Done. works pretty good now, and simplified a few things as well */
/* curser rotates 60 times a second along with vsync */

#include <fcntl.h> /* where does O_RDWR come from? */
#include <stdio.h> /* where does stderr come from? */
#include <stdlib.h> /* where does stderr come from? */
#include <signal.h> /* where SIGINT lives */
#include <unistd.h> /* where close lives */
#include <errno.h> /* where errno lives */
#include <sys/ioctl.h> /* where _IOWR lives */
#include <asm-i386/msr.h> /* where rdtscll lives */

#define  __user

#include "/usr/src/linux/drivers/char/drm/drm.h" /* all the drm ioctls and structures */
#include "vsync.h" /* where vsync stuff lives */



int dri_fd = -1;

#ifdef RUNVSYNC

int
main()
{
	unsigned long long int lasttick, thistick, ticks, maxval = 0, minval = ~0, total = 0, meanval;
	int count = 1;

	if (dri_init() == -1) {
		printf("can't open dri device\n");
		exit(1);
	}
	signal(SIGINT, (__sighandler_t) dri_close);
		
	dri_vblank();
	rdtscll(lasttick);

	for (;;) {
	/* note: need to use fprintf, as printf will cache and only really print every once in a while */
		dri_vblank();
		rdtscll(thistick);
		ticks = thistick - lasttick;
		lasttick = thistick;
		maxval = (maxval > ticks) ? maxval : ticks;
		minval = (minval < ticks) ? minval : ticks;
		total += ticks;
		meanval = total / count;
		fprintf(stderr, "\\:%i\t:%llu\t:%llu\t:%llu\t:%llu   \r", count++, ticks, maxval, minval, meanval);
		
		dri_vblank();
		rdtscll(thistick);
		ticks = thistick - lasttick;
		lasttick = thistick;
		maxval = (maxval > ticks) ? maxval : ticks;
		minval = (minval < ticks) ? minval : ticks;
		total += ticks;
		meanval = total / count;
		fprintf(stderr, "|:%i\t:%llu\t:%llu\t:%llu\t:%llu   \r", count++, ticks, maxval, minval, meanval);

		dri_vblank();
		rdtscll(thistick);
		ticks = thistick - lasttick;
		lasttick = thistick;
		maxval = (maxval > ticks) ? maxval : ticks;
		minval = (minval < ticks) ? minval : ticks;
		total += ticks;
		meanval = total / count;
		fprintf(stderr, "/:%i\t:%llu\t:%llu\t:%llu\t:%llu  \r", count++, ticks, maxval, minval, meanval);

		dri_vblank();
		rdtscll(thistick);
		ticks = thistick - lasttick;
		lasttick = thistick;
		maxval = (maxval > ticks) ? maxval : ticks;
		minval = (minval < ticks) ? minval : ticks;
		total += ticks;
		meanval = total / count;
		fprintf(stderr, "-:%i\t:%llu\t:%llu\t:%llu\t:%llu   \r", count++, ticks, maxval, minval, meanval);
	}
}

#endif /* RUNVSYNC */

int dri_init(void)
{
	dri_fd = open ("/dev/dri/card0", O_RDWR);
	return (dri_fd);
}

void dri_close(void)
{
	fprintf(stderr, "\nShutting down!\n");
	if (dri_fd != -1)
		close(dri_fd);
	exit(0);
}

void dri_vblank(void)
{
	int ret;
	drm_wait_vblank_t vbl;

	vbl.request.type = _DRM_VBLANK_RELATIVE;
	vbl.request.sequence = 1;

	do {
		ret = ioctl( dri_fd, DRM_IOCTL_WAIT_VBLANK, &vbl );
	/*	vbl.request.type &= ~_DRM_VBLANK_RELATIVE; */
		vbl.request.type = (drm_vblank_seq_type_t) (vbl.request.type & ~_DRM_VBLANK_RELATIVE);
	} while (ret && errno == EINTR);
	return;
}

^ permalink raw reply	[flat|nested] 60+ messages in thread
* RE: Illegal use of reserved word in system.h
@ 2005-05-18 18:23 Gilbert, John
  2005-05-18 19:02 ` Adrian Bunk
                   ` (2 more replies)
  0 siblings, 3 replies; 60+ messages in thread
From: Gilbert, John @ 2005-05-18 18:23 UTC (permalink / raw)
  To: linux-kernel

Hello all,

Sorry about the automatic disclaimer at the bottom of these emails, it's
part of working here at Dolby. I'm sure it doesn't apply to this
discussion.

I had a few responses to this bug fix request (which I did mail to this
list), none were what I was hoping for, namely "This will be fixed in
the next release", so allow me to clarify.

The problem: Linux kernel headers use C++ reserved words as variable
names. This breaks builds of C++ code that include kernel headers.

Examples: The use of "new" in the macro __cmpxchg in system.h. This hits
MySQL which links into the kernel headers to determine if the platform
is SMP aware or not (don't ask me why.) 
	The use of "virtual" in the structure drm_buf_map in drm.h, used
by drm_bufs.c. This hits C++ code that uses the DRI interface to lock
with vertical retrace.

The solution: rename these variables, keep C++ reserved words out of
headers, make this practice part of the style guide.

I'm not advocating writing parts of the kernel in C++, or cleaning out
reserved words in the entire kernel. I know the one and only true
language is C, but for Linux to achieve world domination it needs to be
inclusive at running (and building) any software in whatever language.

As to the comments stating that "Userspace code shouldn't include kernel
headers", that's fine in the "Hello, World", but in the real world,
applications need access to devices and system resources, which means
communicating with the kernel with the proper ioctls, flags, system
configuration, data structures, etc., which are kept in kernel headers.
For this reason, breaking these apart from the application build
environment is a really bad idea, no mater what Linus Torvalds has to
say about it (see
http://uwsg.iu.edu/hypermail/linux/kernel/0007.3/0587.html). It needs to
be an fully integrated system for everything to run correctly.

Besides, I don't have time to rewrite MySQL in C to make it "correct".
I've got more important things to do. ;^)

So please, keep your headers clean.

John Gilbert
jgg@dolby.com

Ignore the sig.
###############

-----------------------------------------
This message (including any attachments) may contain confidential
information intended for a specific individual and purpose.  If you are not
the intended recipient, delete this message.  If you are not the intended
recipient, disclosing, copying, distributing, or taking any action based on
this message is strictly prohibited.


^ permalink raw reply	[flat|nested] 60+ messages in thread
* Illegal use of reserved word in system.h
@ 2005-05-18  0:51 Gilbert, John
  2005-05-18  0:57 ` Lee Revell
                   ` (2 more replies)
  0 siblings, 3 replies; 60+ messages in thread
From: Gilbert, John @ 2005-05-18  0:51 UTC (permalink / raw)
  To: linux-kernel

Hello,
The use of "new" as a variable name in the macro "__cmpxchg" breaks
builds of other programs that link to include/asm-i386/system.h
I'd like to request that this be renamed to something else, like mynew
or krnew.
Thanks.
John Gilbert
jgg@dolby.com

-----------------------------------------
This message (including any attachments) may contain confidential
information intended for a specific individual and purpose.  If you are not
the intended recipient, delete this message.  If you are not the intended
recipient, disclosing, copying, distributing, or taking any action based on
this message is strictly prohibited.


^ permalink raw reply	[flat|nested] 60+ messages in thread

end of thread, other threads:[~2005-05-20 17:30 UTC | newest]

Thread overview: 60+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-05-18 19:07 Illegal use of reserved word in system.h Gilbert, John
2005-05-18 19:53 ` Adrian Bunk
2005-05-19  2:22   ` Kyle Moffett
2005-05-19 11:28     ` Adrian Bunk
2005-05-19 12:19       ` Richard B. Johnson
2005-05-19 12:27         ` Arjan van de Ven
2005-05-19 12:47           ` Maciej W. Rozycki
2005-05-19 13:01             ` Richard B. Johnson
2005-05-19 13:47               ` Steven Rostedt
2005-05-19 14:06               ` Andreas Schwab
2005-05-19 14:15                 ` Steven Rostedt
2005-05-19 14:36                   ` Richard B. Johnson
2005-05-19 15:19                     ` Andreas Schwab
2005-05-19 15:56                       ` Steven Rostedt
2005-05-19 16:03                         ` Richard B. Johnson
2005-05-19 15:58                       ` Richard B. Johnson
2005-05-19 16:22                         ` Steven Rostedt
2005-05-19 17:06                           ` Richard B. Johnson
2005-05-19 17:36                             ` Steven Rostedt
2005-05-19 14:43                   ` Maciej W. Rozycki
2005-05-19 14:59                     ` Steven Rostedt
2005-05-20 12:23                       ` Maciej W. Rozycki
2005-05-19 14:53                   ` Arjan van de Ven
2005-05-19 14:58                     ` Maciej W. Rozycki
2005-05-19 15:06                       ` Arjan van de Ven
2005-05-19 13:56           ` Steven Rostedt
2005-05-19 17:30           ` Ben Greear
2005-05-19 17:36             ` Chris Friesen
2005-05-19 17:40               ` Ben Greear
2005-05-19 22:14                 ` Andreas Schwab
2005-05-19 22:30                   ` J.A. Magallon
2005-05-19 22:41                     ` Russell King
2005-05-19 23:10                       ` J.A. Magallon
2005-05-20  0:01                         ` Jeff Woods
2005-05-20  9:27             ` Helge Hafting
2005-05-20 16:47               ` Lee Revell
2005-05-20 16:56                 ` Ben Greear
2005-05-18 23:42 ` Andi Kleen
2005-05-18 23:59   ` Adrian Bunk
  -- strict thread matches above, loose matches on Subject: below --
2005-05-20 17:30 Gilbert, John
2005-05-19 20:18 Gilbert, John
2005-05-19  1:51 Gilbert, John
2005-05-18 21:31 Gilbert, John
2005-05-19 17:37 ` Alan Cox
2005-05-20 11:49   ` Dave Airlie
2005-05-20 16:42     ` Alan Cox
2005-05-18 18:23 Gilbert, John
2005-05-18 19:02 ` Adrian Bunk
2005-05-18 19:32 ` Richard B. Johnson
2005-05-19  1:06 ` rdunlap
2005-05-18  0:51 Gilbert, John
2005-05-18  0:57 ` Lee Revell
2005-05-18  1:19 ` Chris Wedgwood
2005-05-18  2:51 ` Steven Rostedt
2005-05-18  4:12   ` Willy Tarreau
2005-05-18 10:06   ` Patrick McFarland
2005-05-18 10:49     ` Coywolf Qi Hunt
2005-05-18 11:12     ` Richard B. Johnson
2005-05-18 21:52       ` Matan Peled
2005-05-19 11:03         ` Richard B. Johnson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.