* Re: Intel P6 vs P7 system call performance
From: Terje Eggestad @ 2002-12-11 12:48 UTC (permalink / raw)
To: H. Peter Anvin; +Cc: linux-kernel, Dave Jones
It get even worse with Hammer. When you run hammer in compatibility mode
(32 bit app on a 64 bit OS) the sysenter is an illegal instruction.
Since Intel don't implement syscall, there is no portable sys*
instruction for 32 bit apps. You could argue that libc hides it for you
and you just need libc to test the host at startup (do I get a sigill if
I try to do getpid() with sysenter? syscall? if so we uses int80 for
syscalls). But not all programs are linked dyn.
Too bad really, I tried the sysenter patch once, and the gain (on PIII
and athlon) was significant.
Fortunately the 64bit libc for hammer uses syscall.
PS: rdtsc on P4 is also painfully slow!!!
TJ
On man, 2002-12-09 at 20:46, H. Peter Anvin wrote:
> Followup to: <20021209193649.GC10316@suse.de>
> By author: Dave Jones <davej@codemonkey.org.uk>
> In newsgroup: linux.dev.kernel
> >
> > On Mon, Dec 09, 2002 at 05:48:45PM +0000, Linus Torvalds wrote:
> >
> > > P4's really suck at system calls. A 2.8GHz P4 does a simple system call
> > > a lot _slower_ than a 500MHz PIII.
> > >
> > > The P4 has problems with some other things too, but the "int + iret"
> > > instruction combination is absolutely the worst I've seen. A 1.2GHz
> > > Athlon will be 5-10 times faster than the fastest P4 on system call
> > > overhead.
> >
> > Time to look into an alternative like SYSCALL perhaps ?
> >
>
> SYSCALL is AMD. SYSENTER is Intel, and is likely to be significantly
> faster. Unfortunately SYSENTER is also extremely braindamaged, in
> that it destroys *both* the EIP and the ESP beyond recovery, and
> because it's allowed in V86 and 16-bit modes (where it will cause
> permanent data loss) which means that it needs to be able to be turned
> off for things like DOSEMU and WINE to work correctly.
>
> -hpa
--
_________________________________________________________________________
Terje Eggestad mailto:terje.eggestad@scali.no
Scali Scalable Linux Systems http://www.scali.com
Olaf Helsets Vei 6 tel: +47 22 62 89 61 (OFFICE)
P.O.Box 150, Oppsal +47 975 31 574 (MOBILE)
N-0619 Oslo fax: +47 22 62 89 51
NORWAY
_________________________________________________________________________
^ permalink raw reply
* Re: [LARTC] Bandwidth by port
From: Stef Coene @ 2002-12-11 12:38 UTC (permalink / raw)
To: lartc
In-Reply-To: <marc-lartc-103961486811331@msgid-missing>
On Wednesday 11 December 2002 09:19, David Coello wrote:
> Hi
>
> I am trying to limit the bandwidth by port buy without success.
>
> The code is :
>
> # Disciplina de encolamiento
> tc qdisc add dev eth1 root handle 10: cbq bandwidth 10Mbit avpkt 1000 mpu
> 64
>
> # Clase
> tc class add dev eth1 parent 10:0 classid 10:1 cbq bandwidth 1kbps rate
> 1kbps allot 1514 prio 1 maxburst 10 avpkt 100 bounded isolated
>
> # Filtro
> # tc filter add dev eth1 parent 10:0 protocol ip handle 3 fw classid 10:1
>
> tc filter add dev eth1 parent 10:0 protocol ip u32 match ip dst
> 0.0.0.0 match ip sport 20 0xffff flowid 10:1
> tc filter add dev eth1 parent 10:0 protocol ip u32 match ip dst
> 0.0.0.0 match ip sport 21 0xffff flowid 10:1
>
> What am i making bad? I have probed with mark&iptables but with identical
> result. When i make ftp i download without band limit.
Ftp is very difficult to shape because it can use dynamic ports. Try using
active or passive ftp. I'm not sure wich one uses fixed ports.
Stef
--
stef.coene@docum.org
"Using Linux as bandwidth manager"
http://www.docum.org/
#lartc @ irc.oftc.net
_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/
^ permalink raw reply
* acpi on a Samsung V20 with mandrake 9.0
From: Parrenin Frédéric @ 2002-12-11 12:38 UTC (permalink / raw)
To: acpi-devel
Hello,
I am not an expert of acpi, so excuse me if my questions are basic.
(but there is no acpi-users mailing list, just an acpi-devel one...)
I try to use acpi on my laptop Samsung V20, which is supposed to support
acpi 1.0b.
I have installed Mandrake 9.0, but because acpi is not compiled in their
kernel, I have upgraded to the 2.4.20 kernel from mandrake (package
kernel-2.4.20.1mdk-1-1mdk). I have also tried to recompile that kernel.
Acpi seems to work, because I have a /proc/acpi directory with several
files and subdirectories. I have two main problems :
- I can't control the state of my battery : the subdirectory
/proc/acpi/battery is empty.
- I can't enter a suspend to ram mode. I have tried
cat -n 1 > /proc/acpi/suspend
but nothing appears.
What is wrong in my configuration ?
Many thanks.
Frederic
-------------------------------------------------------
This sf.net email is sponsored by:
With Great Power, Comes Great Responsibility
Learn to use your power at OSDN's High Performance Computing Channel
http://hpc.devchannel.org/
^ permalink raw reply
* Re: BUG in the PCNET32 ethernet driver
From: Carsten Langgaard @ 2002-12-11 12:37 UTC (permalink / raw)
To: Jeff Garzik, Ralf Baechle, linux-mips, tsbogend, linux-net,
kevink
In-Reply-To: <3DD2BA39.E1457D67@mips.com>
What happen regarding this issue, did you apply my patch or ?
/Carsten
Carsten Langgaard wrote:
> Jeff Garzik wrote:
>
> > Carsten Langgaard wrote:
> >
> > > Jeff Garzik wrote:
> > >
> > >
> > > >Carsten Langgaard wrote:
> > > >
> > > >
> > > >>@@ -1316,13 +1316,13 @@
> > > >> if ((newskb = dev_alloc_skb (PKT_BUF_SZ))) {
> > > >> skb_reserve (newskb, 2);
> > > >> skb = lp->rx_skbuff[entry];
> > > >>- pci_unmap_single(lp->pci_dev,
> > > lp->rx_dma_addr[entry], skb->len,
> > > >>PCI_DMA_FROMDEVICE);
> > > >>+ pci_unmap_single(lp->pci_dev,
> > > lp->rx_dma_addr[entry], pkt_len +2,
> > > >>PCI_DMA_FROMDEVICE);
> > > >> skb_put (skb, pkt_len);
> > > >> lp->rx_skbuff[entry] = newskb;
> > > >
> > > >Why does this line not reference PKT_BUF_SZ when all the others do?
> > >
> > >
> > > In this case we know the size of the packet and therefore only need to
> > > handle that.
> > > In the other cases we don't know have big the receiving packet is
> > > going to be, so we has to
> > > take care of the whole buffer.
> >
> > Well, it's a seriously bad idea to pass different values to map and
> > unmap steps, because on some platforms you could wind up telling the
> > IOMMU or some other allocator that you are allocating N bytes, but
> > freeing N-M bytes. IOW, a leak.
>
> Ok, fine.
> There is actually another place in the code that also need a fix then.
>
> >
> > Now that that's been clarified, please fix up the patch and resubmit...
> > with this issue fixed, it looks apply-able.
> >
>
> I have made the change and attached a new patch.
>
> >
> > Jeff
>
> --
> _ _ ____ ___ Carsten Langgaard Mailto:carstenl@mips.com
> |\ /|||___)(___ MIPS Denmark Direct: +45 4486 5527
> | \/ ||| ____) Lautrupvang 4B Switch: +45 4486 5555
> TECHNOLOGIES 2750 Ballerup Fax...: +45 4486 5556
> Denmark http://www.mips.com
>
> ------------------------------------------------------------------------
> Index: drivers/net/pcnet32.c
> ===================================================================
> RCS file: /home/cvs/linux/drivers/net/pcnet32.c,v
> retrieving revision 1.33.2.3
> diff -u -r1.33.2.3 pcnet32.c
> --- drivers/net/pcnet32.c 6 Oct 2002 20:49:43 -0000 1.33.2.3
> +++ drivers/net/pcnet32.c 13 Nov 2002 20:38:39 -0000
> @@ -981,7 +981,7 @@
> }
> skb_reserve (rx_skbuff, 2);
> }
> - lp->rx_dma_addr[i] = pci_map_single(lp->pci_dev, rx_skbuff->tail, rx_skbuff->len, PCI_DMA_FROMDEVICE);
> + lp->rx_dma_addr[i] = pci_map_single(lp->pci_dev, rx_skbuff->tail, PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
> lp->rx_ring[i].base = (u32)le32_to_cpu(lp->rx_dma_addr[i]);
> lp->rx_ring[i].buf_length = le16_to_cpu(-PKT_BUF_SZ);
> lp->rx_ring[i].status = le16_to_cpu(0x8000);
> @@ -1316,13 +1316,13 @@
> if ((newskb = dev_alloc_skb (PKT_BUF_SZ))) {
> skb_reserve (newskb, 2);
> skb = lp->rx_skbuff[entry];
> - pci_unmap_single(lp->pci_dev, lp->rx_dma_addr[entry], skb->len, PCI_DMA_FROMDEVICE);
> + pci_unmap_single(lp->pci_dev, lp->rx_dma_addr[entry], PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
> skb_put (skb, pkt_len);
> lp->rx_skbuff[entry] = newskb;
> newskb->dev = dev;
> lp->rx_dma_addr[entry] =
> pci_map_single(lp->pci_dev, newskb->tail,
> - newskb->len, PCI_DMA_FROMDEVICE);
> + PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
> lp->rx_ring[entry].base = le32_to_cpu(lp->rx_dma_addr[entry]);
> rx_in_place = 1;
> } else
> @@ -1349,13 +1349,10 @@
> if (!rx_in_place) {
> skb_reserve(skb,2); /* 16 byte align */
> skb_put(skb,pkt_len); /* Make room */
> - pci_dma_sync_single(lp->pci_dev,
> - lp->rx_dma_addr[entry],
> - pkt_len,
> - PCI_DMA_FROMDEVICE);
> eth_copy_and_sum(skb,
> (unsigned char *)(lp->rx_skbuff[entry]->tail),
> pkt_len,0);
> + lp->rx_dma_addr[entry] = pci_map_single(lp->pci_dev, lp->rx_skbuff[entry]->tail, PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
> }
> lp->stats.rx_bytes += skb->len;
> skb->protocol=eth_type_trans(skb,dev);
> @@ -1406,7 +1403,7 @@
> for (i = 0; i < RX_RING_SIZE; i++) {
> lp->rx_ring[i].status = 0;
> if (lp->rx_skbuff[i]) {
> - pci_unmap_single(lp->pci_dev, lp->rx_dma_addr[i], lp->rx_skbuff[i]->len, PCI_DMA_FROMDEVICE);
> + pci_unmap_single(lp->pci_dev, lp->rx_dma_addr[i], PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
> dev_kfree_skb(lp->rx_skbuff[i]);
> }
> lp->rx_skbuff[i] = NULL;
--
_ _ ____ ___ Carsten Langgaard Mailto:carstenl@mips.com
|\ /|||___)(___ MIPS Denmark Direct: +45 4486 5527
| \/ ||| ____) Lautrupvang 4B Switch: +45 4486 5555
TECHNOLOGIES 2750 Ballerup Fax...: +45 4486 5556
Denmark http://www.mips.com
^ permalink raw reply
* Re: [Dri-devel] Re: 2.4.20 AGP for I845 wrong ?
From: Keith Whitwell @ 2002-12-11 12:45 UTC (permalink / raw)
To: Dave Jones
Cc: Nicolas ASPERT, Margit Schubert-While, linux-kernel, faith,
dri-devel
In-Reply-To: <20021211132059.C11689@suse.de>
> DRI folks, this seems like duplication given that this data is available
> in agpgart. How about changing this to read whatever agpgart has set in
> .chipset_name ?
>
And it looks like the mechanism that drm uses for quering agp doesn't return
the string in question. (I don't really understand the mechanism these two
modules use to talk to each other).
In any case I don't think the string in the informational is very useful --
it's a potentially inaccurate translation of state from *another* module, so
I'm just removing the lot.
Keith
^ permalink raw reply
* Re: [LARTC] how to get the latency down on maxed out classes? + extra question
From: Stef Coene @ 2002-12-11 12:35 UTC (permalink / raw)
To: lartc
In-Reply-To: <marc-lartc-103955243525543@msgid-missing>
> I need the low-latency class for games (CounterStrike), so I can't afford
> to drop any packets (I guess). On the other hand it typically doesn't use
> too much bandwidth, so it can lend the rest.
>
> I had read devik's manual (I've read a lot on htb stuff, but I can't claim
> to remember it all, let alone put it in practise) but I don't see you
> statement "A lower prio is good for delays IF the class with the lower prio
> never sends more then it's rate (so it's never overlimited)." in it. In
> fact, it says that the higher prio class gets "excess bandwidth first",
> which is what I want.
http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm#prio
At the end of the paragraph, Devik did some tests. He gave www lower prio and
yes, the delays are very low. But www is never sending more then the rate.
At point 7, he starts sending more data to the www class then the configured
rate. And see what happens, the www delay increases a lot (blue line) and
the delay of the other classes drops nearly to zero (yellow line).
> But you are probably right that my solution is way too crude for practical
> purposes. Maybe I should only be using prio for the game-packets and put
> all other classes in the same prio (which is also mentioned at devik's
> site).
If it works, why changing ??
> Like I suspected, my current script is very basic, I need quite some more
> work on it.
>
> Anyway, thanks again Stef, you're doing a great job!
No problem.
Stef
--
stef.coene@docum.org
"Using Linux as bandwidth manager"
http://www.docum.org/
#lartc @ irc.oftc.net
_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/
^ permalink raw reply
* Re: [Dri-devel] Re: 2.4.20 AGP for I845 wrong ?
From: Keith Whitwell @ 2002-12-11 12:38 UTC (permalink / raw)
To: Dave Jones
Cc: Nicolas ASPERT, Margit Schubert-While, linux-kernel, faith,
dri-devel
In-Reply-To: <20021211132059.C11689@suse.de>
Dave Jones wrote:
> On Wed, Dec 11, 2002 at 01:07:45PM +0100, Nicolas ASPERT wrote:
> > IIRC, the 845G is a "new" version of the 830MP chipset (it had been
> > added by Abraham vd Merwe & Graeme Fisher some months ago), but acts
> > basically just as the 830MP. Therefore the entry is correct.... Or maybe
> > if it gets confusing adding a comment would not hurt...
>
> I'll check the chipset docs when I get time, and add a comment if
> necessary. No-one seems to be complaining that it isn't working,
> so I'm inclined to believe your diagnosis is correct.
>
> > > Also in drivers/char/drm/drm_agpsupport.h, the switch statement at 262
> > > is missing the
> > > cases for INTEL_I830_M, INTEL_I845_G.
> > That's true. It is also missing in 2.5.51.
> > I attach two patches, one for 2.4.21-pre1 and one for 2.5.51 that should
> > fix this.
> > diff -ru linux-2.5.51.clean/drivers/char/drm/drm_agpsupport.h linux-2.5.51/drivers/char/drm/drm_agpsupport.h
> > --- linux-2.5.51.clean/drivers/char/drm/drm_agpsupport.h Tue Dec 10 03:45:39 2002
> > +++ linux-2.5.51/drivers/char/drm/drm_agpsupport.h Wed Dec 11 12:55:08 2002
> > @@ -271,10 +271,12 @@
> > #if LINUX_VERSION_CODE >= 0x02040f /* KERNEL_VERSION(2,4,15) */
> > case INTEL_I820: head->chipset = "Intel i820"; break;
> > #endif
> > + case INTEL_I830_M: head->chipset = "Intel i830M"; break;
> > case INTEL_I840: head->chipset = "Intel i840"; break;
> > #if LINUX_VERSION_CODE >= 0x02040f /* KERNEL_VERSION(2,4,15) */
> > case INTEL_I845: head->chipset = "Intel i845"; break;
> > #endif
> > + case INTEL_I845: head->chipset = "Intel i845G"; break;
> > case INTEL_I850: head->chipset = "Intel i850"; break;
> > case INTEL_460GX: head->chipset = "Intel 460GX"; break;
>
> DRI folks, this seems like duplication given that this data is available
> in agpgart. How about changing this to read whatever agpgart has set in
> .chipset_name ?
>
> Keeping these two lists in sync seems somewhat pointless.
Yes, it's not even clear what particular use the string is. It looks like
it's just for the print statement at the bottom of the switch. It would be
safe to remove the whole thing -- agpgart has already printed out what
hardware *it's* dealing with.
Keith
^ permalink raw reply
* Re: ax25 kernel problem sometimes accur
From: Ralf Baechle DO1GRB @ 2002-12-11 12:30 UTC (permalink / raw)
To: Tomi Manninen OH2BNS; +Cc: linux-hams
In-Reply-To: <Pine.HPX.4.10.10212111219220.22086-100000@saturn.trs.ntc.nokia.com>
On Wed, Dec 11, 2002 at 12:29:12PM +0200, Tomi Manninen OH2BNS wrote:
> Ok, I understand. Anyway some kind of progress report would be nice. Even
> something like: "don't hold your breath", if that is appropriate... :-)
Holding breath is definately something that could negativly impact your
health ;-)
> I have gotten surprisingly many private queries about this lately, so to
> recap what I have understood so far: the 2.4 code is bad, full of races,
> works only if treated nicely. Your SOCKOPS_WRAP removal obviously makes
> things even worse until you redo the locking stuff. When that is done we
> have a perfect ax.25 stack again. Right? ;-)
In some sense the improments that are necessary to make the AX.25 stack
"future proof" are ridiculous. AX.25 is about the worst protocol design
I've ran over in my life, so making a multi-threaded implementation of it
is an amusing thought. But the other legacy protocols like Appletalk
are going through the same pain ...
73 de DO1GRB op Ralf
--
Loc. JN47BS / CQ 14 / ITU 28 / DOK A21
^ permalink raw reply
* Re: [TRIVIAL PATCH] FBDEV: Small impact patch for fbdev
From: Petr Vandrovec @ 2002-12-11 12:20 UTC (permalink / raw)
To: James Simmons
Cc: Linux Fbdev development list, Linux Kernel Mailing List, adaplas
On 10 Dec 02 at 21:59, James Simmons wrote:
> Fixed. Actually I used the following code.
>
> int fb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info)
> {
> int xoffset = var->xoffset;
> int yoffset = var->yoffset;
> int err;
>
> if (xoffset < 0 || yoffset < 0 || info->fbops->fb_pan_display ||
I'm probably missing something important, but do not you want
!info->fbops->fb_pan_display
instead?
Petr
> xoffset + info->var.xres > info->var.xres_virtual ||
> yoffset + info->var.yres > info->var.yres_virtual)
> return -EINVAL;
> if ((err = info->fbops->fb_pan_display(var, info)))
> return err;
> info->var.xoffset = var->xoffset;
> info->var.yoffset = var->yoffset;
> if (var->vmode & FB_VMODE_YWRAP)
^ permalink raw reply
* Re: 2.4.20 AGP for I845 wrong ?
From: Nicolas ASPERT @ 2002-12-11 12:26 UTC (permalink / raw)
To: Dave Jones; +Cc: Margit Schubert-While, linux-kernel, faith, dri-devel
In-Reply-To: <20021211132059.C11689@suse.de>
Dave Jones wrote:
> I'll check the chipset docs when I get time, and add a comment if
> necessary. No-one seems to be complaining that it isn't working,
> so I'm inclined to believe your diagnosis is correct.
>
I found the thread of lkml containing the discussion about that ... here
is the link to the original mail :
http://marc.theaimsgroup.com/?l=linux-kernel&m=102122146829865&w=2
> DRI folks, this seems like duplication given that this data is available
> in agpgart. How about changing this to read whatever agpgart has set in
> .chipset_name ?
>
Sounds like a good idea to me ;-)
Best regards
Nicolas.
--
Nicolas Aspert Signal Processing Institute (ITS)
Swiss Federal Institute of Technology (EPFL)
^ permalink raw reply
* Re: 2.4.20 AGP for I845 wrong ?
From: Dave Jones @ 2002-12-11 12:20 UTC (permalink / raw)
To: Nicolas ASPERT; +Cc: Margit Schubert-While, linux-kernel, faith, dri-devel
In-Reply-To: <3DF72A91.5080804@epfl.ch>
On Wed, Dec 11, 2002 at 01:07:45PM +0100, Nicolas ASPERT wrote:
> IIRC, the 845G is a "new" version of the 830MP chipset (it had been
> added by Abraham vd Merwe & Graeme Fisher some months ago), but acts
> basically just as the 830MP. Therefore the entry is correct.... Or maybe
> if it gets confusing adding a comment would not hurt...
I'll check the chipset docs when I get time, and add a comment if
necessary. No-one seems to be complaining that it isn't working,
so I'm inclined to believe your diagnosis is correct.
> > Also in drivers/char/drm/drm_agpsupport.h, the switch statement at 262
> > is missing the
> > cases for INTEL_I830_M, INTEL_I845_G.
> That's true. It is also missing in 2.5.51.
> I attach two patches, one for 2.4.21-pre1 and one for 2.5.51 that should
> fix this.
> diff -ru linux-2.5.51.clean/drivers/char/drm/drm_agpsupport.h linux-2.5.51/drivers/char/drm/drm_agpsupport.h
> --- linux-2.5.51.clean/drivers/char/drm/drm_agpsupport.h Tue Dec 10 03:45:39 2002
> +++ linux-2.5.51/drivers/char/drm/drm_agpsupport.h Wed Dec 11 12:55:08 2002
> @@ -271,10 +271,12 @@
> #if LINUX_VERSION_CODE >= 0x02040f /* KERNEL_VERSION(2,4,15) */
> case INTEL_I820: head->chipset = "Intel i820"; break;
> #endif
> + case INTEL_I830_M: head->chipset = "Intel i830M"; break;
> case INTEL_I840: head->chipset = "Intel i840"; break;
> #if LINUX_VERSION_CODE >= 0x02040f /* KERNEL_VERSION(2,4,15) */
> case INTEL_I845: head->chipset = "Intel i845"; break;
> #endif
> + case INTEL_I845: head->chipset = "Intel i845G"; break;
> case INTEL_I850: head->chipset = "Intel i850"; break;
> case INTEL_460GX: head->chipset = "Intel 460GX"; break;
DRI folks, this seems like duplication given that this data is available
in agpgart. How about changing this to read whatever agpgart has set in
.chipset_name ?
Keeping these two lists in sync seems somewhat pointless.
Dave
--
| Dave Jones. http://www.codemonkey.org.uk
| SuSE Labs
^ permalink raw reply
* Re: [PATCH] dm.c - device-mapper I/O path fixes
From: Joe Thornber @ 2002-12-11 12:21 UTC (permalink / raw)
To: Joe Thornber; +Cc: Kevin Corry, Linus Torvalds, Kernel Mailing List, lvm-devel
In-Reply-To: <20021211121749.GA20782@reti>
Remove some paranoia in highmem.c, need to check this with Jens Axboe.
--- diff/mm/highmem.c 2002-11-11 11:09:43.000000000 +0000
+++ source/mm/highmem.c 2002-12-11 12:00:48.000000000 +0000
@@ -452,8 +452,6 @@
mempool_t *pool;
int bio_gfp;
- BUG_ON((*bio_orig)->bi_idx);
-
/*
* for non-isa bounce case, just check if the bounce pfn is equal
* to or bigger than the highest pfn in the system -- in that case,
^ permalink raw reply
* Re: [PATCH] dm.c - device-mapper I/O path fixes
From: Joe Thornber @ 2002-12-11 12:20 UTC (permalink / raw)
To: Joe Thornber; +Cc: Kevin Corry, Linus Torvalds, Kernel Mailing List, lvm-devel
In-Reply-To: <20021211121749.GA20782@reti>
Some fields in the duplicated bio weren't being set up properly in
__split_page(). [Kevin Corry]
--- diff/drivers/md/dm.c 2002-12-11 12:00:39.000000000 +0000
+++ source/drivers/md/dm.c 2002-12-11 12:00:44.000000000 +0000
@@ -337,7 +337,7 @@
{
struct dm_target *ti = dm_table_find_target(ci->md->map, ci->sector);
struct bio *clone, *bio = ci->bio;
- struct bio_vec *bv = bio->bi_io_vec + (bio->bi_vcnt - 1);
+ struct bio_vec *bv = bio->bi_io_vec + ci->idx;
DMWARN("splitting page");
@@ -349,11 +349,13 @@
clone->bi_sector = ci->sector;
clone->bi_bdev = bio->bi_bdev;
- clone->bi_flags = bio->bi_flags | (1 << BIO_SEG_VALID);
clone->bi_rw = bio->bi_rw;
+ clone->bi_vcnt = 1;
clone->bi_size = len << SECTOR_SHIFT;
clone->bi_end_io = clone_endio;
clone->bi_private = ci->io;
+ clone->bi_io_vec->bv_offset = bv->bv_len - clone->bi_size;
+ clone->bi_io_vec->bv_len = clone->bi_size;
ci->sector += len;
ci->sector_count -= len;
^ permalink raw reply
* Re: [PATCH] dm.c - device-mapper I/O path fixes
From: Joe Thornber @ 2002-12-11 12:19 UTC (permalink / raw)
To: Joe Thornber; +Cc: Kevin Corry, Linus Torvalds, Kernel Mailing List, lvm-devel
In-Reply-To: <20021211121749.GA20782@reti>
md->pending was being incremented for each clone rather than just
once. [Kevin Corry]
--- diff/drivers/md/dm.c 2002-12-11 12:00:34.000000000 +0000
+++ source/drivers/md/dm.c 2002-12-11 12:00:39.000000000 +0000
@@ -310,7 +310,6 @@
* anything, the target has assumed ownership of
* this io.
*/
- atomic_inc(&io->md->pending);
atomic_inc(&io->io_count);
r = ti->type->map(ti, clone);
if (r > 0)
@@ -424,6 +423,7 @@
ci.sector_count = bio_sectors(bio);
ci.idx = 0;
+ atomic_inc(&md->pending);
while (ci.sector_count)
__clone_and_map(&ci);
^ permalink raw reply
* Re: [PATCH] dm.c - device-mapper I/O path fixes
From: Joe Thornber @ 2002-12-11 12:19 UTC (permalink / raw)
To: Joe Thornber; +Cc: Kevin Corry, Linus Torvalds, Kernel Mailing List, lvm-devel
In-Reply-To: <20021211121749.GA20782@reti>
dec_pending(): only bother spin locking if io->error is going to be
updated. [Kevin Corry]
--- diff/drivers/md/dm.c 2002-12-11 12:00:29.000000000 +0000
+++ source/drivers/md/dm.c 2002-12-11 12:00:34.000000000 +0000
@@ -238,10 +238,11 @@
static spinlock_t _uptodate_lock = SPIN_LOCK_UNLOCKED;
unsigned long flags;
- spin_lock_irqsave(&_uptodate_lock, flags);
- if (error)
+ if (error) {
+ spin_lock_irqsave(&_uptodate_lock, flags);
io->error = error;
- spin_unlock_irqrestore(&_uptodate_lock, flags);
+ spin_unlock_irqrestore(&_uptodate_lock, flags);
+ }
if (atomic_dec_and_test(&io->io_count)) {
if (atomic_dec_and_test(&io->md->pending))
^ permalink raw reply
* Re: [PATCH] dm.c - device-mapper I/O path fixes
From: Joe Thornber @ 2002-12-11 12:17 UTC (permalink / raw)
To: Kevin Corry; +Cc: Joe Thornber, Linus Torvalds, Kernel Mailing List, lvm-devel
In-Reply-To: <02121016034706.02220@boiler>
Kevin,
On Tue, Dec 10, 2002 at 04:03:47PM -0600, Kevin Corry wrote:
> Joe, Linus,
>
> This patch fixes problems with the device-mapper I/O path in 2.5.51. The
> existing code does not properly split requests when necessary, and can
> cause segfaults and/or data corruption. This can easily manifest itself
> when running XFS on striped LVM volumes.
Many thanks for doing this work, but _please_ split your patches up more.
There are several changes rolled in here.
I've split the patch up, and will post the ones I'm accepting as
replies to this current mail.
The full set of changes for 2.5.51 is available here:
http://people.sistina.com/~thornber/patches/2.5-stable/2.5.51/
This works for me with xfs and stripes (limited testing).
These are the bits of your patch that I have queries about:
--- linux-2.5.51a/drivers/md/dm.c Tue Dec 10 11:01:13 2002
+++ linux-2.5.51b/drivers/md/dm.c Tue Dec 10 11:03:55 2002
@@ -242,4 +242,4 @@
- bio_endio(io->bio, io->error ? 0 : io->bio->bi_size, io->error);
+ bio_endio(io->bio, io->bio->bi_size, io->error);
You seem to be assuming that io->bio->bi_size will always be zero if
an error occurs. I was not aware that this was the case.
@@ -261,15 +262,15 @@
{
struct dm_io *io = bio->bi_private;
- /*
- * Only call dec_pending if the clone has completely
- * finished. If a partial io errors I'm assuming it won't
- * be requeued. FIXME: check this.
- */
- if (error || !bio->bi_size) {
- dec_pending(io, error);
- bio_put(bio);
+ if (bio->bi_size)
+ return 1;
+
+ if (error) {
+ struct gendisk *disk = dm_disk(io->md);
+ DMWARN("I/O error (%d) on device %s\n", error, disk->disk_name);
}
+ dec_pending(io, error);
+ bio_put(bio);
return 0;
}
All you're doing here is adding a warning (which is nice), and making
the same assumption about bio->bi_size in the case of an error.
@@ -457,13 +483,13 @@
up_read(&md->lock);
if (bio_rw(bio) == READA) {
- bio_io_error(bio, 0);
+ bio_io_error(bio, bio->bi_size);
return 0;
}
r = queue_io(md, bio);
if (r < 0) {
- bio_io_error(bio, 0);
+ bio_io_error(bio, bio->bi_size);
return 0;
} else if (r == 0)
Why is it better to say that all the io was 'done' rather than none?
It did fail after all.
@@ -369,24 +369,48 @@
{
struct bio *clone, *bio = ci->bio;
struct dm_target *ti = dm_table_find_target(ci->md->map, ci->sector);
- sector_t len = max_io_len(ci->md, bio->bi_sector, ti);
+ sector_t bv_len, len = max_io_len(ci->md, ci->sector, ti);
+ struct bio_vec *bv;
+ int i, vcnt = bio->bi_vcnt - ci->idx;
/* shorter than current target ? */
if (ci->sector_count < len)
len = ci->sector_count;
/* create the clone */
- clone = bio_clone(ci->bio, GFP_NOIO);
+ clone = bio_alloc(GFP_NOIO, vcnt);
+ if (!clone) {
+ dec_pending(ci->io, -ENOMEM);
+ return;
+ }
clone->bi_sector = ci->sector;
- clone->bi_idx = ci->idx;
+ clone->bi_bdev = bio->bi_bdev;
+ clone->bi_rw = bio->bi_rw;
+ clone->bi_vcnt = vcnt;
clone->bi_size = len << SECTOR_SHIFT;
clone->bi_end_io = clone_endio;
clone->bi_private = ci->io;
+ /* copy the original vector and adjust if necessary. */
+ memcpy(clone->bi_io_vec, bio->bi_io_vec + ci->idx,
+ vcnt * sizeof(*clone->bi_io_vec));
+ bv_len = len << SECTOR_SHIFT;
+ bio_for_each_segment(bv, clone, i) {
+ if (bv_len >= bv->bv_len) {
+ bv_len -= bv->bv_len;
+ } else {
+ bv->bv_len = bv_len;
+ clone->bi_vcnt = i + 1;
+ break;
+ }
+ }
+
+ /* submit this io */
+ __map_bio(ti, clone);
+
/* adjust the remaining io */
ci->sector += len;
ci->sector_count -= len;
- __map_bio(ti, clone);
/*
* If we are not performing all remaining io in this
@@ -395,9 +419,9 @@
*/
if (ci->sector_count) {
while (len) {
- struct bio_vec *bv = clone->bi_io_vec + ci->idx;
- sector_t bv_len = bv->bv_len >> SECTOR_SHIFT;
+ bv = bio->bi_io_vec + ci->idx;
+ bv_len = bv->bv_len >> SECTOR_SHIFT;
if (bv_len <= len)
len -= bv_len;
There is no need to use bio_alloc in preference to bio_clone, we're
not changing the bvec in any way. All of the above code is redundant.
- Joe
^ permalink raw reply
* Re: 2.4.20 AGP for I845 wrong ?
From: Nicolas ASPERT @ 2002-12-11 12:16 UTC (permalink / raw)
To: Margit Schubert-While; +Cc: davej, faith, linux-kernel, dri-devel
In-Reply-To: <fa.jjk71mv.1kja10g@ifi.uio.no>
[-- Attachment #1: Type: text/plain, Size: 305 bytes --]
Ooops... the patch I sent for 2.5.51 is wrong, since there I added a
INTEL_I845 instead of a INTEL_I845_G (I know vim *does* weird things in
my back 8-)
Here is the correct one...
Regards
Nicolas.
--
Nicolas Aspert Signal Processing Institute (ITS)
Swiss Federal Institute of Technology (EPFL)
[-- Attachment #2: intelchipset-id-2.5.51.diff --]
[-- Type: text/plain, Size: 856 bytes --]
diff -ru linux-2.5.51.clean/drivers/char/drm/drm_agpsupport.h linux-2.5.51/drivers/char/drm/drm_agpsupport.h
--- linux-2.5.51.clean/drivers/char/drm/drm_agpsupport.h Tue Dec 10 03:45:39 2002
+++ linux-2.5.51/drivers/char/drm/drm_agpsupport.h Wed Dec 11 12:55:08 2002
@@ -271,10 +271,12 @@
#if LINUX_VERSION_CODE >= 0x02040f /* KERNEL_VERSION(2,4,15) */
case INTEL_I820: head->chipset = "Intel i820"; break;
#endif
+ case INTEL_I830_M: head->chipset = "Intel i830M"; break;
case INTEL_I840: head->chipset = "Intel i840"; break;
#if LINUX_VERSION_CODE >= 0x02040f /* KERNEL_VERSION(2,4,15) */
case INTEL_I845: head->chipset = "Intel i845"; break;
#endif
+ case INTEL_I845_G: head->chipset = "Intel i845G"; break;
case INTEL_I850: head->chipset = "Intel i850"; break;
case INTEL_460GX: head->chipset = "Intel 460GX"; break;
^ permalink raw reply
* (a working) Preempt Patch for 2.4.20-aa1
From: Marc-Christian Petersen @ 2002-12-11 12:15 UTC (permalink / raw)
To: linux-kernel
Hi all,
$subject says it all. Does anyone have such?
TIA!
ciao, Marc
^ permalink raw reply
* lk-changelog.pl 0.59
From: Matthias Andree @ 2002-12-11 12:12 UTC (permalink / raw)
To: torvalds, marcelo; +Cc: linux-kernel
This is a semi-automatic announcement.
lk-changelog.pl aka. shortlog version 0.59 has been released.
The changes are listed at the end of the script below.
You can always download this script and GPG signatures from
http://mandree.home.pages.de/linux/kernel/
Note that your mailer must be MIME-capable to save this mail properly,
because it is in the "quoted-printable" encoding.
= <- if you see just an equality sign, but no "3D", your mailer is fine.
= <- if you see 3D on this line, then upgrade your mailer or pipe this mail
= <- into metamail.
--
A sh script on behalf of Matthias Andree
-------------------------------------------------------------------------
Changes since last release:
----------------------------
revision 0.59
date: 2002/12/11 12:11:51; author: emma; state: Exp; lines: +11 -4
Workaround: strip trailing [tag] from mail addresses, reported by Marcel
Holtmann.
Add some new addresses.
----------------------------
revision 0.58
date: 2002/12/07 15:14:57; author: emma; state: Exp; lines: +26 -1
More addresses figured by Vitezslav Samel.
=============================================================================
-------------------------------------------------------------------------
#! /usr/bin/perl -wT
# This Perl script is meant to simplify/beautify BK ChangeLogs for the linux
# kernel.
#
# (C) Copyright 2002 by Matthias Andree <matthias.andree@gmx.de>
# Marcus Alanen <maalanen@abo.fi>
# Tomas Szepe <szepe@pinerecords.com>
# Vitezslav Samel <samel@mail.cz>
#
# $Id: lk-changelog.pl,v 0.59 2002/12/11 12:11:51 emma Exp $
# ----------------------------------------------------------------------
# Distribution of this script is permitted under the terms of the
# GNU General Public License (GNU GPL) v2.
# ----------------------------------------------------------------------
# This program expects its input in the following format:
# (E-Mail Addresses MUST NOT bear leading whitespace!)
#
# <email@ddr.ess>
# changelog text
# more changelog text
# <email@ddr.ess>
# yet another changelog
# <another@add.ress>
# changelog #3
# more lines
#
# and discards all changelog lines but the first after an email address,
# and groups and sorts the entries by email address:
#
# another@add.ress:
# changelog #3
# email@ddr.ess
# changelog text
# yet another changelog
require 5.005;
use strict;
use Carp;
use Getopt::Long;
use IO::File;
eval 'use Pod::Usage;';
if ($@) {
eval 'sub pod2usage {
print STDERR "Usage information would be presented here if you had Pod::Usage installed.\n"
. "Try: perl -MCPAN -e \'install Pod::Usage\'\nAbort.\n";
exit 2;
}';
}
use Text::ParseWords;
use Text::Tabs;
use Text::Wrap;
# --------------------------------------------------------------------
# customize the following line to change the indentation of the change
# lines, $indent1 is used for the first line of an entry, $indent for
# all subsequent lines. $indent is auto-generated from $indent1.
my $indent1 = " o ";
my $indent = " " x length($indent1);
# change this to enable some debugging stuff:
my $debug = 0;
# --------------------------------------------------------------------
# the key is the email address in ALL LOWER CAPS!
# the value is the real name of the person
#
# Unless otherwise noted, the addresses below have been obtained using
# lbdb.
my %addresses = (
'abraham@2d3d.co.za' => 'Abraham van der Merwe',
'ac9410@attbi.com' => 'Albert Cranford',
'acher@in.tum.de' => 'Georg Acher',
'achirica@ttd.net' => 'Javier Achirica',
'acme@brinquedo.oo.ps' => 'Arnaldo Carvalho de Melo',
'acme@conectiva.com.br' => 'Arnaldo Carvalho de Melo',
'acme@dhcp197.conectiva' => 'Arnaldo Carvalho de Melo',
'adam@mailhost.nmt.edu' => 'Adam Radford', # google
'adam@nmt.edu' => 'Adam Radford', # google
'adam@yggdrasil.com' => 'Adam J. Richter',
'adilger@clusterfs.com' => 'Andreas Dilger',
'aebr@win.tue.nl' => 'Andries E. Brouwer',
'agrover@acpi3.(none)' => 'Andy Grover',
'agrover@acpi3.jf.intel.com' => 'Andy Grover', # guessed
'agrover@dexter.groveronline.com' => 'Andy Grover',
'agrover@groveronline.com' => 'Andy Grover',
'ahaas@airmail.net' => 'Art Haas',
'ahaas@neosoft.com' => 'Art Haas',
'aia21@cam.ac.uk' => 'Anton Altaparmakov',
'aia21@cantab.net' => 'Anton Altaparmakov',
'aia21@cus.cam.ac.uk' => 'Anton Altaparmakov',
'ajoshi@shell.unixbox.com' => 'Ani Joshi',
'ak@muc.de' => 'Andi Kleen',
'ak@suse.de' => 'Andi Kleen',
'akpm@digeo.com' => 'Andrew Morton',
'akpm@zip.com.au' => 'Andrew Morton',
'akropel1@rochester.rr.com' => 'Adam Kropelin', # lbdb
'alan@irongate.swansea.linux.org.uk' => 'Alan Cox',
'alan@lxorguk.ukuu.org.uk' => 'Alan Cox',
'alan@redhat.com' => 'Alan Cox',
'alex_williamson@attbi.com' => 'Alex Williamson', # lbdb
'alex_williamson@hp.com' => 'Alex Williamson', # google
'alexander.riesen@synopsys.com' => 'Alexander Riesen',
'alfre@ibd.es' => 'Alfredo Sanjuán',
'ambx1@neo.rr.com' => 'Adam Belay',
'amunoz@vmware.com' => 'Alberto Munoz',
'andersen@codepoet.org' => 'Erik Andersen',
'andersg@0x63.nu' => 'Anders Gustafsson',
'andmike@us.ibm.com' => 'Mike Anderson', # lbdb
'andrea@suse.de' => 'Andrea Arcangeli',
'andries.brouwer@cwi.nl' => 'Andries E. Brouwer',
'andros@citi.umich.edu' => 'Andy Adamson',
'angus.sawyer@dsl.pipex.com' => 'Angus Sawyer',
'ankry@green.mif.pg.gda.pl' => 'Andrzej Krzysztofowicz',
'anton@samba.org' => 'Anton Blanchard',
'aris@cathedrallabs.org' => 'Aristeu Sergio Rozanski Filho',
'arjan@redhat.com' => 'Arjan van de Ven',
'arjanv@redhat.com' => 'Arjan van de Ven',
'arndb@de.ibm.com' => 'Arnd Bergmann',
'asit.k.mallick@intel.com' => 'Asit K. Mallick', # by Kristian Peters
'axboe@burns.home.kernel.dk' => 'Jens Axboe', # guessed
'axboe@hera.kernel.org' => 'Jens Axboe',
'axboe@suse.de' => 'Jens Axboe',
'baccala@vger.freesoft.org' => 'Brent Baccala',
'baldrick@wanadoo.fr' => 'Duncan Sands',
'barrow_dj@yahoo.com' => 'D. J. Barrow',
'barryn@pobox.com' => 'Barry K. Nathan', # lbdb
'bart.de.schuymer@pandora.be' => 'Bart De Schuymer',
'bcollins@debian.org' => 'Ben Collins',
'bcrl@bob.home.kvack.org' => 'Benjamin LaHaise',
'bcrl@redhat.com' => 'Benjamin LaHaise',
'bcrl@toomuch.toronto.redhat.com' => 'Benjamin LaHaise', # guessed
'bdschuym@pandora.be' => 'Bart De Schuymer',
'beattie@beattie-home.net' => 'Brian Beattie', # from david.nelson
'benh@kernel.crashing.org' => 'Benjamin Herrenschmidt',
'bfennema@falcon.csc.calpoly.edu' => 'Ben Fennema',
'bgerst@didntduck.org' => 'Brian Gerst',
'bhards@bigpond.net.au' => 'Brad Hards',
'bhavesh@avaya.com' => 'Bhavesh P. Davda',
'bheilbrun@paypal.com' => 'Brad Heilbrun', # by himself
'bjorn.andersson@erc.ericsson.se' => 'Björn Andersson', # google, guessed ö
'bjorn.wesen@axis.com' => 'Bjorn Wesen',
'bjorn_helgaas@hp.com' => 'Bjorn Helgaas',
'bmatheny@purdue.edu' => 'Blake Matheny', # google
'borisitk@fortunet.com' => 'Boris Itkis', # by Kristian Peters
'brett@bad-sports.com' => 'Brett Pemberton',
'brihall@pcisys.net' => 'Brian Hall', # google
'brownfld@irridia.com' => 'Ken Brownfield',
'bunk@fs.tum.de' => 'Adrian Bunk',
'buytenh@gnu.org' => 'Lennert Buytenhek',
'bzeeb-lists@lists.zabbadoz.net' => 'Björn A. Zeeb', # lbdb
'c-d.hailfinger.kernel.2002-07@gmx.net' => 'Carl-Daniel Hailfinger',
'c-d.hailfinger.kernel.2002-q4@gmx.net' => 'Carl-Daniel Hailfinger', # himself
'cattelan@sgi.com' => 'Russell Cattelan', # google
'ccaputo@alt.net' => 'Chris Caputo',
'cel@citi.umich.edu' => 'Chuck Lever',
'celso@bulma.net' => 'Celso González', # google
'ch@hpl.hp.com' => 'Christopher Hoover', # by Kristian Peters
'charles.white@hp.com' => 'Charles White',
'chessman@tux.org' => 'Samuel S. Chessman',
'chris@qwirx.com' => 'Chris Wilson',
'chris@wirex.com' => 'Chris Wright',
'christer@weinigel.se' => 'Christer Weinigel', # from shortlog
'christopher.leech@intel.com' => 'Christopher Leech',
'cip307@cip.physik.uni-wuerzburg.de' => 'Jochen Karrer', # from shortlog
'ckulesa@as.arizona.edu' => 'Craig Kulesa',
'colin@gibbs.dhs.org' => 'Colin Gibbs',
'colpatch@us.ibm.com' => 'Matthew Dobson',
'cort@fsmlabs.com' => 'Cort Dougan',
'cph@zurich.ai.mit.edu' => 'Chris Hanson',
'cr@sap.com' => 'Christoph Rohland',
'cruault@724.com' => 'Charles-Edouard Ruault',
'ctindel@cup.hp.com' => 'Chad N. Tindel',
'cyeoh@samba.org' => 'Christopher Yeoh',
'da-x@gmx.net' => 'Dan Aloni',
'daisy@teetime.dynamic.austin.ibm.com' => 'Daisy Chang', # from shortlog
'dalecki@evision-ventures.com' => 'Martin Dalecki',
'dalecki@evision.ag' => 'Martin Dalecki',
'dan.zink@hp.com' => 'Dan Zink',
'dan@debian.org' => 'Daniel Jacobowitz',
'dana.lacoste@peregrine.com' => 'Dana Lacoste',
'danc@mvista.com' => 'Dan Cox', # some CREDITS patch found by google
'davej@codemonkey.org.uk' => 'Dave Jones',
'davej@suse.de' => 'Dave Jones',
'davem@hera.kernel.org' => 'David S. Miller',
'davem@nuts.ninka.net' => 'David S. Miller',
'davem@pizda.ninka.net' => 'David S. Miller', # guessed
'davem@redhat.com' => 'David S. Miller',
'david-b@pacbell.net' => 'David Brownell',
'david.nelson@pobox.com' => 'David Nelson',
'david@gibson.dropbear.id.au' => 'David Gibson',
'david_jeffery@adaptec.com' => 'David Jeffery',
'davidel@xmailserver.org' => 'Davide Libenzi',
'davidm@hpl.hp.com' => 'David Mosberger',
'davidm@napali.hpl.hp.com' => 'David Mosberger',
'davidm@tiger.hpl.hp.com' => 'David Mosberger',
'davidm@wailua.hpl.hp.com' => 'David Mosberger',
'davids@youknow.youwant.to' => 'David Schwartz', # google
'dbrownell@users.sourceforge.net' => 'David Brownell',
'ddstreet@ieee.org' => 'Dan Streetman',
'ddstreet@us.ibm.com' => 'Dan Streetman',
'defouwj@purdue.edu' => 'Jeff DeFouw',
'dent@cosy.sbg.ac.at' => "Thomas 'Dent' Mirlacher",
'devel@brodo.de' => 'Dominik Brodowski',
'devik@cdi.cz' => 'Martin Devera',
'dgibson@samba.org' => 'David Gibson',
'dhinds@sonic.net' => 'David Hinds', # google
'dhollis@davehollis.com' => 'Dave Hollis',
'dhowells@cambridge.redhat.com' => 'David Howells',
'dhowells@redhat.com' => 'David Howells',
'dipankar@in.ibm.com' => 'Dipankar Sarma',
'dirk.uffmann@nokia.com' => 'Dirk Uffmann',
'dledford@aladin.rdu.redhat.com' => 'Doug Ledford',
'dledford@dledford.theledfords.org' => 'Doug Ledford',
'dledford@flossy.devel.redhat.com' => 'Doug Ledford',
'dledford@redhat.com' => 'Doug Ledford',
'dmccr@us.ibm.com' => 'Dave McCracken',
'dok@directfb.org' => 'Denis Oliver Kropp',
'dougg@torque.net' => 'Douglas Gilbert',
'driver@huey.jpl.nasa.gov' => 'Bryan B. Whitehead', # google
'drow@false.org' => 'Daniel Jacobowitz',
'drow@nevyn.them.org' => 'Daniel Jacobowitz',
'dsaxena@mvista.com' => 'Deepak Saxena',
'dwmw2@infradead.org' => 'David Woodhouse',
'dwmw2@redhat.com' => 'David Woodhouse',
'dz@cs.unitn.it' => 'Massimo Dal Zotto',
'ebiederm@xmission.com' => 'Eric Biederman',
'ebrower@resilience.com' => 'Eric Brower',
'ebrower@usa.net' => 'Eric Brower',
'ecd@skynet.be' => 'Eddie C. Dost',
'edv@macrolink.com' => 'Ed Vance',
'edward_peng@dlink.com.tw' => 'Edward Peng',
'efocht@ess.nec.de' => 'Erich Focht',
'eike@bilbo.math.uni-mannheim.de' => 'Rolf Eike Beer',
'elenstev@mesatop.com' => 'Steven Cole',
'engebret@us.ibm.com' => 'Dave Engebretsen',
'eranian@hpl.hp.com' => 'Stéphane Eranian',
'erik_habbinga@hp.com' => 'Erik Habbinga',
'eyal@eyal.emu.id.au' => 'Eyal Lebedinsky', # lbdb
'fbl@conectiva.com.br' => 'Flávio Bruno Leitner', # google
'fdavis@si.rr.com' => 'Frank Davis',
'felipewd@terra.com.br' => 'Felipe Damasio', # by self (did not ask to include the W.)
'fenghua.yu@intel.com' => 'Fenghua Yu', # google
'fero@sztalker.hu' => 'Bakonyi Ferenc',
'fischer@linux-buechse.de' => 'Jürgen E. Fischer',
'fletch@aracnet.com' => 'Martin J. Bligh',
'flo@rfc822.org' => 'Florian Lohoff',
'florian.thiel@gmx.net' => 'Florian Thiel', # from shortlog
'focht@ess.nec.de' => 'Erich Focht',
'fokkensr@fokkensr.vertis.nl' => 'Rolf Fokkens',
'franz.sirl-kernel@lauterbach.com' => 'Franz Sirl',
'franz.sirl@lauterbach.com' => 'Franz Sirl',
'fubar@us.ibm.com' => 'Jay Vosburgh',
'fw@deneb.enyo.de' => 'Florian Weimer', # lbdb
'fzago@austin.rr.com' => 'Frank Zago', # google
'ganesh@tuxtop.vxindia.veritas.com' => 'Ganesh Varadarajan',
'ganesh@veritas.com' => 'Ganesh Varadarajan',
'ganesh@vxindia.veritas.com' => 'Ganesh Varadarajan',
'garloff@suse.de' => 'Kurt Garloff',
'geert@linux-m68k.org' => 'Geert Uytterhoeven',
'george@mvista.com' => 'George Anzinger',
'gerg@snapgear.com' => 'Greg Ungerer',
'ghoz@sympatico.ca' => 'Ghozlane Toumi',
'gibbs@overdrive.btc.adaptec.com' => 'Justin T. Gibbs',
'gibbs@scsiguy.com' => 'Justin T. Gibbs',
'gilbertd@treblig.org' => 'Dr. David Alan Gilbert',
'gl@dsa-ac.de' => 'Guennadi Liakhovetski',
'glee@gnupilgrims.org' => 'Geoffrey Lee', # lbdb
'gnb@alphalink.com.au' => 'Greg Banks',
'go@turbolinux.co.jp' => 'Go Taniguchi',
'gone@us.ibm.com' => 'Patricia Guaghen',
'gotom@debian.or.jp' => 'Goto Masanori', # from shortlog
'gphat@cafes.net' => 'Cory Watson',
'greearb@candelatech.com' => 'Ben Greear',
'green@angband.namesys.com' => 'Oleg Drokin',
'green@namesys.com' => 'Oleg Drokin',
'greg@kroah.com' => 'Greg Kroah-Hartman',
'grundler@cup.hp.com' => 'Grant Grundler',
'gsromero@alumnos.euitt.upm.es' => 'Guillermo S. Romero',
'gtoumi@laposte.net' => 'Ghozlane Toumi',
'hadi@cyberus.ca' => 'Jamal Hadi Salim',
'hannal@us.ibm.com' => 'Hanna Linder',
'haveblue@us.ibm.com' => 'Dave Hansen',
'hch@caldera.de' => 'Christoph Hellwig',
'hch@dhcp212.munich.sgi.com' => 'Christoph Hellwig',
'hch@hera.kernel.org' => 'Christoph Hellwig',
'hch@infradead.org' => 'Christoph Hellwig',
'hch@lab343.munich.sgi.com' => 'Christoph Hellwig',
'hch@lst.de' => 'Christoph Hellwig',
'hch@pentafluge.infradead.org' => 'Christoph Hellwig',
'hch@sb.bsdonline.org' => 'Christoph Hellwig', # by Kristian Peters
'hch@sgi.com' => 'Christoph Hellwig',
'helgaas@fc.hp.com' => 'Bjørn Helgås', # lbdb + guessed national characters
'henrique@cyclades.com' => 'Henrique Gobbi',
'hermes@gibson.dropbear.id.au' => 'David Gibson',
'hirofumi@mail.parknet.co.jp' => 'Hirofumi Ogawa', # corrected by himself
'hoho@binbash.net' => 'Colin Slater',
'hpa@zytor.com' => 'H. Peter Anvin',
'hugh@veritas.com' => 'Hugh Dickins',
'ica2_ts@csv.ica.uni-stuttgart.de' => 'Thiemo Seufer', # google
'info@usblcd.de' => 'Adams IT Services',
'ink@jurassic.park.msu.ru' => 'Ivan Kokshaysky',
'ionut@cs.columbia.edu' => 'Ion Badulescu',
'ioshadij@hotmail.com' => 'Ishan O. Jayawardena',
'irohlfs@irohlfs.de' => 'Ingo Rohlfs',
'ivangurdiev@linuxfreemail.com' => 'Ivan Gyurdiev',
'jack@suse.cz' => 'Jan Kara',
'jack_hammer@adaptec.com' => 'Jack Hammer',
'jaharkes@cs.cmu.edu' => 'Jan Harkes',
'jakob.kemi@telia.com' => 'Jakob Kemi',
'jamagallon@able.es' => 'J. A. Magallon',
'james.bottomley@steeleye.com' => 'James Bottomley',
'james@cobaltmountain.com' => 'James Mayer',
'james_mcmechan@hotmail.com' => 'James McMechan',
'jamey.hicks@hp.com' => 'Jamey Hicks',
'jamey@crl.dec.com' => 'Jamey Hicks',
'jani@astechnix.ro' => 'Jani Monoses',
'jani@iv.ro' => 'Jani Monoses',
'jb@jblache.org' => 'Julien Blache',
'jbglaw@lug-owl.de' => 'Jan-Benedict Glaw',
'jblack@linuxguru.net' => 'James Blackwell',
'jdavid@farfalle.com' => 'David Ruggiero',
'jdike@jdike.wstearns.org' => 'Jeff Dike',
'jdike@karaya.com' => 'Jeff Dike',
'jdike@uml.karaya.com' => 'Jeff Dike',
'jdr@farfalle.com' => 'David Ruggiero',
'jdthood@yahoo.co.uk' => 'Thomas Hood',
'jeb.j.cramer@intel.com' => 'Jeb J. Cramer',
'jeffs@accelent.com' => 'Jeff Sutherland', # lbdb
'jejb@mulgrave.(none)' => 'James Bottomley', # from shortlog
'jenna.s.hall@intel.com' => 'Jenna S. Hall', # google
'jes@trained-monkey.org' => 'Jes Sorensen',
'jes@wildopensource.com' => 'Jes Sorensen',
'jgarzik@fokker2.devel.redhat.com' => 'Jeff Garzik',
'jgarzik@mandrakesoft.com' => 'Jeff Garzik',
'jgarzik@redhat.com' => 'Jeff Garzik',
'jgarzik@rum.normnet.org' => 'Jeff Garzik',
'jgarzik@tout.normnet.org' => 'Jeff Garzik',
'jgrimm2@us.ibm.com' => 'Jon Grimm',
'jgrimm@jgrimm.austin.ibm.com' => 'Jon Grimm', # google
'jgrimm@touki.austin.ibm.com' => 'Jon Grimm', # google
'jgrimm@touki.qip.austin.ibm.com' => 'Jon Grimm', # google
'jhammer@us.ibm.com' => 'Jack Hammer',
'jmorris@intercode.com.au' => 'James Morris',
'jo-lkml@suckfuell.net' => 'Jochen Suckfuell',
'joe@wavicle.org' => 'Joe Burks',
'johann.deneux@it.uu.se' => 'Johann Deneux',
'johannes@erdfelt.com' => 'Johannes Erdfelt',
'john@deater.net' => 'John Clemens',
'john@larvalstage.com' => 'John Kim',
'johnpol@2ka.mipt.ru' => 'Evgeniy Polyakov',
'johnstul@us.ibm.com' => 'John Stultz',
'jsiemes@web.de' => 'Josef Siemes',
'jsimmons@heisenberg.transvirtual.com' => 'James Simmons',
'jsimmons@maxwell.earthlink.net' => 'James Simmons',
'jsimmons@transvirtual.com' => 'James Simmons',
'jt@bougret.hpl.hp.com' => 'Jean Tourrilhes',
'jt@hpl.hp.com' => 'Jean Tourrilhes',
'jtyner@cs.ucr.edu' => 'John Tyner',
'jun.nakajima@intel.com' => 'Jun Nakajima',
'jung-ik.lee@intel.com' => 'J.I. Lee',
'jwoithe@physics.adelaide.edu.au' => 'Jonathan Woithe',
'k-suganuma@mvj.biglobe.ne.jp' => 'Kimio Suganuma',
'k.kasprzak@box43.pl' => 'Karol Kasprzak', # by Kristian Peters
'kaber@trash.net' => 'Patrick McHardy',
'kai-germaschewski@uiowa.edu' => 'Kai Germaschewski',
'kai.makisara@kolumbus.fi' => 'Kai Makisara',
'kai.reichert@udo.edu' => 'Kai Reichert',
'kai@chaos.tp1.ruhr-uni-bochum.de' => 'Kai Germaschewski',
'kai@tp1.ruhr-uni-bochum.de' => 'Kai Germaschewski',
'kanoj@vger.kernel.org' => 'Kanoj Sarcar', # sent by Arnaldo Carvalho de Melo
'kanojsarcar@yahoo.com' => 'Kanoj Sarcar',
'kaos@ocs.com.au' => 'Keith Owens',
'kaos@sgi.com' => 'Keith Owens', # sent by himself
'kasperd@daimi.au.dk' => 'Kasper Dupont',
'keithu@parl.clemson.edu' => 'Keith Underwood',
'kenneth.w.chen@intel.com' => 'Kenneth W. Chen',
'key@austin.ibm.com' => 'Kent Yoder',
'khalid@fc.hp.com' => 'Khalid Aziz',
'khalid_aziz@hp.com' => 'Khalid Aziz',
'khc@pm.waw.pl' => 'Krzysztof Halasa',
'kiran@in.ibm.com' => 'Ravikiran G. Thirumalai',
'kisza@sch.bme.hu' => 'Andras Kis-Szabo', # google (netfilter-ext HOWTO)
'kkeil@suse.de' => 'Karsten Keil',
'kmsmith@umich.edu' => 'Kendrick M. Smith',
'knan@mo.himolde.no' => 'Erik Inge Bolsø',
'komujun@nifty.com' => 'Jun Komuro', # google
'kraxel@bytesex.org' => 'Gerd Knorr',
'kraxel@suse.de' => 'Gerd Knorr',
'kuebelr@email.uc.edu' => 'Robert Kuebel',
'kuznet@mops.inr.ac.ru' => 'Alexey Kuznetsov',
'kuznet@ms2.inr.ac.ru' => 'Alexey Kuznetsov',
'ladis@psi.cz' => 'Ladislav Michl',
'laforge@gnumonks.org' => 'Harald Welte',
'laurent@latil.nom.fr' => 'Laurent Latil',
'lawrence@the-penguin.otak.com' => 'Lawrence Walton',
'ldb@ldb.ods.org' => 'Luca Barbieri',
'ldm@flatcap.org' => 'Richard Russon',
'lee@compucrew.com' => 'Lee Nash', # lbdb
'leigh@solinno.co.uk' => 'Leigh Brown', # lbdb
'levon@movementarian.org' => 'John Levon',
'linux@brodo.de' => 'Dominik Brodowski',
'lionel.bouton@inet6.fr' => 'Lionel Bouton',
'lists@mdiehl.de' => 'Martin Diehl',
'liyang@nerv.cx' => 'Liyang Hu',
'lm@bitmover.com' => 'Larry McVoy',
'lord@sgi.com' => 'Stephen Lord',
'lowekamp@cs.wm.edu' => 'Bruce B. Lowekamp', # lbdb
'luc.vanoostenryck@easynet.be' => 'Luc Van Oostenryck', # lbdb
'lucasvr@terra.com.br' => 'Lucas Correia Villa Real', # google
'm.c.p@wolk-project.de' => 'Marc-Christian Petersen',
'maalanen@ra.abo.fi' => 'Marcus Alanen',
'mac@melware.de' => 'Armin Schindler',
'macro@ds2.pg.gda.pl' => 'Maciej W. Rozycki',
'manfred@colorfullife.com' => 'Manfred Spraul',
'manik@cisco.com' => 'Manik Raina',
'mannthey@us.ibm.com' => 'Keith Mannthey',
'marc@mbsi.ca' => 'Marc Boucher',
'marcel@holtmann.org' => 'Marcel Holtmann', # sent by himself
'marcelo@conectiva.com.br' => 'Marcelo Tosatti',
'marcelo@freak.distro.conectiva' => 'Marcelo Tosatti', # guessed
'marcelo@plucky.distro.conectiva' => 'Marcelo Tosatti',
'mark@alpha.dyndns.org' => 'Mark W. McClelland',
'mark@hal9000.dyndns.org' => 'Mark W. McClelland',
'markh@osdl.org' => 'Mark Haverkamp',
'martin.bligh@us.ibm.com' => 'Martin J. Bligh',
'martin@bruli.net' => 'Martin Brulisauer',
'martin@meltin.net' => 'Martin Schwenke',
'mason@suse.com' => 'Chris Mason',
'matt_domsch@dell.com' => 'Matt Domsch', # sent by himself
'matthew@wil.cx' => 'Matthew Wilcox',
'mauelshagen@sistina.com' => 'Heinz J. Mauelshagen',
'maxk@qualcomm.com' => 'Maksim Krasnyanskiy',
'maxk@viper.(none)' => 'Maksim Krasnyanskiy', # from shortlog
'maxk@viper.qualcomm.com' => 'Maksim Krasnyanskiy',
'mbligh@aracnet.com' => 'Martin J. Bligh',
'mcp@linux-systeme.de' => 'Marc-Christian Petersen',
'mdharm-scsi@one-eyed-alien.net' => 'Matthew Dharm',
'mdharm-usb@one-eyed-alien.net' => 'Matthew Dharm',
'mdharm@one-eyed-alien.net' => 'Matthew Dharm',
'mec@shout.net' => 'Michael Elizabeth Chastain',
'mgreer@mvista.com' => 'Mark A. Greer', # lbdb
'michaelw@foldr.org' => 'Michael Weber', # google
'michal@harddata.com' => 'Michal Jaegermann',
'mikep@linuxtr.net' => 'Mike Phillips',
'mikpe@csd.uu.se' => 'Mikael Pettersson',
'mikulas@artax.karlin.mff.cuni.cz' => 'Mikulas Patocka',
'miles@lsi.nec.co.jp' => 'Miles Bader',
'miles@megapathdsl.net' => 'Miles Lane',
'miltonm@bga.com' => 'Milton Miller', # by Kristian Peters
'mingo@elte.hu' => 'Ingo Molnar',
'mingo@redhat.com' => 'Ingo Molnar',
'mj@ucw.cz' => 'Martin Mares',
'mkp@mkp.net' => 'Martin K. Petersen', # lbdb
'mlang@delysid.org' => 'Mario Lang', # google
'mlindner@syskonnect.de' => 'Mirko Lindner',
'mmcclell@bigfoot.com' => 'Mark McClelland',
'mochel@geena.pdx.osdl.net' => 'Patrick Mochel',
'mochel@osdl.org' => 'Patrick Mochel',
'mochel@segfault.osdl.org' => 'Patrick Mochel',
'mostrows@speakeasy.net' => 'Michal Ostrowski',
'msw@redhat.com' => 'Matt Wilson',
'mufasa@sis.com.tw' => 'Mufasa Yang', # sent by himself
'mulix@actcom.co.il' => 'Muli Ben-Yehuda', # sent by himself
'mw@microdata-pos.de' => 'Michael Westermann',
'mzyngier@freesurf.fr' => 'Marc Zyngier',
'n0ano@n0ano.com' => 'Don Dugger',
'nahshon@actcom.co.il' => 'Itai Nahshon',
'nathans@sgi.com' => 'Nathan Scott',
'neilb@cse.unsw.edu.au' => 'Neil Brown',
'nemosoft@smcc.demon.nl' => 'Nemosoft Unv.',
'nico@cam.org' => 'Nicolas Pitre',
'nicolas.aspert@epfl.ch' => 'Nicolas Aspert',
'nicolas.mailhot@laposte.net' => 'Nicolas Mailhot',
'nkbj@image.dk' => 'Niels Kristian Bech Jensen',
'nmiell@attbi.com' => 'Nicholas Miell',
'okir@suse.de' => 'Olaf Kirch', # lbdb
'olaf.dietsche#list.linux-kernel@t-online.de' => 'Olaf Dietsche',
'olaf.dietsche' => 'Olaf Dietsche',
'oleg@tv-sign.ru' => 'Oleg Nesterov',
'olh@suse.de' => 'Olaf Hering',
'oliendm@us.ibm.com' => 'Dave Olien',
'oliver.neukum@lrz.uni-muenchen.de' => 'Oliver Neukum',
'oliver@neukum.name' => 'Oliver Neukum',
'oliver@neukum.org' => 'Oliver Neukum',
'orjan.friberg@axis.com' => 'Orjan Friberg',
'os@emlix.com' => 'Oskar Schirmer', # sent by himself
'otaylor@redhat.com' => 'Owen Taylor',
'p2@ace.ulyssis.sutdent.kuleuven.ac.be' => 'Peter De Shrijver',
'p_gortmaker@yahoo.com' => 'Paul Gortmaker',
'pasky@ucw.cz' => 'Petr Baudis',
'patmans@us.ibm.com' => 'Patrick Mansfield',
'paul.mundt@timesys.com' => 'Paul Mundt', # google
'paulkf@microgate.com' => 'Paul Fulghum',
'paulus@au1.ibm.com' => 'Paul Mackerras',
'paulus@nanango.paulus.ozlabs.org' => 'Paul Mackerras',
'paulus@quango.ozlabs.ibm.com' => 'Paul Mackerras',
'paulus@samba.org' => 'Paul Mackerras',
'pavel@janik.cz' => 'Pavel Janík',
'pavel@suse.cz' => 'Pavel Machek',
'pavel@ucw.cz' => 'Pavel Machek',
'pazke@orbita1.ru' => 'Andrey Panin',
'pbadari@us.ibm.com' => 'Badari Pulavarty',
'pdelaney@lsil.com' => 'Pam Delaney',
'pe1rxq@amsat.org' => 'Jeroen Vreeken',
'pekon@informatics.muni.cz' => 'Petr Konecny',
'perex@perex.cz' => 'Jaroslav Kysela',
'perex@pnote.perex-int.cz' => 'Jaroslav Kysela',
'perex@suse.cz' => 'Jaroslav Kysela',
'peter@cadcamlab.org' => 'Peter Samuelson',
'peter@chubb.wattle.id.au' => 'Peter Chubb',
'peterc@gelato.unsw.edu.au' => 'Peter Chubb',
'petero2@telia.com' => 'Peter Osterlund',
'petkan@tequila.dce.bg' => 'Petko Manolov',
'petkan@users.sourceforge.net' => 'Petko Manolov',
'petr@vandrovec.name' => 'Petr Vandrovec',
'petri.koistinen@iki.fi' => 'Petri Koistinen',
'pkot@linuxnews.pl' => 'Pawel Kot',
'plars@austin.ibm.com' => 'Paul Larson',
'pmenage@ensim.com' => 'Paul Menage',
'porter@cox.net' => 'Matt Porter',
'prom@berlin.ccc.de' => 'Ingo Albrecht',
'proski@gnu.org' => 'Pavel Roskin',
'pwaechtler@mac.com' => 'Peter Wächtler',
'quinlan@transmeta.com' => 'Daniel Quinlan',
'quintela@mandrakesoft.com' => 'Juan Quintela',
'r.e.wolff@bitwizard.nl' => 'Rogier Wolff', # lbdbq
'ralf@dea.linux-mips.net' => 'Ralf Bächle',
'ralf@linux-mips.org' => 'Ralf Bächle',
'randy.dunlap@verizon.net' => 'Randy Dunlap',
'ray-lk@madrabbit.org' => 'Ray Lee',
'rbh00@utsglobal.com' => 'Richard Hitt', # asked him, he prefers Richard
'rbt@mtlb.co.uk' => 'Robert Cardell',
'rct@gherkin.frus.com' => 'Bob Tracy',
'rddunlap@osdl.org' => 'Randy Dunlap',
'reality@delusion.de' => 'Udo A. Steinberg',
'reiser@namesys.com' => 'Hans Reiser',
'rem@osdl.org' => 'Bob Miller',
'rgooch@atnf.csiro.au' => 'Richard Gooch',
'rgooch@ras.ucalgary.ca' => 'Richard Gooch',
'rgs@linalco.com' => 'Roberto Gordo Saez',
'rhirst@linuxcare.com' => 'Richard Hirst',
'rhw@infradead.org' => 'Riley Williams',
'richard.brunner@amd.com' => 'Richard Brunner',
'riel@conectiva.com.br' => 'Rik van Riel',
'rl@hellgate.ch' => 'Roger Luethi',
'rlievin@free.fr' => 'Romain Lievin',
'rmk@arm.linux.org.uk' => 'Russell King',
'rmk@flint.arm.linux.org.uk' => 'Russell King',
'rml@tech9.net' => 'Robert Love',
'rob@osinvestor.com' => 'Rob Radez',
'robert.olsson@data.slu.se' => 'Robert Olsson',
'rohit.seth@intel.com' => 'Rohit Seth',
'roland@topspin.com' => 'Roland Dreier',
'romieu@cogenit.fr' => 'François Romieu',
'root@viper.(none)' => 'Maxim Krasnyansky',
'rscott@attbi.com' => 'Rob Scott',
'rth@are.twiddle.net' => 'Richard Henderson',
'rth@dorothy.sfbay.redhat.com' => 'Richard Henderson',
'rth@dot.sfbay.redhat.com' => 'Richard Henderson',
'rth@splat.sfbay.redhat.com' => 'Richard Henderson',
'rth@twiddle.net' => 'Richard Henderson',
'rth@vsop.sfbay.redhat.com' => 'Richard Henderson',
'rui.sousa@laposte.net' => 'Rui Sousa',
'rusty@rustcorp.com.au' => 'Rusty Russell',
'rwhron@earthlink.net' => 'Randy Hron',
'rz@linux-m68k.org' => 'Richard Zidlicky',
'sabala@students.uiuc.edu' => 'Michal Sabala', # google
'sailer@scs.ch' => 'Thomas Sailer',
'sam@mars.ravnborg.org' => 'Sam Ravnborg',
'sam@ravnborg.org' => 'Sam Ravnborg',
'samel@mail.cz' => 'Vitezslav Samel',
'samuel.thibault@ens-lyon.fr' => 'Samuel Thibault',
'sandeen@sgi.com' => 'Eric Sandeen',
'santiago@newphoenix.net' => 'Santiago A. Nullo', # sent by self
'sarolaht@cs.helsinki.fi' => 'Pasi Sarolahti',
'sawa@yamamoto.gr.jp' => 'sawa',
'schoenfr@gaaertner.de' => 'Erik Schoenfelder',
'schwab@suse.de' => 'Andreas Schwab',
'schwidefsky@de.ibm.com' => 'Martin Schwidefsky',
'scott.feldman@intel.com' => 'Scott Feldman',
'scott_anderson@mvista.com' => 'Scott Anderson',
'scottm@somanetworks.com' => 'Scott Murray',
'sct@redhat.com' => 'Stephen C. Tweedie',
'sds@tislabs.com' => 'Stephen Smalley',
'sebastian.droege@gmx.de' => 'Sebastian Dröge',
'sfr@canb.auug.org.au' => 'Stephen Rothwell',
'shaggy@austin.ibm.com' => 'Dave Kleikamp',
'shaggy@kleikamp.austin.ibm.com' => 'Dave Kleikamp',
'shaggy@shaggy.austin.ibm.com' => 'Dave Kleikamp', # lbdb
'shingchuang@via.com.tw' => 'Shing Chuang',
'silicon@falcon.sch.bme.hu' => 'Szilárd Pásztor', # google
'simonb@lipsyncpost.co.uk' => 'Simon Burley',
'skip.ford@verizon.net' => 'Skip Ford',
'sl@lineo.com' => 'Stuart Lynne',
'smurf@osdl.org' => 'Nathan Dabney',
'snailtalk@linux-mandrake.com' => 'Geoffrey Lee', # by himself
'solar@openwall.com' => 'Solar Designer',
'sparker@sun.com' => 'Steven Parker', # by Duncan Laurie
'spse@secret.org.uk' => 'Simon Evans', # by Kristian Peters
'sridhar@dyn9-47-18-140.beaverton.ibm.com' => 'Sridhar Samudrala',
'srompf@isg.de' => 'Stefan Rompf',
'steiner@sgi.com' => 'Jack Steiner',
'stelian.pop@fr.alcove.com' => 'Stelian Pop',
'stelian@popies.net' => 'Stelian Pop',
'stern@rowland.harvard.edu' => 'Alan Stern',
'stern@rowland.org' => 'Alan Stern', # lbdb
'steve.cameron@hp.com' => 'Stephen Cameron',
'steve@chygwyn.com' => 'Steven Whitehouse',
'steve@gw.chygwyn.com' => 'Steven Whitehouse',
'stevef@smfhome1.austin.rr.com' => 'Steve French',
'stevef@steveft21.ltcsamba' => 'Steve French',
'stuartm@connecttech.com' => 'Stuart MacDonald',
'sullivan@austin.ibm.com' => 'Mike Sullivan',
'suncobalt.adm@hostme.bitkeeper.com' => 'Tim Hockin', # by Duncan Laurie
'sunil.saxena@intel.com' => 'Sunil Saxena',
'swanson@uklinux.net' => 'Alan Swanson',
'szepe@pinerecords.com' => 'Tomas Szepe',
't-kouchi@mvf.biglobe.ne.jp' => 'Takayoshi Kouchi',
'tai@imasy.or.jp' => 'Taisuke Yamada',
'taka@valinux.co.jp' => 'Hirokazu Takahashi',
'tao@acc.umu.se' => 'David Weinehall', # by himself
'tao@kernel.org' => 'David Weinehall', # by himself
'tcallawa@redhat.com' => 'Tom Callaway',
'tetapi@utu.fi' => 'Tero Pirkkanen', # by Kristian Peters
'th122948@scl1.sfbay.sun.com' => 'Tim Hockin', # by Duncan Laurie
'th122948@scl3.sfbay.sun.com' => 'Tim Hockin', # by Duncan Laurie
'thiel@ksan.de' => 'Florian Thiel', # lbdb
'thockin@freakshow.cobalt.com' => 'Tim Hockin',
'thockin@sun.com' => 'Tim Hockin',
'tigran@aivazian.name' => 'Tigran Aivazian',
'tim@physik3.uni-rostock.de' => 'Tim Schmielau',
'tmolina@cox.net' => 'Thomas Molina',
'tomita@cinet.co.jp' => 'Osamu Tomita',
'tomlins@cam.org' => 'Ed Tomlinson',
'tony.luck@intel.com' => 'Tony Luck',
'tony@cantech.net.au' => 'Anthony J. Breeds-Taurima',
'torvalds@athlon.transmeta.com' => 'Linus Torvalds',
'torvalds@home.transmeta.com' => 'Linus Torvalds',
'torvalds@kiwi.transmeta.com' => 'Linus Torvalds',
'torvalds@penguin.transmeta.com' => 'Linus Torvalds',
'torvalds@tove.transmeta.com' => 'Linus Torvalds',
'torvalds@transmeta.com' => 'Linus Torvalds',
'trini@bill-the-cat.bloom.county' => 'Tom Rini',
'trini@kernel.crashing.org' => 'Tom Rini',
'trond.myklebust@fys.uio.no' => 'Trond Myklebust',
'tvignaud@mandrakesoft.com' => 'Thierry Vignaud',
'twaugh@redhat.com' => 'Tim Waugh',
'tytso@mit.edu' => "Theodore Ts'o", # web.mit.edu/tytso/www/home.html
'tytso@snap.thunk.org' => "Theodore Ts'o",
'tytso@think.thunk.org' => "Theodore Ts'o", # guessed
'urban@teststation.com' => 'Urban Widmark',
'uzi@uzix.org' => 'Joshua Uziel',
'vandrove@vc.cvut.cz' => 'Petr Vandrovec',
'varenet@parisc-linux.org' => 'Thibaut Varene',
'venkatesh.pallipadi@intel.com' => 'Venkatesh Pallipadi',
'viro@math.psu.edu' => 'Alexander Viro',
'vojta@math.berkeley.edu' => 'Paul Vojta',
'vojtech@suse.cz' => 'Vojtech Pavlik',
'vojtech@twilight.ucw.cz' => 'Vojtech Pavlik',
'vojtech@ucw.cz' => 'Vojtech Pavlik', # added by himself
'wa@almesberger.net' => 'Werner Almesberger',
'wes@infosink.com' => 'Wes Schreiner',
'wg@malloc.de' => 'Wolfram Gloger', # lbdb
'willy@debian.org' => 'Matthew Wilcox',
'willy@w.ods.org' => 'Willy Tarreau',
'wilsonc@abocom.com.tw' => 'Wilson Chen', # google
'wim@iguana.be' => 'Wim Van Sebroeck',
'wli@holomorphy.com' => 'William Lee Irwin III',
'wolfgang.fritz@gmx.net' => 'Wolfgang Fritz', # by Kristian Peters
'wolfgang@iksw-muees.de' => 'Wolfgang Muees',
'wstinson@infonie.fr' => 'William Stinson',
'xkaspa06@stud.fee.vutbr.cz' => 'Tomas Kasparek',
'yokota@netlab.is.tsukuba.ac.jp' => 'Yokota Hiroshi',
'yoshfuji@linux-ipv6.org' => 'Hideaki Yoshifuji', # lbdb
'yuri@acronis.com' => 'Yuri Per', # lbdb
'zaitcev@redhat.com' => 'Pete Zaitcev',
'zippel@linux-m68k.org' => 'Roman Zippel',
'zubarev@us.ibm.com' => 'Irene Zubarev', # google
'zwane@commfireservices.com' => 'Zwane Mwaikambo',
'zwane@holomorphy.com' => 'Zwane Mwaikambo',
'zwane@linuxpower.ca' => 'Zwane Mwaikambo',
'zwane@mwaikambo.name' => 'Zwane Mwaikambo',
'~~~~~~thisentrylastforconvenience~~~~~' => 'Cesar Brutus Anonymous'
);
sub doprint(\%@ ); # forward declaration
my %address_unknown;
# get name associated to an email address
sub rmap_address {
my @o = map {defined $addresses{$_} ? $addresses{$_} :
scalar (($address_unknown{$_} = 1), $_); }
map { lc; } @_;
return wantarray ? @o : $o[0];
}
# case insensitive string comparison
# FIXME: use locale?
sub caseicmp { uc($a) cmp uc($b) };
# case insensitive string comparison by surname
# Strings are of the form
# "Firstname Surname <mailaddress>"
# or
# "<mailaddress>"
sub caseicmpbysurname {
my $alast = "";
my $blast = "";
if ($a =~ m/(\S+)\s*(\s\<|$)/) { $alast = $1; }
if ($b =~ m/(\S+)\s*(\s\<|$)/) { $blast = $1; }
return uc($alast . $a) cmp uc($blast . $b);
}
my ($author, $address, $name);
# * $address is always an email address
# * $author can be the email address or Joe N. Sixpack II <joe6@example.com>
# (ready formatted to print)
# * $name is the name (Joe N. Sixpack II) or the mail address
# (<joe6@example.com>)
sub get_name() { return $name; }
sub get_author() { return $author; }
# This table maps MODE => { myhash }
# myhash knows the keys "index" and "print" to choose the respective functions
my %table =
(
'oneline' => { 'index' => \&get_name,
'print' => \&print_oneline },
'terse' => { 'index' => \&get_name,
'print' => \&print_terse },
'grouped' => { 'index' => \&get_author,
'print' => \&print_grouped },
'full' => { 'index' => \&get_author,
'print' => \&print_full }
);
# temp store
my $indexby;
# The sort function we will use
my $namesortfunc;
# Global store #############
# We store our options here.
my %opt;
# As we are parsing, the log is accumulated in the @cur array. When
# we are done with one item (end of input or new mail address found),
# stuff a copy of this @cur array into the %log hash.
sub append_item(\%@)
# arguments: reference to hash
# array to push
{
my $log = shift;
my @cur = @_;
return unless @cur;
return unless &$indexby;
$log->{&$indexby} = () unless defined $log->{&$indexby};
# strip trailing blank lines
my $t;
while (($t = pop(@cur)) eq '') { };
push @cur, $t;
# store the array
push @{$log->{&$indexby}}, [@cur];
}
# Remove duplicates from hash, without changing the order.
# Prefix duplicates with the count.
sub countdups(@) {
my %t;
croak "do not call removedups() in scalar context" unless wantarray;
my @u = grep (!$t{lc $_}++, @_);
return map {
$t{lc $_} > 1 ? sprintf("%d x ", $t{lc $_}) . $_ : $_;
} @u;
}
# Remove duplicates from array, without changing the order. The
# duplicates need not follow each other, so A B A is properly
# stripped down to A B
sub removedups(@) {
my %t;
croak "do not call removedups() in scalar context" unless wantarray;
return grep (!$t{lc $_}++, @_);
}
# Compress the hash passed in, depending on the --compress and --count
# options in the %opt hash.
sub compress(@) {
croak "do not call compress() in scalar context" unless wantarray;
if ($opt{compress}) {
if ($opt{count}) {
return countdups(@_);
} else {
return removedups(@_);
}
} else {
return @_;
}
}
# report write error, exit
# do not return
sub write_error() {
croak "Write error: $!\nAborting";
exit (1);
}
# implementation of "grouped" output:
# author:
# first line of log1
# first line of log2
sub print_grouped(\%) {
my $log = shift;
for (sort $namesortfunc keys %$log) {
my @lines = compress(map { $_->[0] . "\n"; } @{$log->{$_}});
if ($opt{width}) {
@lines = map { expand(wrap($indent1, $indent, ($_))); } @lines;
} else {
@lines = map { "$indent1$_" } @lines;
}
printtag($_) or write_error();
print join("", @lines), "\n" or write_error();
}
}
# implementation of "full" output
# author:
# o log1
# more information on changeset1
# o log2
# more information on changeset2
sub print_full(\%) {
my $log = shift;
for (sort $namesortfunc keys %$log) {
printtag($_) or write_error();
foreach (compress(@{$log->{$_}})) {
my @lines = map { s/^\t//; "$_\n"; } @$_;
if ($opt{width}) {
@lines = expand(wrap($indent1, $indent, @lines));
} else {
@lines = map { "$indent$_"; } @lines;
substr($lines[0], $[, length($indent1)) = $indent1;
}
print join("", @lines), "\n" or write_error();
}
}
print "\n" or write_error();
}
# implementation of "terse" output
# with --swap without --swap
# author1: log1 log1 (author1)
# author1: log2 log2 (author2)
# author2: log3 log3 (author3)
sub print_terse(\%) {
my $log = shift;
for (sort $namesortfunc keys %$log) {
my $a = $_;
if ($opt{width}) {
if ($opt{swap}) {
foreach (compress(map { $_->[0]; } @{$log->{$_}})) {
my @lines = expand(wrap($indent1, $indent, ("$a: $_")));
print join("\n", @lines), "\n" or write_error();
}
} else {
# width, but not swap set
foreach (compress(map { $_->[0]; } @{$log->{$_}})) {
my @addr = expand(split(/\n/, wrap('', $indent, " ($a)")));
my @lines = expand(split(/\n/, wrap($indent1, $indent, ($_))));
if (length($lines[$#lines]) + length($addr[0]) > $opt{width}) {
push @lines, '';
}
$lines[$#lines] .= sprintf("%*s", $opt{width}
- length($lines[$#lines]), $addr[0]);
shift @addr;
print join("\n", @lines), "\n" or write_error();
foreach (@addr) {
printf "%*s\n", $opt{width}, $_ or write_error();
}
}
}
} else {
# using the ?: operator within the map is more maintainable, but
# less efficient.
if ($opt{swap}) {
print join("\n", map { "$indent1$a: $_" }
compress(map { $_->[0]; } @{$log->{$_}})), "\n"
or write_error();
} else {
print join("\n", map { "$indent1$_ ($a)" }
compress(map { $_->[0]; } @{$log->{$_}})), "\n"
or write_error();
}
}
}
}
# implementation of "oneline" output
# which is similar to terse but reformats to one line exactly
# with --swap without --swap
# author1: log1 log1 (author1)
# author1: log2 log2 (author2)
# author2: log3 log3 (author3)
sub print_oneline(\%) {
my $log = shift;
for (sort $namesortfunc keys %$log) {
my $a = $_;
if ($opt{width}) {
if ($opt{swap}) {
foreach (compress(map { $_->[0]; } @{$log->{$_}})) {
my $str = "$a: $_";
if (length($str) > $opt{width}) {
printf "%-.*s...\n", $opt{width}-3, $indent1 . "$a: $_"
or write_error();
} else {
printf "%-.*s\n", $opt{width}, $indent1 . "$a: $_"
or write_error();
}
}
} else { # not swapping
foreach (compress(map { $_->[0]; } @{$log->{$_}})) {
my $l = $opt{width} - length($indent1) - length($a) - 3;
if (length($_) > $l) {
$l -= 3;
printf "%s%-*.*s... (%s)\n", $indent1, $l, $l, $_, $a;
} else {
printf "%s%-*.*s (%s)\n", $indent1, $l, $l, $_, $a;
}
}
}
} else {
# not $opt{width} -> same as print_terse
print_terse(%$log);
}
}
}
# Abbreviate all components of the name except the last. If capital
# Roman numerals form the last component, leave that and the previous
# component alone.
sub abbreviate_name($ ) {
my @a = split /\s+/, $_[0];
# treat Roman numerals as last part of name
my $off = 0;
$off = 1 if ($a[$#a] =~ /^[IVXLCMD]+$/);
for (my $i = 0; $i < $#a - $off; $i++) {
$a[$i] =~ s/^(.).*/$1./;
}
return join(" ", @a);
}
# Read a file and parse it into the %log hash.
sub parse_file(\%$$ ) {
# arguments: %log hash
# file name
# file handle (IO::Handle or IO::File)
croak unless wantarray;
my $log = shift;
my $fn = shift;
my $fh = shift;
my @prolog;
local $_;
# initialize
my @cur = ();
my $first = 0;
my $firstpar = 0;
undef $address;
# now go!
# NOTE: the first @cur item can consist of multiple lines in the
# source file which are joined together. This happens when the first
# paragraph is longer than a single line.
while($_ = $fh -> getline) {
chomp;
s/^ (\S)/\t$1/;
# expand all tabs but the first
$_ = expand($_);
s/^ /\t/;
if (defined $address and $opt{multi}
and m{^[^<[:space:]]} and not m{^ChangeSet@}) {
# if we are in multi mode, if we encounter a non-address
# left-justified line, flush all data and print the header. The
# defined $address trick lets this only trigger to switch back
# from "log entry" to "prolog" mode
append_item(%$log, @cur); @cur = ();
doprint(%$log, @prolog);
print "\n" or write_error(); # print blank line between changelogs
@prolog = ($_);
undef %$log;
undef $address;
} elsif (m{^<([^>]+)>} or m{^ChangeSet@[0-9.]+,\s*[-0-9:+ ]+,\s*(.*)}) {
# go figure if a line starts with an address, if so, take it
# resolve the address to a name if possible
append_item(%$log, @cur); @cur = ();
$address = lc($1);
$address =~ s/\[[^]]+\]$//;
$name = rmap_address($address);
if ($name ne $address) {
if ($opt{'abbreviate-names'}) {
$name = abbreviate_name($name);
}
$author = $name . ' <' . $address . '>';
} else {
$author = '<' . $address . '>';
}
$first = 1;
$firstpar = 1;
} elsif ($first) {
# we have a "first" line after an address, take it,
# strip common redundant tags
# kill "PATCH" tag
s/^\s*\[PATCH\]//;
s/^\s*PATCH//;
s/^\s*[-:]+\s*//;
# strip trailing colon or period, and if we strip one,
# we don't parse further lines as part of the first paragraph
if (s/[:.]+\s*$//) { $firstpar = 0; }
# kill leading and trailing whitespace for consistent indentation
s/^\s+//; s/\s+$//;
push @cur, $_;
$first = 0;
} elsif (defined $address) {
# second or subsequent lines -- if in first paragraph,
# append this line to the first log line.
if (m/^\s*$/) { $firstpar = 0; }
elsif (m/^\s*[-*o\#]/) { $firstpar = 0; }
if ($firstpar) {
s/^\s*/ /;
$cur[0] .= $_;
} else {
push @cur, $_;
}
# we don't parse further lines as part of the first paragraph
if (s/[:.]+\s*$//) { $firstpar = 0; }
} else {
# store header before a changelog
push @prolog, $_;
}
}
if ($fh -> error) {
die "Error while reading from \"$fn\": $!";
}
# at file end, flush @cur array to %log.
append_item(%$log, @cur);
return @prolog;
}
# print a word-wrapped name or mail address, followed by a trailing colon.
# used by print_grouped and print_full
# passes the return value of print back up
sub printtag($ ) {
my $a = shift;
$a .= ':';
return print $opt{width} ? expand(wrap("", "", ($a))) : $a, "\n";
}
# === MAIN PROGRAM ===============================================
# Command line arguments
# What options do we support?
my @opts = ("help|?|h", "man", "mode=s", "compress!", "count!", "width:i",
"swap!", "merge!", "warn!", "multi!", "abbreviate-names!",
"by-surname!");
# "bitkeeper|bk!");
# How do we parse them?
if ($Getopt::Long::VERSION gt '2.24') {
Getopt::Long::Configure("gnu_getopt");
}
# set default options
$opt{mode} = 'grouped';
$opt{warn} = 1;
# Parse from environment, temporarily storing the original @ARGV.
if (defined $ENV{LINUXKERNEL_BK_FMT}) {
my @savedargs = @ARGV;
@ARGV = parse_line('\s+', 0, $ENV{LINUXKERNEL_BK_FMT});
GetOptions(\%opt, @opts)
or pod2usage(-verbose => 0,
-message => $0 . ': error in $LINUXKERNEL_BK_FMT');
push @ARGV, @savedargs;
}
# Parse command line. Handle help, check for errors.
GetOptions(\%opt, @opts) or pod2usage(-verbose => 0);
pod2usage(-verbose => 1) if $opt{help};
pod2usage(-verbose => 2) if $opt{man};
pod2usage(-verbose => 0,
-message => ("$0: Unknown mode specified.\nValid modes are:\n "
. join(" ", sort keys %table) . "\n"))
unless defined $table{$opt{mode}};
pod2usage(-verbose => 0,
-message => "$0: No files given, refusing to read from a TTY.")
if (not $opt{bitkeeper} and (@ARGV == 0) and (-t STDIN));
pod2usage(-verbose => 0,
-message => "$0: Must have one or two arguments in --bitkeeper mode.")
if ($opt{bitkeeper} && (@ARGV < 1 || @ARGV > 2));
pod2usage(-verbose => 0,
-message => "$0: You cannot use --merge and --multi at the same time.")
if ($opt{merge} and $opt{multi});
# Shortcut for programmer convenience :-)
$indexby = $table{$opt{mode}}->{'index'};
# --count implies --compress
if ($opt{count}) { $opt{compress} = 1; }
# Set the sort function
$namesortfunc = \&caseicmp;
if ($opt{'by-surname'}) { $namesortfunc = \&caseicmpbysurname; }
# if --width is without argument or the argument is zero,
# try to figure $COLUMNS or fall back to 80.
if (exists $opt{width} and not $opt{width}) {
$opt{width} = $ENV{COLUMNS} ? $ENV{COLUMNS} : 80;
}
# Print the passed-in array linewise, checking for write errors
# Then call the configured function to print %log formatted
sub doprint(\%@ ) {
my $log = shift;
print join("\n", @_), "\n" or write_error();
$table{$opt{mode}}->{print}->($log);
}
# --------------------------------------------------------------------
# Global initializations
$Text::Tabs::tabstop = 8;
$Text::Wrap::huge = 'wrap';
if ($opt{width}) {
$Text::Wrap::columns = $opt{width};
}
if ($debug) {
print STDERR "DEBUG: Options summary:\n";
while (my ($k, $v) = each %opt) { print STDERR "DEBUG: '$k' => '$v'\n"; }
print STDERR "DEBUG: Arguments summary:\n";
foreach (@ARGV) { print STDERR "DEBUG: '$_'\n"; }
}
# Main program
my @prolog;
my %log;
if($opt{bitkeeper}) {
# in Bitkeeper mode, try to figure the change set, and connect the
# bk program to our stdin.
die "not yet implemented";
} elsif (@ARGV) {
# file names
foreach my $fn (@ARGV) {
my $fh = new IO::File;
$fh->open($fn, "r")
or die "cannot open \"$fn\": $!\nAborting";
push @prolog, parse_file(%log, $fn, $fh);
if (not $opt{merge}) {
doprint(%log, @prolog);
undef %log;
}
undef @prolog;
}
if ($opt{merge}) {
doprint(%log, ());
}
} else {
# stdin
my @prolog;
my $fh = new IO::Handle;
$fh->fdopen(fileno(STDIN), "r")
or die "cannot open stdin: $!\nAborting";
@prolog = parse_file(%log, "stdin", $fh);
doprint(%log, @prolog);
}
# Flush STDOUT to prevent clobbering STDOUT with 2>&1-style redirections.
$| = 1;
# Warn about unknown addresses
if ($opt{warn}) {
foreach (sort caseicmp keys %address_unknown) {
print STDERR "Warning: unknown address \"$_\"\n" or write_error();
}
}
__END__
# --------------------------------------------------------------------
# $Log: lk-changelog.pl,v $
# Revision 0.59 2002/12/11 12:11:51 emma
# Workaround: strip trailing [tag] from mail addresses, reported by Marcel
# Holtmann.
# Add some new addresses.
#
# Revision 0.58 2002/12/07 15:14:57 emma
# More addresses figured by Vitezslav Samel.
#
# Revision 0.57 2002/12/07 15:08:34 emma
# 3 more addresses.
#
# Revision 0.56 2002/11/28 02:32:11 emma
# List David Weinehall.
#
# Revision 0.55 2002/11/27 04:44:54 emma
# Add kaos@sgi.com for Keith Owens as per his own request.
#
# Revision 0.54 2002/11/26 23:27:11 emma
# Merge changes from Linus' version.
#
# Revision 0.53 2002/11/25 17:12:08 emma
# Add Lee Nash's address
#
# Revision 0.52 2002/11/14 14:50:21 emma
# Bugfix --by-surname for some modes. Add two addresses. Fix Carl-Daniel Hailfinger's address to lower case.
#
# Revision 0.51 2002/11/14 14:31:10 emma
# Add Carl-Daniel Hailfinger's new address. Add TODO item to see if regexp/wildcard match in address list is possible.
#
# Revision 0.50 2002/11/09 14:24:21 emma
# Add comment to Richard Hitt's address.
#
# Revision 0.49 2002/11/04 17:13:21 emma
# Add 4 addresses sent by Duncan Laurie.
#
# Revision 0.48 2002/11/04 12:37:38 emma
# Another four dozen addresses, courtesy of Vitezslav Samel.
#
# Revision 0.47 2002/11/04 12:19:17 emma
# Vitezslav Samel: Merge bugfix to treat addresses with upper-case characters in ChangeSet.
#
# Revision 0.46 2002/11/04 11:37:33 emma
# 7 new addresses.
#
# Revision 0.45 2002/11/04 11:26:41 emma
# 18 new addresses.
#
# Revision 0.44 2002/10/04 03:37:51 emma
# Track BK-kernel-tools changes to Jes Sorensen's name.
#
# Revision 0.43 2002/10/04 03:33:47 emma
# 4 new addresses.
#
# Revision 0.42 2002/10/01 20:20:33 emma
# Another 25 addresses for ChangeLog 2.5.3?, from google and lbdb.
#
# Revision 0.41 2002/10/01 19:45:20 emma
# Some detective work on google found another 19 addresses.
#
# Revision 0.40 2002/09/30 01:44:51 emma
# Drop bogus geert@linux-m68k.org.com address.
#
# Revision 0.39 2002/09/26 23:07:13 emma
# 46 new addresses from lbdb
#
# Revision 0.38 2002/09/26 22:37:29 emma
# 23 new addresses
#
# Revision 0.37 2002/09/26 22:27:37 emma
# Fix --multi mode.
#
# Revision 0.36 2002/08/29 09:13:40 emma
# Correct Vojtech Pavlik's addresses after mail from him.
#
# Revision 0.35 2002/08/21 13:49:46 emma
# Many new addresses and one correction by Vitezslav 'Vita' Samel <samel@mail.cz>
#
# Revision 0.34 2002/08/21 13:45:53 emma
# 2 new names
#
# Revision 0.33 2002/08/20 01:29:34 emma
# The usual set of new addresses.
#
# Revision 0.32 2002/08/20 01:14:40 emma
# Add Marcel Holtmann, who sent a patch.
#
# Revision 0.31 2002/08/12 22:34:41 emma
# Patch by Marcus Alanen <maalanen@ra.abo.fi>:
# Hi, patch to sort by developer surname, and a couple of more
# developers. Use if you want to.
#
# Revision 0.30 2002/07/20 17:18:28 emma
# Add one new address
#
# Revision 0.29 2002/07/17 23:10:13 emma
# 23 new addresses.
#
# Revision 0.28 2002/06/25 09:46:57 emma
# New mail addresses.
#
# Revision 0.27 2002/06/14 17:05:23 emma
# three new addresses
#
# Revision 0.26 2002/06/06 10:26:51 emma
# Get rid of global %log, pass it to sub functions by reference.
# Move IO::Handle/IO::File treatment back into main program.
# Prepare for integrating Bitkeeper.
#
# Revision 0.25 2002/06/04 00:01:23 emma
# Recognize "bk changes" output format (that is: "ChangeSet@1.234.5.6,
# date, programmer" tag line and body indented by two spaces). Reported
# by Marcelo Tosatti <marcelo@conectiva.com.br>. Former versions would
# only recognize the BK-kernel-tools/changelog format (see
# http://gkernel.bkbits.net:8080/BK-kernel-tools/anno/changelog@1.5?nav=index.html|src/).
#
# Revision 0.24 2002/06/03 13:33:00 emma
# * Fix 'grouped', 'terse', 'oneline' modes (change to parse_file()). We
# now take the first paragraph instead of the first line as log
# entry. We also guess where the paragraph ends, it ends at a line with
# trailing dot or colon, or if the next line is empty or starts with a
# "bullet" (that is -, *, o or #).
# * New option --abbreviate-names.
# * Fix 'full' mode indentation, broken in v0.21 by expanding the tabs.
# Now, the first tab is unexpanded again.
# * Enhance 'online' mode: if the log is truncated, append an ellipsis ("...").
# * Add more mail addresses.
# * Fix Brian Beattie's name (was "Michael Beattie").
#
# Revision 0.23 2002/06/03 12:36:01 emma
# More e-mail addresses.
#
# Revision 0.22 2002/05/29 20:28:20 emma
# Mail addresses added.
#
# Revision 0.21 2002/05/29 11:45:48 emma
# * Implement --mode=oneline.
# * Expand tabs in input lines (tab stops are spaced 8 columns away from each other).
# * Bugfix --multi mode: all append_item to flush @cur before printing.
# * Restore prolog detection in --multi mode for efficiency.
# * Undo the "unexpand()" that Text::Wrap does, it breaks our line width
# calculation. In the long run, a replacement for Text::Wrap must be
# found that does not unexpand().
#
# Revision 0.20 2002/05/29 10:44:35 emma
# New --multi option that states multiple changelogs are in the same file.
#
# Revision 0.19 2002/05/29 10:27:21 emma
# New option: --[no]warn: Warn about unknown addresses. By default
# enabled, use --nowarn to suppress.
#
# Revision 0.18 2002/05/29 10:17:00 emma
# New addresses.
#
# Revision 0.17 2002/05/25 23:32:49 emma
# Four new addresses.
#
# Revision 0.16 2002/05/22 15:52:26 emma
# Fix deliberate typo in use Pod::Usage that was left over from debugging.
#
# Revision 0.15 2002/05/22 14:05:13 emma
# Sort addresses/names case insensitively (not locale aware).
# Heed quotes when parsing $ENV{LINUXKERNEL_BK_FMT}. As I don't
# currently have Perl 5.004 to test the older Text::ParseWords
# implementation, script now requires Perl 5.005.
# Do not require Pod::Usage, but warn if it's missing.
#
# Revision 0.14 2002/05/22 12:39:59 emma
# Fold the print function dispatcher into %table.
# Parse files on command line individually, but allow to treat them as
# one with a new --merge option.
# Make @cur local to the parse function.
# Die on read errors on input files. Use IO::Handle to read files.
#
# Revision 0.13 2002/05/21 12:42:46 emma
# Add 3 mail addresses.
# Add commentary to the code.
# Check for write errors on STDOUT and die if one happens.
#
# Revision 0.12 2002/05/18 16:54:50 emma
# Make --compress work in terse mode.
# New feature: --swap in terse mode swaps address and log entry.
#
# Revision 0.11 2002/05/18 16:43:30 emma
# Support 'terse' mode.
#
# Revision 0.10 2002/05/18 16:15:10 emma
# Another set of addresses.
#
# Revision 0.9 2002/05/18 16:06:43 emma
# Dozens of new addresses.
#
# Revision 0.8 2002/05/18 15:46:01 emma
# 21 new addresses.
#
# Revision 0.7 2002/05/16 13:57:37 emma
# Add some documentation.
#
# Revision 0.6 2002/05/16 13:55:24 emma
# Fix shift ambiguity in printtag().
#
# Revision 0.5 2002/05/16 13:51:43 emma
# Implement grouped and full modes.
#
# Revision 0.4 2002/05/16 12:07:17 emma
# Add some POD.
# Do options and environment parsing.
# Prepare multiple output modes (only grouped supported at the moment.)
#
# Revision 0.3 2002/05/13 16:11:34 emma
# Compress identical ChangeLog lines (they need not be subsequent, note
# this feature has O(n^2) behaviour, where n is the number of stored
# ChangeLog lines per respective author):
# Soft-fp fix:
# Soft-fp fix:
# becomes:
# 2 x Soft-fp fix:
#
# Revision 0.2 2002/05/13 10:40:32 emma
# Only consider e-mail addresses that are left-justified.
# Suggested by Greg Kroah-Hartman <greg@kroah.com>.
#
=head1 NAME
lk-changelog.pl - Reformat BitKeeper ChangeLog for Linux Kernel
=head1 SYNOPSIS
lk-changelog.pl [options] [file [...]]
Try lk-changelog.pl --help or lk-changelog.pl --man for more information.
=head1 OPTIONS
-h, --help print this short help
--man print the manual page for this program
--[no]compress if true, suppress duplicate entries
--[no]count if true, fold duplicate entries into one,
prefixing it with the count. Implies --compress.
--[no]swap in terse and oneline mode, swap address and log entry.
--[no]merge treat all files on command line as one big file
and suppress the prolog
--[no]multi states that multiple changelogs are in one file
--[no]warn warn about unknown addresses. Default: set!
--[no]abbreviate-names
abbreviate all but the last name
--[no]by-surname
sort entries by surname
--mode=MODE specify the output format (use --man to find out more)
--width[=WIDTH] specify the line length, if omitted: $COLUMNS or 80.
text lines will not exceed this length.
Warning: Neither --compress nor --count are currently functional with
--mode=full.
=head1 DESCRIPTION
Summarizes or reformats BitKeeper ChangeLogs for Linux Kernel 2.X.
=head1 ENVIRONMENT
=over
=item LINUXKERNEL_BK_FMT
Default options. These have the same meaning and syntax as the command
line options and are parsed before them, so you can override defaults
set in this variable on the command line. B<Example:> If you put
--swap here and --noswap on your command line, --noswap takes
precedence.
=back
=head1 EXAMPLES
=over
=item Reformat ChangeLog-2.5.17, displaying all changes grouped by
their author (that is the default mode, but we specify it anyways),
with 76 character wide lines:
lk-changelog.pl --mode=grouped --width=76 ChangeLog-2.5.17
=item Reformat ChangeLog-2.5.18, displaying all changes and their
author on in "-ac changelog style", with 80 character wide lines:
lk-changelog.pl --mode=terse --width=80 ChangeLog-2.5.18
=item Reformat 2.4.19-pre ChangeLogs (several in one file) from your mailer:
Use the pipe command to pipe the mail into:
lk-changelog.pl --multi --mode=terse --width=80
=back
=head1 AUTHOR
=over
=item * Matthias Andree <matthias.andree@gmx.de>
Main developer
=item * Marcus Alanen <maalanen@abo.fi>
=item * Tomas Szepe <szepe@pinerecords.com>
=item * Further help from:
Albert D. Cahalan <acahalan@cs.uml.edu>, Robinson Maureira Castillo
<rmaureira@alumno.inacap.cl>, Greg Kroah-Hartman <greg@kroah.com>.
=back
=head1 BUGS
=over
=item * The header is not wrapped for --width character wide lines.
=item * The implementation is not yet finished.
=item * This manual page is incomplete.
=item * --compress does not currently work with --mode=full.
=item * does not detect if the changelog is already summarized (as in Marcelo's 2.4.19-pre9 announcement on the list)
=back
=head1 TODO
=over
=item * --compress-me-harder
To merge
o iget_locked [1/6]
o iget_locked [2/6]
...
o iget_locked [6/6]
into
o iget_locked [1..6/6]
=item * Integrate Bitkeeper
=item * See if the map can be made to use or accompanied by regexp.
=back
=cut
^ permalink raw reply
* bass/treble control in emu10k
From: jordan.breeding @ 2002-12-11 12:03 UTC (permalink / raw)
To: alsa-devel
Is it possible for the emu10k (SBLive!/Audigy) driver to get bass/treble
controls in ALSA like it has in Windows and the OSS driver? Thanks.
Jordan
-------------------------------------------------------
This sf.net email is sponsored by:
With Great Power, Comes Great Responsibility
Learn to use your power at OSDN's High Performance Computing Channel
http://hpc.devchannel.org/
^ permalink raw reply
* Re: "bio too big" error
From: Wil Reichert @ 2002-12-11 12:09 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel
In-Reply-To: <3DF6CAA9.BC34612@digeo.com>
Could you please enable CONFIG_KALLSYMS and regenerate the backtrace?
darwin:~$ cp /a01/movies/metropolis.avi .
bio too big device ide2(33,0) (256 > 255)
Call Trace:
[<c02035ee>] generic_make_request+0x1ce/0x210
[<e093046d>] __clone_and_map+0xbd/0x120 [dm_mod]
[<e0930558>] __split_bio+0x88/0xb0 [dm_mod]
[<e09305f5>] dm_request+0x75/0xb0 [dm_mod]
[<c020359a>] generic_make_request+0x17a/0x210
[<c01dd314>] radix_tree_extend+0x64/0x90
[<c0203684>] submit_bio+0x54/0xa0
[<c017209e>] mpage_bio_submit+0x2e/0x40
[<c0172689>] mpage_readpages+0xc9/0x160
[<c0189780>] ext3_get_block+0x0/0xb0
[<c013a526>] read_pages+0x116/0x120
[<c0189780>] ext3_get_block+0x0/0xb0
[<c013853d>] __alloc_pages+0x8d/0x290
[<c013a624>] do_page_cache_readahead+0xf4/0x180
[<c013a7fe>] page_cache_readahead+0x14e/0x190
[<c0135168>] do_generic_mapping_read+0xb8/0x410
[<c0154443>] __block_commit_write+0x93/0xa0
[<c0135500>] file_read_actor+0x0/0xf0
[<c01357c4>] __generic_file_aio_read+0x1d4/0x220
[<c0135500>] file_read_actor+0x0/0xf0
[<c013586a>] generic_file_aio_read+0x5a/0x80
[<c015076b>] do_sync_read+0x8b/0xc0
[<c0136e3c>] generic_file_write+0x5c/0x80
[<c015085e>] vfs_read+0xbe/0x130
[<c0150afe>] sys_read+0x3e/0x60
[<c01096af>] syscall_call+0x7/0xb
Wil
^ permalink raw reply
* Translating Ziegler Book ipchains Rules
From: Tim Evans @ 2002-12-11 12:00 UTC (permalink / raw)
To: netfilter
We've been using the example script from the Ziegler _Linux Firewalls_
book as a base for our firewall for some years, and are now "translating"
it to use iptables.
That script has nice, symmetrical pairs of rules like this:
# HTTP (80) - accessing remote web sites as a client
ipchains -A output -i eth1 -s $IPADDR $UNPRIV -d 0/0 80 -p tcp -j ACCEPT
ipchains -A input -i eth1 -s 0/0 80 -d $IPADDR $UNPRIV -p tcp ! -y -j ACCEPT
With connection tracking in iptables, can all these pairs be cut to just
one rule, like this:
$IPTABLES -A FORWARD -o eth1 -s $IPADDR -p tcp --sport $UNPRIV \
--dport 80 -j ACCEPT
Or do I still need this, too?
$IPTABLES -A FORWARD -i eth1 -p tcp --sport 80 -d $IPADDR \
--dport $UNPRIV ! --syn -j ACCEPT
Similarly, is it necessary to have multiple rules for ftp control
and data ports, or does ip_conntrack_ftp handle everything with just
one rule, like this:
$IPTABLES -A FORWARD -o eth1 -s $IPADDR -p tcp --sport $UNPRIV \
--dport 21 -j ACCEPT
Or do I need these in pairs also, with parallel ones for port 21?
Thanks, I will summarize.
--
Tim Evans | 5 Chestnut Court
tkevans@tkevans.com | Owings Mills, MD 21117
http://www.tkevans.com/ | 443-394-3864;410-748-0160 (pager)
^ permalink raw reply
* Re: 2.4.20 AGP for I845 wrong ?
From: Nicolas ASPERT @ 2002-12-11 12:07 UTC (permalink / raw)
To: Margit Schubert-While; +Cc: linux-kernel, davej, faith, dri-devel
In-Reply-To: <fa.jjk71mv.1kja10g@ifi.uio.no>
[-- Attachment #1: Type: text/plain, Size: 912 bytes --]
Margit Schubert-While wrote:
> From drivers/char/agp/agpgart_be.c
> 4554,4559
> { PCI_DEVICE_ID_INTEL_845_G_0,
> PCI_VENDOR_ID_INTEL,
> INTEL_I845_G,
> "Intel",
> "i845G",
> intel_830mp_setup },
>
> Surely this is wrong or ?
> Should be "intel_845_setup", I think.
>
IIRC, the 845G is a "new" version of the 830MP chipset (it had been
added by Abraham vd Merwe & Graeme Fisher some months ago), but acts
basically just as the 830MP. Therefore the entry is correct.... Or maybe
if it gets confusing adding a comment would not hurt...
>
> Also in drivers/char/drm/drm_agpsupport.h, the switch statement at 262
> is missing the
> cases for INTEL_I830_M, INTEL_I845_G.
That's true. It is also missing in 2.5.51.
I attach two patches, one for 2.4.21-pre1 and one for 2.5.51 that should
fix this.
Regards
Nicolas.
[-- Attachment #2: intelchipset-id-2.4.21-pre1.diff --]
[-- Type: text/plain, Size: 848 bytes --]
diff -ru linux-2.4.21-pre1.clean/drivers/char/drm/drm_agpsupport.h linux-2.4.21-pre1/drivers/char/drm/drm_agpsupport.h
--- linux-2.4.21-pre1.clean/drivers/char/drm/drm_agpsupport.h Wed Dec 11 12:36:58 2002
+++ linux-2.4.21-pre1/drivers/char/drm/drm_agpsupport.h Wed Dec 11 12:42:34 2002
@@ -267,8 +267,10 @@
case INTEL_I810: head->chipset = "Intel i810"; break;
case INTEL_I815: head->chipset = "Intel i815"; break;
case INTEL_I820: head->chipset = "Intel i820"; break;
+ case INTEL_I830_M: head->chipset = "Intel i830M"; break;
case INTEL_I840: head->chipset = "Intel i840"; break;
case INTEL_I845: head->chipset = "Intel i845"; break;
+ case INTEL_I845_G: head->chipset = "Intel i845G"; break;
case INTEL_I850: head->chipset = "Intel i850"; break;
case VIA_GENERIC: head->chipset = "VIA"; break;
[-- Attachment #3: intelchipset-id-2.5.51.diff --]
[-- Type: text/plain, Size: 854 bytes --]
diff -ru linux-2.5.51.clean/drivers/char/drm/drm_agpsupport.h linux-2.5.51/drivers/char/drm/drm_agpsupport.h
--- linux-2.5.51.clean/drivers/char/drm/drm_agpsupport.h Tue Dec 10 03:45:39 2002
+++ linux-2.5.51/drivers/char/drm/drm_agpsupport.h Wed Dec 11 12:55:08 2002
@@ -271,10 +271,12 @@
#if LINUX_VERSION_CODE >= 0x02040f /* KERNEL_VERSION(2,4,15) */
case INTEL_I820: head->chipset = "Intel i820"; break;
#endif
+ case INTEL_I830_M: head->chipset = "Intel i830M"; break;
case INTEL_I840: head->chipset = "Intel i840"; break;
#if LINUX_VERSION_CODE >= 0x02040f /* KERNEL_VERSION(2,4,15) */
case INTEL_I845: head->chipset = "Intel i845"; break;
#endif
+ case INTEL_I845: head->chipset = "Intel i845G"; break;
case INTEL_I850: head->chipset = "Intel i850"; break;
case INTEL_460GX: head->chipset = "Intel 460GX"; break;
^ permalink raw reply
* [BENCHMARK] ctxbench for some recent kernels
From: Bill Davidsen @ 2002-12-11 12:07 UTC (permalink / raw)
To: Linux-Kernel
Comparing the Redhat 7.3 kernel with some recent 2.5 kernels. All on a
dual Celeron 500 with an SMP kernel run with the "nosmp" option.
================================================================
Results by IPC type
================================================================
loops/sec
SIGUSR1 low high average
2.4.18-10nosmp-bl 62700 63254 63049
2.5.41nosmp-bl 55048 55660 55418
2.5.43nosmp-bl 50093 50250 50176
2.5.47-ac6nosmp-bl 54200 54236 54215
2.5.50nosmp-bl 51675 56403 54818
loops/sec
message queue low high average
2.4.18-10nosmp-bl 105275 105737 105513
2.5.41nosmp-bl 108057 108413 108232
2.5.43nosmp-bl 100698 101835 101325
2.5.47-ac6nosmp-bl 98086 98223 98157
2.5.50nosmp-bl 104965 105261 105105
loops/sec
pipes low high average
2.4.18-10nosmp-bl 86794 88484 87637
2.5.41nosmp-bl 74026 78242 76734
2.5.43nosmp-bl 80559 81233 80953
2.5.47-ac6nosmp-bl 71277 78883 75415
2.5.50nosmp-bl 81211 81529 81411
loops/sec
semiphore low high average
2.4.18-10nosmp-bl 114407 114644 114537
2.5.41nosmp-bl 114459 114658 114535
2.5.43nosmp-bl 113222 113423 113322
2.5.47-ac6nosmp-bl 95986 96347 96179
2.5.50nosmp-bl 110582 112044 111450
loops/sec
spin+yield low high average
2.4.18-10nosmp-bl 189489 190677 190102
2.5.41nosmp-bl 250737 251116 250867
2.5.43nosmp-bl 249474 249836 249607
2.5.47-ac6nosmp-bl 245594 245905 245740
2.5.50nosmp-bl 252055 252529 252361
loops/sec
spinlock low high average
2.4.18-10nosmp-bl 3 3 3
2.5.41nosmp-bl 3 3 3
2.5.43nosmp-bl 3 3 3
2.5.47-ac6nosmp-bl 3 3 3
2.5.50nosmp-bl 3 3 3
--
bill davidsen, CTO TMR Associates, Inc <davidsen@tmr.com>
Having the feature freeze for Linux 2.5 on Hallow'een is appropriate,
since using 2.5 kernels includes a lot of things jumping out of dark
corners to scare you.
^ permalink raw reply
* Re: [LARTC] VRRPD (rfc2338)
From: sabat @ 2002-12-11 11:56 UTC (permalink / raw)
To: lartc
In-Reply-To: <marc-lartc-103950635007394@msgid-missing>
The daemon at http://www.keepalived.org/ is the VRRPd implementation
that's supposed to be the best. It's actually part of the Linux Virtual
Server project (layer 4 load balancer), but the author claims you should
be able to use it as a pure VRRP daemon -- although when I've read the
doc, I couldn't figure out how. (But don't be discouraged by my
impatience. :) It's supposed to be the most mature and ready-for-production.
There's also Jerome Etienne's reference implementation (don't have a
URL, but it's easy to Google). However, I've heard from more than place
that this is too proof-of-concept and perhaps not production-worthy.
Here's a link to a paper about running VRRPd as the hotspare protocol
for linux firewalls (uses Jerome Etienne's implementation):
http://www.gnusec.com/resource/security/docs/HAFirewallLinux-VRRP.pdf.
BTW, keep in mind that if you intend to use VRRP in an environment with
Cisco routers, you'll need to do some work on them too. Cisco routers do
not accept multicast MAC addresses as legit ARP replies by default.
Unfortunately, the VRRP RFC and all implementations use multicast MACs.
What that means is that you'll need to either 1) turn the switch on the
Cisco routers that makes them accept multicast MAC ARP replies (good),
or 2) put a static ARP entry in the Cisco routers for the VRRP multicast
MACs (better).
Hope that helps.
-S
Anton Tinchev wrote:
>Can someone point me for good VRRPD (rfc2338) implementation on linux.
>Some stable and live project
>Thanks
>
>_______________________________________________
>LARTC mailing list / LARTC@mailman.ds9a.nl
>http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/
>
>
_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
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.