All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: adding swap workarounds oom - was: Re: Out of Memory: Killed process 16498 (java).
From: Jens Axboe @ 2006-03-01 13:41 UTC (permalink / raw)
  To: Andy Chittenden
  Cc: Andi Kleen, Anton Altaparmakov, Andrew Morton, davej,
	linux-kernel, lwoodman, Bartlomiej Zolnierkiewicz
In-Reply-To: <89E85E0168AD994693B574C80EDB9C270393C104@uk-email.terastack.bluearc.com>

On Wed, Mar 01 2006, Andy Chittenden wrote:
> with revised patch that does:
> 
>                 printk("sg%d: dma=%llx, dma_len=%u/%u, pfn=%lu\n", i,
> (unsigned long long) sg->dma_address, sg->dma_length, sg->offset,
> page_to_pfn(sg->page));

That is correct, thanks!

> hda: DMA table too small
> ide dma table, 255 entries, bounce pfn 1310720
> sg0: dma=81c8800, dma_len=4096/0, pfn=1296369

Still the same badness here, it's 2kb into a page so straddles two pages
for one entry.

> sg1: dma=81c9800, dma_len=4096/0, pfn=1292696
> sg2: dma=81ca800, dma_len=4096/0, pfn=1296278
> sg3: dma=81cb800, dma_len=4096/0, pfn=1296092
> sg4: dma=81cc800, dma_len=4096/0, pfn=1296090
> sg5: dma=81cd800, dma_len=4096/0, pfn=1296088
> sg6: dma=81ce800, dma_len=4096/0, pfn=1296086
> sg7: dma=81cf800, dma_len=4096/0, pfn=1296083

This one gets split.

> sg8: dma=81d0800, dma_len=4096/0, pfn=1296081
> sg9: dma=81d1800, dma_len=4096/0, pfn=1292712
> sg10: dma=81d2800, dma_len=4096/0, pfn=1297008
> sg11: dma=81d3800, dma_len=4096/0, pfn=1297063
> sg12: dma=81d4800, dma_len=4096/0, pfn=1297146
> sg13: dma=81d5800, dma_len=4096/0, pfn=1297193
> sg14: dma=81d6800, dma_len=4096/0, pfn=1297198
> sg15: dma=81d7800, dma_len=4096/0, pfn=1296363
> sg16: dma=81d8800, dma_len=4096/0, pfn=1304021
> sg17: dma=81d9800, dma_len=4096/0, pfn=1303030
> sg18: dma=81da800, dma_len=4096/0, pfn=1302151
> sg19: dma=81db800, dma_len=4096/0, pfn=1303979
> sg20: dma=81dc800, dma_len=4096/0, pfn=1306158
> sg21: dma=81dd800, dma_len=4096/0, pfn=1304015
> sg22: dma=81de800, dma_len=4096/0, pfn=1304957
> sg23: dma=81df800, dma_len=4096/0, pfn=1304001

This one as well.

> sg24: dma=81e0800, dma_len=4096/0, pfn=1292710
> sg25: dma=81e1800, dma_len=4096/0, pfn=1304035
> sg26: dma=81e2800, dma_len=4096/0, pfn=1303025
> sg27: dma=81e3800, dma_len=4096/0, pfn=1304019
> sg28: dma=81e4800, dma_len=4096/0, pfn=1302256
> sg29: dma=81e5800, dma_len=4096/0, pfn=1304738
> sg30: dma=81e6800, dma_len=4096/0, pfn=1302998
> sg31: dma=81e7800, dma_len=4096/0, pfn=1304148
> sg32: dma=81e8800, dma_len=4096/0, pfn=1304126
> sg33: dma=81e9800, dma_len=4096/0, pfn=1303079
> sg34: dma=81ea800, dma_len=4096/0, pfn=1302996
> sg35: dma=81eb800, dma_len=4096/0, pfn=1296243
> sg36: dma=81ec800, dma_len=4096/0, pfn=1306396
> sg37: dma=81ed800, dma_len=4096/0, pfn=1306474
> sg38: dma=81ee800, dma_len=4096/0, pfn=1295929
> sg39: dma=81ef800, dma_len=4096/0, pfn=1296156

And this. And a few more below. The end result is that we are about ~20
entries short.

Andi, any idea what is going on here? Why is this throwing up all of a
sudden??

-- 
Jens Axboe


^ permalink raw reply

* Re: [PATCH] leave APIC code inactive by default on i386
From: Dave Jones @ 2006-03-01 13:39 UTC (permalink / raw)
  To: Zwane Mwaikambo
  Cc: Michael Ellerman, Darrick J. Wong, linux-kernel, Chris McDermott
In-Reply-To: <Pine.LNX.4.64.0602282234120.28074@montezuma.fsmlabs.com>

On Tue, Feb 28, 2006 at 10:36:09PM -0800, Zwane Mwaikambo wrote:

 > > The number of systems that actually *need* APIC enabled are in the
 > > vast (though growing) minority, so it's unlikely that most newbies
 > > will hit this.  The problem is also the inverse of what you describe.
 > > Typically the distros have DMI lists of machines that *need* APIC
 > > to make it enabled by default so everything 'just works'.
 > > 
 > > The big problem the patch solves is allowing it to be possible
 > > to build a kernel with UP APIC code, but disabled by default
 > > (Because there a lot of older machines that die horribly if it
 > >  was enabled by default).
 > 
 > The current policy is off if it was disabled by the BIOS. Is the intention 
 > of this patch to have it off unconditionally unless explicitely enabled by 
 > kernel parameter?

Yes, (or forced on by dmi string)

		Dave



^ permalink raw reply

* Re: [PATCH] leave APIC code inactive by default on i386
From: Dave Jones @ 2006-03-01 13:38 UTC (permalink / raw)
  To: Michael Ellerman; +Cc: Darrick J. Wong, linux-kernel, Chris McDermott
In-Reply-To: <200603011610.31090.michael@ellerman.id.au>

On Wed, Mar 01, 2006 at 04:10:26PM +1100, Michael Ellerman wrote:
 > > The number of systems that actually *need* APIC enabled are in the
 > > vast (though growing) minority, so it's unlikely that most newbies
 > > will hit this.  The problem is also the inverse of what you describe.
 > > Typically the distros have DMI lists of machines that *need* APIC
 > > to make it enabled by default so everything 'just works'.
 > 
 > Ok, even more reason for it to go in. Someone might want to let the folks at 
 > Ubuntu know too, they seem to have it enabled in their installer kernel. :D

Last I looked they picked up the same patch we were carrying in Fedora.

		Dave


^ permalink raw reply

* redirection
From: glburt @ 2006-03-01 13:37 UTC (permalink / raw)
  To: linux-assembly

I have the following program:

	SECTION .data		; data section
msg1:	db "Hello World -- 1",10,0 ; the string to print, 10=cr
msg:	db "Hello World",10	; the string to print, 10=cr
len:	equ $-msg		; "$" means "here"
				; len is a value, not an address

	SECTION .text		; code section
        global main		; make label available to linker 
        extern printf
main:				; standard  gcc  entry point
	
	mov	edx,len		; arg3, length of string to print
	mov	ecx,msg		; arg2, pointer to string
	mov	ebx,1		; arg1, where to write, screen
	mov	eax,4		; write command to int 80 hex
	int	0x80		; interrupt 80 hex, call kernel
	
        push    msg1
        call    printf
        add	esp, 4

        mov	ebx,0		; exit code, 0=normal
	mov	eax,1		; exit command to kernel
	int	0x80		; interrupt 80 hex, call kernel


When I assembled/linked it, I used:

nasm -f elf burtp1.asm
gcc burtp1.o

when i ran it, I got two lines of output.:

[burt@linux2 ~]$ ./a.out
Hello World
Hello World -- 1


When I redirected it, I got:

[burt@linux2 ~]$ ./a.out > foo
[burt@linux2 ~]$ cat foo
Hello World

Why was the output from using printf not redirected?

^ permalink raw reply

* NAND +concatenation
From: Neil Wilson @ 2006-03-01 13:35 UTC (permalink / raw)
  To: linux-mtd

Hi,

I am being a bit thick today & cannot quite understand if I am doing this 
right...

I have 4 64MB NAND chips, I can get the MTD concatenation to add them to a 
single device (6) which is defined as having one partition.

How can I use this single device ?

Should I be able to "flash_eraseall -j /dev/mtd6 " ?, this returns a 
"/dev/mtd6: Bad block check not available" error.
or do I need to format each chip in turn ?

Also should I be able to mount this single device as a formatted filesystem ?
"mount -t jffs2 /dev/mtdblock6 xxx"

Thanks for any advice.

Neil 

^ permalink raw reply

* Re: [PATCH] altix:  export sn_pcidev_info_get
From: Jes Sorensen @ 2006-03-01 13:34 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: Mark Maule, akpm, linux-ia64, linux-kernel
In-Reply-To: <20060225115512.GA24439@infradead.org>

>>>>> "Christoph" == Christoph Hellwig <hch@infradead.org> writes:

Christoph> On Tue, Feb 21, 2006 at 06:23:12AM -0500, Jes Sorensen
Christoph> wrote:
>> Point is that there are cases where tuning requires you to know
>> what PCI bridge is below you in order to get the best performance
>> out of a card. One can keep a PCI ID blacklist to handle tuning of
>> the PCI bridge itself, but it can't handle things that needs to be
>> tuned by setting the PCI device's own registers.
>> 
>> Having a generic API to export this information would be a good
>> thing IMHO.

Christoph> So please submit a patch to add querying/tuning pci
Christoph> bridges.  And please make it _GPL exports so people don't
Christoph> accidentally use it in their illegal drivers.

Mark checked with the gfx people and it seems that the requirement for
this information was a leftover from an older codebase and they don't
actually need it anymore. Anyway, I'm not sure what illegal drivers
you keep referring to.

Tony/Andrew, it should be ok to take the export out again.

I'll try to look into doing a more generic interface for querying
information about the low level PCI briges at some point. Since
there's no new users screaming for this right now and most current
drivers that will benefit from it are somewhat old, it's not going to
be my top priority item at this moment. Since this would be an
interface, it would obviously have to a regular symbol export.

Cheers,
Jes

^ permalink raw reply

* Re: [PATCH] altix:  export sn_pcidev_info_get
From: Jes Sorensen @ 2006-03-01 13:34 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: Mark Maule, akpm, linux-ia64, linux-kernel
In-Reply-To: <20060225115512.GA24439@infradead.org>

>>>>> "Christoph" = Christoph Hellwig <hch@infradead.org> writes:

Christoph> On Tue, Feb 21, 2006 at 06:23:12AM -0500, Jes Sorensen
Christoph> wrote:
>> Point is that there are cases where tuning requires you to know
>> what PCI bridge is below you in order to get the best performance
>> out of a card. One can keep a PCI ID blacklist to handle tuning of
>> the PCI bridge itself, but it can't handle things that needs to be
>> tuned by setting the PCI device's own registers.
>> 
>> Having a generic API to export this information would be a good
>> thing IMHO.

Christoph> So please submit a patch to add querying/tuning pci
Christoph> bridges.  And please make it _GPL exports so people don't
Christoph> accidentally use it in their illegal drivers.

Mark checked with the gfx people and it seems that the requirement for
this information was a leftover from an older codebase and they don't
actually need it anymore. Anyway, I'm not sure what illegal drivers
you keep referring to.

Tony/Andrew, it should be ok to take the export out again.

I'll try to look into doing a more generic interface for querying
information about the low level PCI briges at some point. Since
there's no new users screaming for this right now and most current
drivers that will benefit from it are somewhat old, it's not going to
be my top priority item at this moment. Since this would be an
interface, it would obviously have to a regular symbol export.

Cheers,
Jes

^ permalink raw reply

* Re: grub thing
From: Ricardo Nabinger Sanchez @ 2006-03-01 13:34 UTC (permalink / raw)
  To: linux-assembly
In-Reply-To: <20060301071033.0c9eb1d4.amerei@gmail.com>

Quoting  Aleph One <amerei@gmail.com>
Sent on  Wed, 1 Mar 2006 07:10:33 +0000

> i'm looking at a disassembly of grub's stage 1. and i wanna know why it
> need's to CLI before setting up the environment?? i tried to interpret it
> line by line and this is what i have so far

I'm not an expert, but interruptions must be disabled.  I believe grub
doesn't install interrupt handlers, and thus a single interrupt would lock
the machine (as the appropriate handler would likely point to garbage).

would the BIOS (or similar in other architectures) give the processor to
the bootloader with interrupts disabled already?

> also, since the origin is at 0000:7c00h i figured that must imply that
> "mov sp, 0x2000" means that the stack starts at 0x7c00+0x2000 = 9c000
> right?

I guess not.  to get what you described, I would do:

	mov sp, 0x2000
	add sp, 0x7c00

from your disassembly, I'd expect SP to be 0x2000, counting from 0x0000.

-- 
Ricardo Nabinger Sanchez
GNU/Linux #140696 [http://counter.li.org]
Slackware Linux + FreeBSD

  Left to themselves, things tend to go from bad to worse.

^ permalink raw reply

* RE: adding swap workarounds oom - was: Re: Out of Memory: Killed process 16498 (java).
From: Andy Chittenden @ 2006-03-01 13:34 UTC (permalink / raw)
  To: Jens Axboe, Andi Kleen
  Cc: Anton Altaparmakov, Andrew Morton, davej, linux-kernel, lwoodman,
	Bartlomiej Zolnierkiewicz

with revised patch that does:

                printk("sg%d: dma=%llx, dma_len=%u/%u, pfn=%lu\n", i,
(unsigned long long) sg->dma_address, sg->dma_length, sg->offset,
page_to_pfn(sg->page));
        }

dmesg says:


Bootdata ok (command line is root=/dev/hda1 ro )
Linux version 2.6.15-1-amd64-k8 (Debian 2.6.15-1) (luther@debian.org)
(gcc version 4.0.3 20060212 (prerelease) (Debian 4.0.2-9)) #2 Wed Mar 1
12:31:31 GMT 2006
BIOS-provided physical RAM map:
 BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
 BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)
 BIOS-e820: 00000000000e4000 - 0000000000100000 (reserved)
 BIOS-e820: 0000000000100000 - 00000000bffb0000 (usable)
 BIOS-e820: 00000000bffb0000 - 00000000bffc0000 (ACPI data)
 BIOS-e820: 00000000bffc0000 - 00000000bfff0000 (ACPI NVS)
 BIOS-e820: 00000000bfff0000 - 00000000c0000000 (reserved)
 BIOS-e820: 00000000ff780000 - 0000000100000000 (reserved)
 BIOS-e820: 0000000100000000 - 0000000140000000 (usable)
ACPI: RSDP (v000 ACPIAM                                ) @
0x00000000000fa7c0
ACPI: RSDT (v001 A M I  OEMRSDT  0x10000506 MSFT 0x00000097) @
0x00000000bffb0000
ACPI: FADT (v001 A M I  OEMFACP  0x10000506 MSFT 0x00000097) @
0x00000000bffb0200
ACPI: MADT (v001 A M I  OEMAPIC  0x10000506 MSFT 0x00000097) @
0x00000000bffb0390
ACPI: OEMB (v001 A M I  OEMBIOS  0x10000506 MSFT 0x00000097) @
0x00000000bffc0040
ACPI: DSDT (v001  A0036 A0036001 0x00000001 MSFT 0x0100000d) @
0x0000000000000000
On node 0 totalpages: 1029721
  DMA zone: 3185 pages, LIFO batch:0
  DMA32 zone: 767976 pages, LIFO batch:31
  Normal zone: 258560 pages, LIFO batch:31
  HighMem zone: 0 pages, LIFO batch:0
Looks like a VIA chipset. Disabling IOMMU. Overwrite with
"iommu=allowed"
ACPI: PM-Timer IO Port: 0x808
ACPI: Local APIC address 0xfee00000
ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled)
Processor #0 15:15 APIC version 16
ACPI: LAPIC (acpi_id[0x02] lapic_id[0x81] disabled)
ACPI: IOAPIC (id[0x01] address[0xfec00000] gsi_base[0])
IOAPIC[0]: apic_id 1, version 3, address 0xfec00000, GSI 0-23
ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
ACPI: IRQ0 used by override.
ACPI: IRQ2 used by override.
ACPI: IRQ9 used by override.
Setting APIC routing to flat
Using ACPI (MADT) for SMP configuration information
Allocating PCI resources starting at c4000000 (gap: c0000000:3f780000)
Built 1 zonelists
Kernel command line: root=/dev/hda1 ro 
Initializing CPU#0
PID hash table entries: 4096 (order: 12, 131072 bytes)
time.c: Using 3.579545 MHz PM timer.
time.c: Detected 2202.918 MHz processor.
time.c: Using PIT/TSC based timekeeping.
Console: colour VGA+ 80x25
Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes)
Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes)
Placing software IO TLB between 0x5c39000 - 0x9c39000
Memory: 4045192k/5242880k available (1703k kernel code, 148148k
reserved, 738k data, 148k init)
Calibrating delay using timer specific routine.. 4412.88 BogoMIPS
(lpj=2206443)
Security Framework v1.0.0 initialized
SELinux:  Disabled at boot.
Capability LSM initialized
Mount-cache hash table entries: 256
CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line)
CPU: L2 Cache: 512K (64 bytes/line)
mtrr: v2.0 (20020519)
CPU: AMD Athlon(tm) 64 Processor 3500+ stepping 00
Using local APIC timer interrupts.
Detected 12.516 MHz APIC timer.
testing NMI watchdog ... OK.
checking if image is initramfs... it is
NET: Registered protocol family 16
ACPI: bus type pci registered
PCI: Using configuration type 1
blk_max_low_pfn=1310720, blk_max_pfn=1310720
ACPI: Subsystem revision 20050902
ACPI: Interpreter enabled
ACPI: Using IOAPIC for interrupt routing
ACPI: PCI Root Bridge [PCI0] (0000:00)
PCI: Probing PCI hardware (bus 00)
Boot video device is 0000:01:00.0
ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT]
ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 7 10 *11 14 15)
ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 7 *10 11 14 15)
ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 *5 7 10 11 14 15)
ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 5 7 10 11 14 15) *0, disabled.
ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 7 10 11 14 15) *0, disabled.
ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 7 10 11 14 15) *0, disabled.
ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 7 10 11 14 15) *0, disabled.
ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 7 10 11 14 15) *0, disabled.
Linux Plug and Play Support v0.97 (c) Adam Belay
pnp: PnP ACPI init
pnp: ACPI device : hid PNP0200
pnp: ACPI device : hid PNP0B00
pnp: ACPI device : hid PNP0303
pnp: ACPI device : hid PNP0F03
pnp: ACPI device : hid PNP0800
pnp: ACPI device : hid PNP0C04
pnp: ACPI device : hid PNP0700
pnp: ACPI device : hid PNP0C02
pnp: ACPI device : hid PNP0C02
pnp: ACPI device : hid PNP0C02
pnp: ACPI device : hid PNP0501
pnp: ACPI device : hid PNP0501
pnp: ACPI device : hid PNP0C01
pnp: PnP ACPI: found 13 devices
usbcore: registered new driver usbfs
usbcore: registered new driver hub
PCI: Using ACPI for IRQ routing
PCI: If a device doesn't work, try "pci=routeirq".  If it helps, post a
report
TC classifier action (bugs to netdev@vger.kernel.org cc hadi@cyberus.ca)
agpgart: Detected AGP bridge 0
agpgart: AGP aperture is 128M @ 0xe8000000
PCI-DMA: Using software bounce buffering for IO (SWIOTLB)
pnp: the driver 'system' has been registered
pnp: match found with the PnP device '00:07' and the driver 'system'
pnp: 00:07: ioport range 0x680-0x6ff has been reserved
pnp: 00:07: ioport range 0x290-0x297 has been reserved
pnp: match found with the PnP device '00:08' and the driver 'system'
pnp: match found with the PnP device '00:09' and the driver 'system'
pnp: match found with the PnP device '00:0c' and the driver 'system'
PCI: Bridge: 0000:00:01.0
  IO window: disabled.
  MEM window: faf00000-fbffffff
  PREFETCH window: f0000000-f9ffffff
PCI: Setting latency timer of device 0000:00:01.0 to 64
IA32 emulation $Id: sys_ia32.c,v 1.32 2002/03/24 13:02:28 ak Exp $
audit: initializing netlink socket (disabled)
audit(1141219505.378:1): initialized
VFS: Disk quotas dquot_6.5.1
Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
Initializing Cryptographic API
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered
Real Time Clock Driver v1.12
Linux agpgart interface v0.101 (c) Dave Jones
pnp: the driver 'i8042 kbd' has been registered
pnp: match found with the PnP device '00:02' and the driver 'i8042 kbd'
pnp: the driver 'i8042 aux' has been registered
pnp: match found with the PnP device '00:03' and the driver 'i8042 aux'
PNP: PS/2 Controller [PNP0303:PS2K,PNP0f03:PS2M] at 0x60,0x64 irq 1,12
serio: i8042 AUX port at 0x60,0x64 irq 12
serio: i8042 KBD port at 0x60,0x64 irq 1
Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing enabled
serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
serial8250: ttyS1 at I/O 0x2f8 (irq = 0) is a 16550A
serial8250: ttyS0 at I/O 0x3f8 (irq = 0) is a 16550A
pnp: the driver 'serial' has been registered
pnp: match found with the PnP device '00:0a' and the driver 'serial'
00:0a: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
pnp: match found with the PnP device '00:0b' and the driver 'serial'
00:0b: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
GSI 16 sharing vector 0xA9 and IRQ 16
ACPI: PCI Interrupt 0000:00:09.0[A] -> GSI 16 (level, low) -> IRQ 16
0000:00:09.0: ttyS2 at I/O 0xa400 (irq = 16) is a 16550A
0000:00:09.0: ttyS3 at I/O 0xa000 (irq = 16) is a 16550A
bounce: queue ffff81013f97ad18, setting pfn 1310720, max_low 1310720
q=ffff81013f97ad18, dma_addr=140000000, bounce pfn 1310720
bounce: queue ffff81013f97aa88, setting pfn 1310720, max_low 1310720
q=ffff81013f97aa88, dma_addr=140000000, bounce pfn 1310720
bounce: queue ffff81013f97a7f8, setting pfn 1310720, max_low 1310720
q=ffff81013f97a7f8, dma_addr=140000000, bounce pfn 1310720
bounce: queue ffff81013f97a568, setting pfn 1310720, max_low 1310720
q=ffff81013f97a568, dma_addr=140000000, bounce pfn 1310720
bounce: queue ffff81013f97a2d8, setting pfn 1310720, max_low 1310720
q=ffff81013f97a2d8, dma_addr=140000000, bounce pfn 1310720
bounce: queue ffff81013f97a048, setting pfn 1310720, max_low 1310720
q=ffff81013f97a048, dma_addr=140000000, bounce pfn 1310720
bounce: queue ffff81013f980d18, setting pfn 1310720, max_low 1310720
q=ffff81013f980d18, dma_addr=140000000, bounce pfn 1310720
bounce: queue ffff81013f980a88, setting pfn 1310720, max_low 1310720
q=ffff81013f980a88, dma_addr=140000000, bounce pfn 1310720
bounce: queue ffff81013f9807f8, setting pfn 1310720, max_low 1310720
q=ffff81013f9807f8, dma_addr=140000000, bounce pfn 1310720
bounce: queue ffff81013f980568, setting pfn 1310720, max_low 1310720
q=ffff81013f980568, dma_addr=140000000, bounce pfn 1310720
bounce: queue ffff81013f9802d8, setting pfn 1310720, max_low 1310720
q=ffff81013f9802d8, dma_addr=140000000, bounce pfn 1310720
bounce: queue ffff81013f980048, setting pfn 1310720, max_low 1310720
q=ffff81013f980048, dma_addr=140000000, bounce pfn 1310720
bounce: queue ffff81013fa40d18, setting pfn 1310720, max_low 1310720
q=ffff81013fa40d18, dma_addr=140000000, bounce pfn 1310720
bounce: queue ffff81013fa40a88, setting pfn 1310720, max_low 1310720
q=ffff81013fa40a88, dma_addr=140000000, bounce pfn 1310720
bounce: queue ffff81013fa407f8, setting pfn 1310720, max_low 1310720
q=ffff81013fa407f8, dma_addr=140000000, bounce pfn 1310720
bounce: queue ffff81013fa40568, setting pfn 1310720, max_low 1310720
q=ffff81013fa40568, dma_addr=140000000, bounce pfn 1310720
RAMDISK driver initialized: 16 RAM disks of 65536K size 1024 blocksize
usbmon: debugfs is not available
mice: PS/2 mouse device common for all mice
NET: Registered protocol family 2
IP route cache hash table entries: 131072 (order: 8, 1048576 bytes)
TCP established hash table entries: 524288 (order: 10, 4194304 bytes)
TCP bind hash table entries: 65536 (order: 7, 524288 bytes)
TCP: Hash tables configured (established 524288 bind 65536)
TCP reno registered
TCP bic registered
NET: Registered protocol family 1
NET: Registered protocol family 17
NET: Registered protocol family 8
NET: Registered protocol family 20
ACPI wakeup devices: 
PCI0 PS2K PS2M UAR2 UAR1 AC97 USB1 USB2 USB3 USB4 EHCI PWRB SLPB 
ACPI: (supports S0 S1 S3 S4 S5)
Freeing unused kernel memory: 148k freed
Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2
ide: Assuming 33MHz system bus speed for PIO modes; override with
idebus=xx
input: AT Translated Set 2 keyboard as /class/input/input0
VP_IDE: IDE controller at PCI slot 0000:00:0f.1
GSI 17 sharing vector 0xB1 and IRQ 17
ACPI: PCI Interrupt 0000:00:0f.1[A] -> GSI 20 (level, low) -> IRQ 17
PCI: Via IRQ fixup for 0000:00:0f.1, from 255 to 1
VP_IDE: chipset revision 6
VP_IDE: not 100% native mode: will probe irqs later
VP_IDE: VIA vt8237 (rev 00) IDE UDMA133 controller on pci0000:00:0f.1
    ide0: BM-DMA at 0xfc00-0xfc07, BIOS settings: hda:DMA, hdb:DMA
    ide1: BM-DMA at 0xfc08-0xfc0f, BIOS settings: hdc:DMA, hdd:pio
Probing IDE interface ide0...
hda: HDS722525VLAT80, ATA DISK drive
hdb: Maxtor 6Y200P0, ATA DISK drive
bounce: queue ffff81013fa402d8, setting pfn 1310720, max_low 1310720
q=ffff81013fa402d8, dma_addr=140000000, bounce pfn 1310720
bounce: queue ffff81013fa402d8, setting pfn 1048575, max_low 1310720
q=ffff81013fa402d8, dma_addr=ffffffff, bounce pfn 1048575
bounce: queue ffff81013fa40048, setting pfn 1310720, max_low 1310720
q=ffff81013fa40048, dma_addr=140000000, bounce pfn 1310720
bounce: queue ffff81013fa40048, setting pfn 1048575, max_low 1310720
q=ffff81013fa40048, dma_addr=ffffffff, bounce pfn 1048575
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
Probing IDE interface ide1...
hdc: _NEC DVD_RW ND-3500AG, ATAPI CD/DVD-ROM drive
bounce: queue ffff81013f53fd18, setting pfn 1310720, max_low 1310720
q=ffff81013f53fd18, dma_addr=140000000, bounce pfn 1310720
bounce: queue ffff81013f53fd18, setting pfn 1310720, max_low 1310720
q=ffff81013f53fd18, dma_addr=140000000, bounce pfn 1310720
ide1 at 0x170-0x177,0x376 on irq 15
hda: max request size: 1024KiB
hda: 390721968 sectors (200049 MB) w/7938KiB Cache, CHS=24321/255/63,
UDMA(100)
hda: cache flushes supported
 hda: hda1 hda2 hda3 < hda5 hda6 hda7 hda8 >
hdb: max request size: 1024KiB
hdb: 398297088 sectors (203928 MB) w/7936KiB Cache, CHS=24792/255/63,
UDMA(133)
hdb: cache flushes supported
 hdb: hdb1 hdb2 hdb3 hdb4 < hdb5 hdb6 >
kjournald starting.  Commit interval 5 seconds
EXT3-fs: mounted filesystem with ordered data mode.
pci_hotplug: PCI Hot Plug PCI Core version: 0.5
shpchp: Standard Hot Plug PCI Controller Driver version: 0.4
SCSI subsystem initialized
USB Universal Host Controller Interface driver v2.3
GSI 18 sharing vector 0xB9 and IRQ 18
ACPI: PCI Interrupt 0000:00:10.0[A] -> GSI 21 (level, low) -> IRQ 18
PCI: Via IRQ fixup for 0000:00:10.0, from 11 to 2
uhci_hcd 0000:00:10.0: UHCI Host Controller
uhci_hcd 0000:00:10.0: new USB bus registered, assigned bus number 1
uhci_hcd 0000:00:10.0: irq 18, io base 0x0000d400
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 2 ports detected
e100: Intel(R) PRO/100 Network Driver, 3.4.14-k4-NAPI
e100: Copyright(c) 1999-2005 Intel Corporation
GSI 19 sharing vector 0xC1 and IRQ 19
ACPI: PCI Interrupt 0000:00:0d.0[A] -> GSI 18 (level, low) -> IRQ 19
e100: eth0: e100_probe: addr 0xfac00000, irq 19, MAC addr
00:D0:B7:BF:92:C8
GSI 20 sharing vector 0xC9 and IRQ 20
ACPI: PCI Interrupt 0000:00:0a.0[A] -> GSI 17 (level, low) -> IRQ 20
skge 1.2 addr 0xfa900000 irq 20 chip Yukon-Lite rev 7
skge eth1: addr 00:11:2f:a7:fb:ef
libata version 1.20 loaded.
input: PC Speaker as /class/input/input1
ACPI: PCI Interrupt 0000:00:10.1[A] -> GSI 21 (level, low) -> IRQ 18
PCI: Via IRQ fixup for 0000:00:10.1, from 11 to 2
uhci_hcd 0000:00:10.1: UHCI Host Controller
uhci_hcd 0000:00:10.1: new USB bus registered, assigned bus number 2
uhci_hcd 0000:00:10.1: irq 18, io base 0x0000d800
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 2 ports detected
bounce: queue ffff81013f53fa88, setting pfn 1310720, max_low 1310720
q=ffff81013f53fa88, dma_addr=140000000, bounce pfn 1310720
Floppy drive(s): fd0 is 1.44M
FDC 0 is a post-1991 82077
hdc: ATAPI 48X DVD-ROM DVD-R CD-R/RW drive, 2048kB Cache, UDMA(33)
Uniform CD-ROM driver Revision: 3.20
sata_via 0000:00:0f.0: version 1.1
ACPI: PCI Interrupt 0000:00:0f.0[B] -> GSI 20 (level, low) -> IRQ 17
PCI: Via IRQ fixup for 0000:00:0f.0, from 10 to 1
sata_via 0000:00:0f.0: routed to hard irq line 1
ata1: SATA max UDMA/133 cmd 0xD000 ctl 0xC802 bmdma 0xB800 irq 17
ata2: SATA max UDMA/133 cmd 0xC400 ctl 0xC002 bmdma 0xB808 irq 17
ACPI: PCI Interrupt 0000:00:10.2[B] -> GSI 21 (level, low) -> IRQ 18
PCI: Via IRQ fixup for 0000:00:10.2, from 10 to 2
uhci_hcd 0000:00:10.2: UHCI Host Controller
uhci_hcd 0000:00:10.2: new USB bus registered, assigned bus number 3
uhci_hcd 0000:00:10.2: irq 18, io base 0x0000e000
hub 3-0:1.0: USB hub found
hub 3-0:1.0: 2 ports detected
sata_promise 0000:00:08.0: version 1.03
ACPI: PCI Interrupt 0000:00:08.0[A] -> GSI 18 (level, low) -> IRQ 19
ata3: SATA max UDMA/133 cmd 0xFFFFC20000006200 ctl 0xFFFFC20000006238
bmdma 0x0 irq 19
ata4: SATA max UDMA/133 cmd 0xFFFFC20000006280 ctl 0xFFFFC200000062B8
bmdma 0x0 irq 19
ACPI: PCI Interrupt 0000:00:10.3[B] -> GSI 21 (level, low) -> IRQ 18
PCI: Via IRQ fixup for 0000:00:10.3, from 10 to 2
uhci_hcd 0000:00:10.3: UHCI Host Controller
uhci_hcd 0000:00:10.3: new USB bus registered, assigned bus number 4
uhci_hcd 0000:00:10.3: irq 18, io base 0x0000e400
hub 4-0:1.0: USB hub found
hub 4-0:1.0: 2 ports detected
input: ImExPS/2 Generic Explorer Mouse as /class/input/input2
ACPI: PCI Interrupt 0000:00:10.4[C] -> GSI 21 (level, low) -> IRQ 18
PCI: Via IRQ fixup for 0000:00:10.4, from 5 to 2
ehci_hcd 0000:00:10.4: EHCI Host Controller
ehci_hcd 0000:00:10.4: new USB bus registered, assigned bus number 5
ehci_hcd 0000:00:10.4: irq 18, io mem 0xfae00000
ehci_hcd 0000:00:10.4: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004
hub 5-0:1.0: USB hub found
hub 5-0:1.0: 8 ports detected
ata3: no device found (phy stat 00000000)
scsi2 : sata_promise
ata4: no device found (phy stat 00000000)
scsi3 : sata_promise
ata1: dev 0 cfg 49:2f00 82:3069 83:7c01 84:4003 85:3069 86:3c01 87:4003
88:203f
ata1: dev 0 ATA-6, max UDMA/100, 390721968 sectors: LBA48
ata1: dev 0 configured for UDMA/100
scsi0 : sata_via
ata2: no device found (phy stat 00000000)
scsi1 : sata_via
bounce: queue ffff81013f53f7f8, setting pfn 1310720, max_low 1310720
q=ffff81013f53f7f8, dma_addr=140000000, bounce pfn 1310720
bounce: queue ffff81013f53f7f8, setting pfn 1048575, max_low 1310720
q=ffff81013f53f7f8, dma_addr=ffffffff, bounce pfn 1048575
  Vendor: ATA       Model: ST3200822AS       Rev: 3.01
  Type:   Direct-Access                      ANSI SCSI revision: 05
GSI 21 sharing vector 0xD1 and IRQ 21
ACPI: PCI Interrupt 0000:00:11.5[C] -> GSI 22 (level, low) -> IRQ 21
PCI: Setting latency timer of device 0000:00:11.5 to 64
SCSI device sda: 390721968 512-byte hdwr sectors (200050 MB)
SCSI device sda: drive cache: write back
SCSI device sda: 390721968 512-byte hdwr sectors (200050 MB)
SCSI device sda: drive cache: write back
 sda: sda1 sda2 < sda5 > sda3
sd 0:0:0:0: Attached scsi disk sda
Adding 1951856k swap on /dev/hda5.  Priority:-1 extents:1
across:1951856k
Adding 1951856k swap on /dev/hda6.  Priority:-2 extents:1
across:1951856k
Adding 1951856k swap on /dev/hda7.  Priority:-3 extents:1
across:1951856k
Adding 996020k swap on /dev/hdb2.  Priority:-4 extents:1 across:996020k
Adding 996020k swap on /dev/hdb3.  Priority:-5 extents:1 across:996020k
Adding 995988k swap on /dev/hdb5.  Priority:-6 extents:1 across:995988k
Adding 843372k swap on /dev/hdb6.  Priority:-7 extents:1 across:843372k
EXT3 FS on hda1, internal journal
ieee1394: Initialized config rom entry `ip1394'
sbp2: $Rev: 1306 $ Ben Collins <bcollins@debian.org>
ieee1394: sbp2: Driver forced to serialize I/O (serialize_io=1)
ieee1394: sbp2: Try serialize_io=0 for better performance
kjournald starting.  Commit interval 5 seconds
EXT3 FS on hda2, internal journal
EXT3-fs: mounted filesystem with ordered data mode.
kjournald starting.  Commit interval 5 seconds
EXT3 FS on hda8, internal journal
EXT3-fs: mounted filesystem with ordered data mode.
SGI XFS with ACLs, security attributes, realtime, large block/inode
numbers, no debug enabled
SGI XFS Quota Management subsystem
XFS mounting filesystem hdb1
Ending clean XFS mount for filesystem: hdb1
kjournald starting.  Commit interval 5 seconds
EXT3 FS on sda1, internal journal
EXT3-fs: mounted filesystem with ordered data mode.
kjournald starting.  Commit interval 5 seconds
EXT3 FS on sda3, internal journal
EXT3-fs: mounted filesystem with ordered data mode.
XFS mounting filesystem sda5
Ending clean XFS mount for filesystem: sda5
e100: intel: e100_watchdog: link up, 100Mbps, full-duplex
NET: Registered protocol family 10
lo: Disabled Privacy Extensions
IPv6 over IPv4 tunneling driver
ACPI: Power Button (FF) [PWRF]
ACPI: Power Button (CM) [PWRB]
ACPI: Sleep Button (CM) [SLPB]
pnp: the driver 'parport_pc' has been registered
lp: driver loaded but no devices found
intel: no IPv6 routers present
Installing knfsd (copyright (C) 1996 okir@monad.swb.de).
NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recovery
directory
NFSD: recovery directory /var/lib/nfs/v4recovery doesn't exist
NFSD: starting 90-second grace period
mtrr: type mismatch for f0000000,8000000 old: write-back new:
write-combining
hda: DMA table too small
ide dma table, 255 entries, bounce pfn 1310720
sg0: dma=81c8800, dma_len=4096/0, pfn=1296369
sg1: dma=81c9800, dma_len=4096/0, pfn=1292696
sg2: dma=81ca800, dma_len=4096/0, pfn=1296278
sg3: dma=81cb800, dma_len=4096/0, pfn=1296092
sg4: dma=81cc800, dma_len=4096/0, pfn=1296090
sg5: dma=81cd800, dma_len=4096/0, pfn=1296088
sg6: dma=81ce800, dma_len=4096/0, pfn=1296086
sg7: dma=81cf800, dma_len=4096/0, pfn=1296083
sg8: dma=81d0800, dma_len=4096/0, pfn=1296081
sg9: dma=81d1800, dma_len=4096/0, pfn=1292712
sg10: dma=81d2800, dma_len=4096/0, pfn=1297008
sg11: dma=81d3800, dma_len=4096/0, pfn=1297063
sg12: dma=81d4800, dma_len=4096/0, pfn=1297146
sg13: dma=81d5800, dma_len=4096/0, pfn=1297193
sg14: dma=81d6800, dma_len=4096/0, pfn=1297198
sg15: dma=81d7800, dma_len=4096/0, pfn=1296363
sg16: dma=81d8800, dma_len=4096/0, pfn=1304021
sg17: dma=81d9800, dma_len=4096/0, pfn=1303030
sg18: dma=81da800, dma_len=4096/0, pfn=1302151
sg19: dma=81db800, dma_len=4096/0, pfn=1303979
sg20: dma=81dc800, dma_len=4096/0, pfn=1306158
sg21: dma=81dd800, dma_len=4096/0, pfn=1304015
sg22: dma=81de800, dma_len=4096/0, pfn=1304957
sg23: dma=81df800, dma_len=4096/0, pfn=1304001
sg24: dma=81e0800, dma_len=4096/0, pfn=1292710
sg25: dma=81e1800, dma_len=4096/0, pfn=1304035
sg26: dma=81e2800, dma_len=4096/0, pfn=1303025
sg27: dma=81e3800, dma_len=4096/0, pfn=1304019
sg28: dma=81e4800, dma_len=4096/0, pfn=1302256
sg29: dma=81e5800, dma_len=4096/0, pfn=1304738
sg30: dma=81e6800, dma_len=4096/0, pfn=1302998
sg31: dma=81e7800, dma_len=4096/0, pfn=1304148
sg32: dma=81e8800, dma_len=4096/0, pfn=1304126
sg33: dma=81e9800, dma_len=4096/0, pfn=1303079
sg34: dma=81ea800, dma_len=4096/0, pfn=1302996
sg35: dma=81eb800, dma_len=4096/0, pfn=1296243
sg36: dma=81ec800, dma_len=4096/0, pfn=1306396
sg37: dma=81ed800, dma_len=4096/0, pfn=1306474
sg38: dma=81ee800, dma_len=4096/0, pfn=1295929
sg39: dma=81ef800, dma_len=4096/0, pfn=1296156
sg40: dma=81f0800, dma_len=4096/0, pfn=1049000
sg41: dma=81f1800, dma_len=4096/0, pfn=1306293
sg42: dma=81f2800, dma_len=4096/0, pfn=1306289
sg43: dma=81f3800, dma_len=4096/0, pfn=1306368
sg44: dma=81f4800, dma_len=4096/0, pfn=1306326
sg45: dma=81f5800, dma_len=4096/0, pfn=1306388
sg46: dma=81f6800, dma_len=4096/0, pfn=1306265
sg47: dma=81f7800, dma_len=4096/0, pfn=1308137
sg48: dma=81f9000, dma_len=4096/0, pfn=1306294
sg49: dma=81fa000, dma_len=4096/0, pfn=1306130
sg50: dma=81fb000, dma_len=4096/0, pfn=1306422
sg51: dma=81fc000, dma_len=4096/0, pfn=1306151
sg52: dma=81fd000, dma_len=4096/0, pfn=1306262
sg53: dma=81fe000, dma_len=4096/0, pfn=1306617
sg54: dma=81ff000, dma_len=4096/0, pfn=1306492
sg55: dma=8200000, dma_len=4096/0, pfn=1305974
sg56: dma=8201000, dma_len=4096/0, pfn=1306509
sg57: dma=8202000, dma_len=4096/0, pfn=1306162
sg58: dma=8203000, dma_len=4096/0, pfn=1306281
sg59: dma=8204000, dma_len=4096/0, pfn=1306485
sg60: dma=8205000, dma_len=4096/0, pfn=1306024
sg61: dma=8206000, dma_len=4096/0, pfn=1307943
sg62: dma=8207000, dma_len=4096/0, pfn=1092022
sg63: dma=8208000, dma_len=4096/0, pfn=1092024
sg64: dma=8209000, dma_len=4096/0, pfn=1305950
sg65: dma=820a800, dma_len=4096/0, pfn=1295655
sg66: dma=820b800, dma_len=4096/0, pfn=1295788
sg67: dma=820c800, dma_len=4096/0, pfn=1296106
sg68: dma=820d800, dma_len=4096/0, pfn=1296102
sg69: dma=820e800, dma_len=4096/0, pfn=1296126
sg70: dma=820f800, dma_len=4096/0, pfn=1296041
sg71: dma=8210800, dma_len=4096/0, pfn=1296099
sg72: dma=8211800, dma_len=4096/0, pfn=1296076
sg73: dma=8212800, dma_len=4096/0, pfn=1296069
sg74: dma=8213800, dma_len=4096/0, pfn=1296066
sg75: dma=8214800, dma_len=4096/0, pfn=1296064
sg76: dma=8215800, dma_len=4096/0, pfn=1296049
sg77: dma=8216800, dma_len=4096/0, pfn=1296045
sg78: dma=8217800, dma_len=4096/0, pfn=1295926
sg79: dma=8218800, dma_len=4096/0, pfn=1306031
sg80: dma=8219800, dma_len=4096/0, pfn=1305911
sg81: dma=821a800, dma_len=4096/0, pfn=1306239
sg82: dma=821b800, dma_len=4096/0, pfn=1306117
sg83: dma=821c800, dma_len=4096/0, pfn=1307944
sg84: dma=821d800, dma_len=4096/0, pfn=1306097
sg85: dma=821e800, dma_len=4096/0, pfn=1306225
sg86: dma=821f800, dma_len=4096/0, pfn=1306220
sg87: dma=8220800, dma_len=4096/0, pfn=1306244
sg88: dma=8221800, dma_len=4096/0, pfn=1306186
sg89: dma=8222800, dma_len=4096/0, pfn=1306109
sg90: dma=8223800, dma_len=4096/0, pfn=1306210
sg91: dma=8224800, dma_len=4096/0, pfn=1306227
sg92: dma=8225800, dma_len=4096/0, pfn=1306049
sg93: dma=8226800, dma_len=4096/0, pfn=1306250
sg94: dma=8227800, dma_len=4096/0, pfn=1306249
sg95: dma=8228800, dma_len=4096/0, pfn=1306061
sg96: dma=8229800, dma_len=4096/0, pfn=1306080
sg97: dma=822a800, dma_len=4096/0, pfn=1306046
sg98: dma=822b800, dma_len=4096/0, pfn=1306207
sg99: dma=822c800, dma_len=4096/0, pfn=1295699
sg100: dma=822d800, dma_len=4096/0, pfn=1301756
sg101: dma=822e800, dma_len=4096/0, pfn=1301005
sg102: dma=822f800, dma_len=4096/0, pfn=1301059
sg103: dma=8230800, dma_len=4096/0, pfn=1299674
sg104: dma=8231800, dma_len=4096/0, pfn=1298741
sg105: dma=8232800, dma_len=4096/0, pfn=1297470
sg106: dma=8233800, dma_len=4096/0, pfn=1297855
sg107: dma=8234800, dma_len=4096/0, pfn=1297742
sg108: dma=8235800, dma_len=4096/0, pfn=1297728
sg109: dma=8236800, dma_len=4096/0, pfn=1303749
sg110: dma=8237800, dma_len=4096/0, pfn=1303866
sg111: dma=8239000, dma_len=4096/0, pfn=1302678
sg112: dma=823a000, dma_len=4096/0, pfn=1303323
sg113: dma=823b000, dma_len=4096/0, pfn=1299255
sg114: dma=823c000, dma_len=4096/0, pfn=1299252
sg115: dma=823d000, dma_len=4096/0, pfn=1298794
sg116: dma=823e000, dma_len=4096/0, pfn=1297988
sg117: dma=823f000, dma_len=4096/0, pfn=1297829
sg118: dma=8240000, dma_len=4096/0, pfn=1297460
sg119: dma=8241000, dma_len=4096/0, pfn=1297420
sg120: dma=8242000, dma_len=4096/0, pfn=1297654
sg121: dma=8243000, dma_len=4096/0, pfn=1301800
sg122: dma=8244000, dma_len=4096/0, pfn=1305171
sg123: dma=8245000, dma_len=4096/0, pfn=1303818
sg124: dma=8246000, dma_len=4096/0, pfn=1305201
sg125: dma=8247000, dma_len=4096/0, pfn=1298803
sg126: dma=8248000, dma_len=4096/0, pfn=1297746
sg127: dma=8249000, dma_len=4096/0, pfn=1297955
sg128: dma=824a000, dma_len=4096/0, pfn=1297510
sg129: dma=824b000, dma_len=4096/0, pfn=1297605
sg130: dma=824c000, dma_len=4096/0, pfn=1297414
sg131: dma=824d000, dma_len=4096/0, pfn=1297413
sg132: dma=824e000, dma_len=4096/0, pfn=1299048
sg133: dma=824f000, dma_len=4096/0, pfn=1299046
sg134: dma=8250000, dma_len=4096/0, pfn=1295697
sg135: dma=8251000, dma_len=4096/0, pfn=1295660
sg136: dma=8252000, dma_len=4096/0, pfn=1295714
sg137: dma=8253000, dma_len=4096/0, pfn=1295630
sg138: dma=8254000, dma_len=4096/0, pfn=1295628
sg139: dma=8255000, dma_len=4096/0, pfn=1295601
sg140: dma=8256000, dma_len=4096/0, pfn=1295590
sg141: dma=8257000, dma_len=4096/0, pfn=1295627
sg142: dma=8258000, dma_len=4096/0, pfn=1295498
sg143: dma=8259000, dma_len=4096/0, pfn=1295472
sg144: dma=825a000, dma_len=4096/0, pfn=1295437
sg145: dma=825b000, dma_len=4096/0, pfn=1295430
sg146: dma=825c000, dma_len=4096/0, pfn=1295413
sg147: dma=825d000, dma_len=4096/0, pfn=1299813
sg148: dma=825e000, dma_len=4096/0, pfn=1303770
sg149: dma=825f000, dma_len=4096/0, pfn=1300498
sg150: dma=8260000, dma_len=4096/0, pfn=1298184
sg151: dma=8261000, dma_len=4096/0, pfn=1309734
sg152: dma=8262000, dma_len=4096/0, pfn=1297857
sg153: dma=8263000, dma_len=4096/0, pfn=1302887
sg154: dma=8264000, dma_len=4096/0, pfn=1297520
sg155: dma=8265000, dma_len=4096/0, pfn=1298978
sg156: dma=8266000, dma_len=4096/0, pfn=1297431
sg157: dma=8267000, dma_len=4096/0, pfn=1298597
sg158: dma=8268000, dma_len=4096/0, pfn=1298997
sg159: dma=8269000, dma_len=4096/0, pfn=1298984
sg160: dma=826a000, dma_len=4096/0, pfn=1298832
sg161: dma=826b000, dma_len=4096/0, pfn=1308002
sg162: dma=826c000, dma_len=4096/0, pfn=1309552
sg163: dma=826d000, dma_len=4096/0, pfn=1307906
sg164: dma=826e000, dma_len=4096/0, pfn=1308001
sg165: dma=826f000, dma_len=8192/0, pfn=1309559
sg166: dma=8271000, dma_len=4096/0, pfn=1307941
sg167: dma=8272000, dma_len=4096/0, pfn=1307936
sg168: dma=8273000, dma_len=4096/0, pfn=1307935
sg169: dma=8274000, dma_len=4096/0, pfn=1307932
sg170: dma=8275000, dma_len=4096/0, pfn=1307982
sg171: dma=8276000, dma_len=4096/0, pfn=1307985
sg172: dma=8277000, dma_len=4096/0, pfn=1307999
sg173: dma=8278000, dma_len=4096/0, pfn=1297616
sg174: dma=8279000, dma_len=4096/0, pfn=1307993
sg175: dma=827a000, dma_len=4096/0, pfn=1307920
sg176: dma=827b000, dma_len=4096/0, pfn=1297609
sg177: dma=827c000, dma_len=4096/0, pfn=1297546
sg178: dma=827d000, dma_len=4096/0, pfn=1297443
sg179: dma=827e000, dma_len=4096/0, pfn=1297434
sg180: dma=827f000, dma_len=4096/0, pfn=1297429
sg181: dma=8280000, dma_len=4096/0, pfn=1297517
sg182: dma=8281000, dma_len=4096/0, pfn=1297454
sg183: dma=8282000, dma_len=4096/0, pfn=1299366
sg184: dma=8283000, dma_len=4096/0, pfn=1298890
sg185: dma=8284000, dma_len=4096/0, pfn=1299087
sg186: dma=8285000, dma_len=4096/0, pfn=1299536
sg187: dma=8286000, dma_len=4096/0, pfn=1053055
sg188: dma=8287000, dma_len=4096/0, pfn=1303002
sg189: dma=8288000, dma_len=4096/0, pfn=1301953
sg190: dma=8289000, dma_len=4096/0, pfn=1305063
sg191: dma=828a000, dma_len=4096/0, pfn=1306067
sg192: dma=828b000, dma_len=4096/0, pfn=1306001
sg193: dma=828c000, dma_len=4096/0, pfn=1300866
sg194: dma=828d000, dma_len=4096/0, pfn=1304415
sg195: dma=828e000, dma_len=4096/0, pfn=1302426
sg196: dma=828f000, dma_len=4096/0, pfn=1306090
sg197: dma=8290000, dma_len=4096/0, pfn=1300504
sg198: dma=8291000, dma_len=4096/0, pfn=1301579
sg199: dma=8292000, dma_len=4096/0, pfn=1305087
sg200: dma=8293000, dma_len=4096/0, pfn=1303295
sg201: dma=8294800, dma_len=4096/0, pfn=1300662
sg202: dma=8295800, dma_len=4096/0, pfn=1305119
sg203: dma=8296800, dma_len=4096/0, pfn=1303824
sg204: dma=8297800, dma_len=4096/0, pfn=1301163
sg205: dma=8298800, dma_len=4096/0, pfn=1051200
sg206: dma=8299800, dma_len=4096/0, pfn=1302977
sg207: dma=829a800, dma_len=4096/0, pfn=1299597
sg208: dma=829b800, dma_len=4096/0, pfn=1299592
sg209: dma=829c800, dma_len=4096/0, pfn=1299588
sg210: dma=829d800, dma_len=4096/0, pfn=1299624
sg211: dma=829e800, dma_len=4096/0, pfn=1299622
sg212: dma=829f800, dma_len=4096/0, pfn=1299621
sg213: dma=82a0800, dma_len=4096/0, pfn=1299619
sg214: dma=82a1800, dma_len=4096/0, pfn=1299553
sg215: dma=82a2800, dma_len=4096/0, pfn=1299551
sg216: dma=82a3800, dma_len=4096/0, pfn=1299549
sg217: dma=82a4800, dma_len=4096/0, pfn=1299603
sg218: dma=82a5800, dma_len=4096/0, pfn=1299600
sg219: dma=82a6800, dma_len=4096/0, pfn=1299542
sg220: dma=82a7800, dma_len=4096/0, pfn=1299540
sg221: dma=82a8800, dma_len=4096/0, pfn=1299568
sg222: dma=82a9800, dma_len=4096/0, pfn=1299567
sg223: dma=82aa800, dma_len=4096/0, pfn=1299559
sg224: dma=82ab800, dma_len=4096/0, pfn=1299557
sg225: dma=82ac800, dma_len=4096/0, pfn=1299555
sg226: dma=82ad800, dma_len=4096/0, pfn=1299533
sg227: dma=82ae800, dma_len=4096/0, pfn=1299530
sg228: dma=82af800, dma_len=4096/0, pfn=1299529
sg229: dma=82b0800, dma_len=4096/0, pfn=1299506
sg230: dma=82b1800, dma_len=4096/0, pfn=1301402
sg231: dma=82b2800, dma_len=4096/0, pfn=1301400
sg232: dma=82b3800, dma_len=4096/0, pfn=1301399
sg233: dma=82b4800, dma_len=4096/0, pfn=1299483
sg234: dma=82b5800, dma_len=4096/0, pfn=1301199
sg235: dma=82b6800, dma_len=4096/0, pfn=1301195
sg236: dma=82b7800, dma_len=4096/0, pfn=1301192
sg237: dma=82b9000, dma_len=4096/0, pfn=1301185
sg238: dma=82ba000, dma_len=4096/0, pfn=1301183
sg239: dma=82bb000, dma_len=4096/0, pfn=1301181
sg240: dma=82bc000, dma_len=4096/0, pfn=1301179
sg241: dma=82bd000, dma_len=4096/0, pfn=1301170
sg242: dma=82be000, dma_len=4096/0, pfn=1301166
sg243: dma=82bf000, dma_len=4096/0, pfn=1301164
sg244: dma=82c0000, dma_len=4096/0, pfn=1301357
sg245: dma=82c1000, dma_len=4096/0, pfn=1301354
sg246: dma=82c2000, dma_len=4096/0, pfn=1301340
sg247: dma=82c3000, dma_len=4096/0, pfn=1301124
sg248: dma=82c4000, dma_len=4096/0, pfn=1301122
sg249: dma=82c5000, dma_len=4096/0, pfn=1301115
sg250: dma=82c6000, dma_len=4096/0, pfn=1301200
sg251: dma=82c7000, dma_len=4096/0, pfn=1301494
sg252: dma=82c8000, dma_len=4096/0, pfn=1301157
sg253: dma=82c9000, dma_len=4096/0, pfn=1301152
sg254: dma=82ca000, dma_len=4096/0, pfn=1301149
hda: DMA table too small
ide dma table, 256 entries, bounce pfn 1310720
sg0: dma=5eb9800, dma_len=4096/0, pfn=1301146
sg1: dma=5eba800, dma_len=4096/0, pfn=1301144
sg2: dma=5ebb800, dma_len=4096/0, pfn=1301142
sg3: dma=5ebc800, dma_len=4096/0, pfn=1050242
sg4: dma=5ebd800, dma_len=4096/0, pfn=1076172
sg5: dma=5ebe800, dma_len=4096/0, pfn=1166945
sg6: dma=5ebf800, dma_len=4096/0, pfn=1053986
sg7: dma=5ec0800, dma_len=4096/0, pfn=1076177
sg8: dma=5ec1800, dma_len=4096/0, pfn=1076160
sg9: dma=5ec2800, dma_len=4096/0, pfn=1050254
sg10: dma=5ec3800, dma_len=4096/0, pfn=1162365
sg11: dma=5ec4800, dma_len=4096/0, pfn=1187516
sg12: dma=5ec5800, dma_len=4096/0, pfn=1164204
sg13: dma=5ec6800, dma_len=4096/0, pfn=1187223
sg14: dma=5ec7800, dma_len=4096/0, pfn=1303806
sg15: dma=5ec8800, dma_len=4096/0, pfn=1301784
sg16: dma=5ec9800, dma_len=4096/0, pfn=1303498
sg17: dma=5eca800, dma_len=4096/0, pfn=1302341
sg18: dma=5ecb800, dma_len=4096/0, pfn=1302365
sg19: dma=5ecc800, dma_len=4096/0, pfn=1304767
sg20: dma=5ecd800, dma_len=4096/0, pfn=1304761
sg21: dma=5ece800, dma_len=4096/0, pfn=1304693
sg22: dma=5ecf800, dma_len=4096/0, pfn=1304652
sg23: dma=5ed0800, dma_len=4096/0, pfn=1302210
sg24: dma=5ed1800, dma_len=4096/0, pfn=1305430
sg25: dma=5ed2800, dma_len=4096/0, pfn=1305429
sg26: dma=5ed3800, dma_len=4096/0, pfn=1306135
sg27: dma=5ed4800, dma_len=4096/0, pfn=1306166
sg28: dma=5ed5800, dma_len=4096/0, pfn=1306172
sg29: dma=5ed6800, dma_len=4096/0, pfn=1306298
sg30: dma=5ed7800, dma_len=4096/0, pfn=1306269
sg31: dma=5ed8800, dma_len=4096/0, pfn=1306153
sg32: dma=5ed9800, dma_len=4096/0, pfn=1309539
sg33: dma=5eda800, dma_len=4096/0, pfn=1308279
sg34: dma=5edb800, dma_len=4096/0, pfn=1308277
sg35: dma=5edc800, dma_len=4096/0, pfn=1308271
sg36: dma=5edd800, dma_len=4096/0, pfn=1308269
sg37: dma=5ede800, dma_len=4096/0, pfn=1305665
sg38: dma=5edf800, dma_len=4096/0, pfn=1305651
sg39: dma=5ee0800, dma_len=4096/0, pfn=1305642
sg40: dma=5ee1800, dma_len=4096/0, pfn=1306319
sg41: dma=5ee2800, dma_len=4096/0, pfn=1306316
sg42: dma=5ee3800, dma_len=4096/0, pfn=1309525
sg43: dma=5ee4800, dma_len=4096/0, pfn=1308249
sg44: dma=5ee5800, dma_len=4096/0, pfn=1307949
sg45: dma=5ee6800, dma_len=4096/0, pfn=1308552
sg46: dma=5ee7800, dma_len=4096/0, pfn=1308306
sg47: dma=5ee8800, dma_len=4096/0, pfn=1308305
sg48: dma=5ee9800, dma_len=4096/0, pfn=1306228
sg49: dma=5eea800, dma_len=4096/0, pfn=1306214
sg50: dma=5eeb800, dma_len=4096/0, pfn=1163699
sg51: dma=5eec800, dma_len=4096/0, pfn=1065378
sg52: dma=5eed800, dma_len=4096/0, pfn=1165443
sg53: dma=5eee800, dma_len=4096/0, pfn=1167113
sg54: dma=5eef800, dma_len=4096/0, pfn=1167071
sg55: dma=5ef0800, dma_len=4096/0, pfn=1167029
sg56: dma=5ef1800, dma_len=4096/0, pfn=1166987
sg57: dma=5ef2800, dma_len=4096/0, pfn=1166903
sg58: dma=5ef3800, dma_len=4096/0, pfn=1167156
sg59: dma=5ef4800, dma_len=4096/0, pfn=1163909
sg60: dma=5ef5800, dma_len=4096/0, pfn=1180298
sg61: dma=5ef6800, dma_len=4096/0, pfn=1167323
sg62: dma=5ef7800, dma_len=4096/0, pfn=1167281
sg63: dma=5ef9000, dma_len=4096/0, pfn=1167239
sg64: dma=5efa000, dma_len=4096/0, pfn=1167197
sg65: dma=5efb000, dma_len=4096/0, pfn=1166241
sg66: dma=5efc000, dma_len=4096/0, pfn=1166073
sg67: dma=5efd000, dma_len=4096/0, pfn=1166032
sg68: dma=5efe000, dma_len=4096/0, pfn=1165989
sg69: dma=5eff000, dma_len=4096/0, pfn=1165947
sg70: dma=5f00000, dma_len=4096/0, pfn=1165905
sg71: dma=5f01000, dma_len=4096/0, pfn=1165863
sg72: dma=5f02000, dma_len=4096/0, pfn=1166115
sg73: dma=5f03000, dma_len=4096/0, pfn=1165611
sg74: dma=5f04000, dma_len=4096/0, pfn=1165779
sg75: dma=5f05000, dma_len=4096/0, pfn=1165527
sg76: dma=5f06000, dma_len=4096/0, pfn=1165401
sg77: dma=5f07000, dma_len=4096/0, pfn=1165359
sg78: dma=5f08000, dma_len=4096/0, pfn=1165317
sg79: dma=5f09000, dma_len=4096/0, pfn=1165075
sg80: dma=5f0a000, dma_len=4096/0, pfn=1164739
sg81: dma=5f0b000, dma_len=4096/0, pfn=1164697
sg82: dma=5f0c000, dma_len=4096/0, pfn=1163489
sg83: dma=5f0d000, dma_len=4096/0, pfn=1163447
sg84: dma=5f0e000, dma_len=4096/0, pfn=1053983
sg85: dma=5f0f000, dma_len=4096/0, pfn=1163405
sg86: dma=5f10000, dma_len=4096/0, pfn=1163321
sg87: dma=5f11000, dma_len=4096/0, pfn=1163279
sg88: dma=5f12000, dma_len=4096/0, pfn=1165285
sg89: dma=5f13000, dma_len=4096/0, pfn=1165243
sg90: dma=5f14000, dma_len=4096/0, pfn=1165201
sg91: dma=5f15000, dma_len=4096/0, pfn=1165159
sg92: dma=5f16000, dma_len=4096/0, pfn=1165117
sg93: dma=5f17000, dma_len=4096/0, pfn=1163363
sg94: dma=5f18000, dma_len=4096/0, pfn=1165033
sg95: dma=5f19000, dma_len=4096/0, pfn=1164991
sg96: dma=5f1a000, dma_len=4096/0, pfn=1053992
sg97: dma=5f1b000, dma_len=4096/0, pfn=1053990
sg98: dma=5f1c000, dma_len=4096/0, pfn=1053989
sg99: dma=5f1d000, dma_len=4096/0, pfn=1163867
sg100: dma=5f1e800, dma_len=4096/0, pfn=1163825
sg101: dma=5f1f800, dma_len=4096/0, pfn=1163784
sg102: dma=5f20800, dma_len=4096/0, pfn=1163742
sg103: dma=5f21800, dma_len=4096/0, pfn=1163657
sg104: dma=5f22800, dma_len=4096/0, pfn=1055857
sg105: dma=5f23800, dma_len=4096/0, pfn=1163615
sg106: dma=5f24800, dma_len=4096/0, pfn=1060720
sg107: dma=5f25800, dma_len=4096/0, pfn=1055849
sg108: dma=5f26800, dma_len=4096/0, pfn=1192414
sg109: dma=5f27800, dma_len=4096/0, pfn=1076188
sg110: dma=5f28800, dma_len=4096/0, pfn=1063537
sg111: dma=5f29800, dma_len=4096/0, pfn=1051198
sg112: dma=5f2a800, dma_len=4096/0, pfn=1179509
sg113: dma=5f2b800, dma_len=4096/0, pfn=1179551
sg114: dma=5f2c800, dma_len=4096/0, pfn=1179593
sg115: dma=5f2d800, dma_len=4096/0, pfn=1179635
sg116: dma=5f2e800, dma_len=4096/0, pfn=1177630
sg117: dma=5f2f800, dma_len=4096/0, pfn=1177672
sg118: dma=5f30800, dma_len=4096/0, pfn=1177713
sg119: dma=5f31800, dma_len=4096/0, pfn=1177755
sg120: dma=5f32800, dma_len=4096/0, pfn=1177797
sg121: dma=5f33800, dma_len=4096/0, pfn=1177839
sg122: dma=5f34800, dma_len=4096/0, pfn=1177881
sg123: dma=5f35800, dma_len=4096/0, pfn=1177923
sg124: dma=5f36800, dma_len=4096/0, pfn=1177965
sg125: dma=5f37800, dma_len=4096/0, pfn=1178007
sg126: dma=5f39000, dma_len=4096/0, pfn=1178879
sg127: dma=5f3a000, dma_len=4096/0, pfn=1178921
sg128: dma=5f3b000, dma_len=4096/0, pfn=1178963
sg129: dma=5f3c000, dma_len=4096/0, pfn=1179005
sg130: dma=5f3d000, dma_len=4096/0, pfn=1179047
sg131: dma=5f3e000, dma_len=4096/0, pfn=1179089
sg132: dma=5f3f000, dma_len=4096/0, pfn=1179131
sg133: dma=5f40000, dma_len=4096/0, pfn=1125733
sg134: dma=5f41000, dma_len=4096/0, pfn=1073305
sg135: dma=5f42000, dma_len=4096/0, pfn=1126002
sg136: dma=5f43000, dma_len=4096/0, pfn=1051194
sg137: dma=5f44000, dma_len=4096/0, pfn=1076158
sg138: dma=5f45000, dma_len=4096/0, pfn=1052126
sg139: dma=5f46000, dma_len=4096/0, pfn=1052142
sg140: dma=5f47000, dma_len=4096/0, pfn=1052114
sg141: dma=5f48000, dma_len=4096/0, pfn=1053074
sg142: dma=5f49000, dma_len=4096/0, pfn=1165821
sg143: dma=5f4a000, dma_len=4096/0, pfn=1165570
sg144: dma=5f4b000, dma_len=4096/0, pfn=1163573
sg145: dma=5f4c000, dma_len=4096/0, pfn=1182545
sg146: dma=5f4d000, dma_len=4096/0, pfn=1179216
sg147: dma=5f4e000, dma_len=4096/0, pfn=1179667
sg148: dma=5f4f000, dma_len=4096/0, pfn=1179709
sg149: dma=5f50000, dma_len=4096/0, pfn=1179751
sg150: dma=5f51000, dma_len=4096/0, pfn=1179793
sg151: dma=5f52000, dma_len=4096/0, pfn=1179836
sg152: dma=5f53000, dma_len=4096/0, pfn=1179878
sg153: dma=5f54000, dma_len=4096/0, pfn=1179920
sg154: dma=5f55000, dma_len=4096/0, pfn=1179961
sg155: dma=5f56000, dma_len=4096/0, pfn=1181295
sg156: dma=5f57000, dma_len=4096/0, pfn=1181337
sg157: dma=5f58000, dma_len=4096/0, pfn=1181379
sg158: dma=5f59000, dma_len=4096/0, pfn=1181422
sg159: dma=5f5a000, dma_len=4096/0, pfn=1182713
sg160: dma=5f5b000, dma_len=4096/0, pfn=1180707
sg161: dma=5f5c000, dma_len=4096/0, pfn=1180749
sg162: dma=5f5d000, dma_len=4096/0, pfn=1180791
sg163: dma=5f5e000, dma_len=4096/0, pfn=1180833
sg164: dma=5f5f000, dma_len=4096/0, pfn=1180875
sg165: dma=5f60000, dma_len=4096/0, pfn=1180917
sg166: dma=5f61000, dma_len=4096/0, pfn=1180959
sg167: dma=5f62000, dma_len=4096/0, pfn=1181001
sg168: dma=5f63000, dma_len=4096/0, pfn=1181043
sg169: dma=5f64000, dma_len=4096/0, pfn=1181084
sg170: dma=5f65000, dma_len=4096/0, pfn=1181169
sg171: dma=5f66000, dma_len=4096/0, pfn=1181211
sg172: dma=5f67000, dma_len=4096/0, pfn=1181253
sg173: dma=5f68000, dma_len=4096/0, pfn=1182041
sg174: dma=5f69000, dma_len=4096/0, pfn=1182125
sg175: dma=5f6a000, dma_len=4096/0, pfn=1182167
sg176: dma=5f6b000, dma_len=4096/0, pfn=1182208
sg177: dma=5f6c000, dma_len=4096/0, pfn=1182251
sg178: dma=5f6d000, dma_len=4096/0, pfn=1183417
sg179: dma=5f6e000, dma_len=4096/0, pfn=1183459
sg180: dma=5f6f000, dma_len=4096/0, pfn=1183501
sg181: dma=5f70000, dma_len=4096/0, pfn=1183543
sg182: dma=5f71000, dma_len=4096/0, pfn=1183585
sg183: dma=5f72000, dma_len=4096/0, pfn=1183627
sg184: dma=5f73000, dma_len=4096/0, pfn=1183669
sg185: dma=5f74000, dma_len=4096/0, pfn=1183711
sg186: dma=5f75000, dma_len=4096/0, pfn=1181705
sg187: dma=5f76000, dma_len=4096/0, pfn=1181746
sg188: dma=5f77000, dma_len=4096/0, pfn=1181788
sg189: dma=5f78000, dma_len=4096/0, pfn=1181831
sg190: dma=5f79000, dma_len=4096/0, pfn=1184751
sg191: dma=5f7a000, dma_len=4096/0, pfn=1182745
sg192: dma=5f7b000, dma_len=4096/0, pfn=1182787
sg193: dma=5f7c000, dma_len=4096/0, pfn=1182829
sg194: dma=5f7d000, dma_len=4096/0, pfn=1182870
sg195: dma=5f7e000, dma_len=4096/0, pfn=1182912
sg196: dma=5f7f000, dma_len=4096/0, pfn=1182954
sg197: dma=5f80000, dma_len=4096/0, pfn=1182996
sg198: dma=5f81000, dma_len=4096/0, pfn=1183039
sg199: dma=5f82000, dma_len=4096/0, pfn=1183123
sg200: dma=5f83000, dma_len=4096/0, pfn=1183165
sg201: dma=5f84000, dma_len=4096/0, pfn=1183207
sg202: dma=5f85000, dma_len=4096/0, pfn=1183249
sg203: dma=5f86000, dma_len=4096/0, pfn=1183291
sg204: dma=5f87000, dma_len=4096/0, pfn=1184540
sg205: dma=5f88000, dma_len=4096/0, pfn=1184583
sg206: dma=5f89000, dma_len=4096/0, pfn=1184625
sg207: dma=5f8a000, dma_len=4096/0, pfn=1184709
sg208: dma=5f8b000, dma_len=4096/0, pfn=1183911
sg209: dma=5f8c000, dma_len=4096/0, pfn=1183953
sg210: dma=5f8d000, dma_len=4096/0, pfn=1183994
sg211: dma=5f8e000, dma_len=4096/0, pfn=1184078
sg212: dma=5f8f000, dma_len=4096/0, pfn=1184121
sg213: dma=5f90000, dma_len=4096/0, pfn=1184163
sg214: dma=5f91000, dma_len=4096/0, pfn=1184205
sg215: dma=5f92000, dma_len=4096/0, pfn=1184247
sg216: dma=5f93000, dma_len=4096/0, pfn=1184289
sg217: dma=5f94000, dma_len=4096/0, pfn=1184331
sg218: dma=5f95000, dma_len=4096/0, pfn=1184373
sg219: dma=5f96000, dma_len=4096/0, pfn=1184415
sg220: dma=5f97000, dma_len=4096/0, pfn=1184456
sg221: dma=5f98000, dma_len=4096/0, pfn=1184498
sg222: dma=5f99000, dma_len=4096/0, pfn=1286724
sg223: dma=5f9a000, dma_len=4096/0, pfn=1306057
sg224: dma=5f9b000, dma_len=4096/0, pfn=1185622
sg225: dma=5f9c000, dma_len=4096/0, pfn=1185664
sg226: dma=5f9d000, dma_len=4096/0, pfn=1185706
sg227: dma=5f9e000, dma_len=4096/0, pfn=1185748
sg228: dma=5f9f000, dma_len=4096/0, pfn=1185791
sg229: dma=5fa0000, dma_len=4096/0, pfn=1183785
sg230: dma=5fa1000, dma_len=4096/0, pfn=1183827
sg231: dma=5fa2000, dma_len=4096/0, pfn=1183869
sg232: dma=5fa3000, dma_len=4096/0, pfn=1051207
sg233: dma=5fa4000, dma_len=4096/0, pfn=1051203
sg234: dma=5fa5000, dma_len=4096/0, pfn=1076162
sg235: dma=5fa6000, dma_len=4096/0, pfn=1051193
sg236: dma=5fa7000, dma_len=4096/0, pfn=1173889
sg237: dma=5fa8000, dma_len=4096/0, pfn=1099379
sg238: dma=5fa9000, dma_len=4096/0, pfn=1163993
sg239: dma=5faa000, dma_len=4096/0, pfn=1176011
sg240: dma=5fab000, dma_len=4096/0, pfn=1178385
sg241: dma=5fac000, dma_len=4096/0, pfn=1180507
sg242: dma=5fad000, dma_len=4096/0, pfn=1059777
sg243: dma=5fae000, dma_len=4096/0, pfn=1061654
sg244: dma=5faf000, dma_len=4096/0, pfn=1056810
sg245: dma=5fb0000, dma_len=4096/0, pfn=1056781
sg246: dma=5fb1000, dma_len=4096/0, pfn=1059789
sg247: dma=5fb2000, dma_len=4096/0, pfn=1056775
sg248: dma=5fb3000, dma_len=4096/0, pfn=1075857
sg249: dma=5fb4000, dma_len=4096/0, pfn=1060733
sg250: dma=5fb5000, dma_len=4096/0, pfn=1075865
sg251: dma=5fb6000, dma_len=4096/0, pfn=1060734
sg252: dma=5fb7000, dma_len=4096/0, pfn=1075860
sg253: dma=5fb8000, dma_len=4096/0, pfn=1059763
sg254: dma=5fb9000, dma_len=4096/0, pfn=1174141
sg255: dma=5fba000, dma_len=4096/0, pfn=1174183
hda: DMA table too small
ide dma table, 256 entries, bounce pfn 1310720
sg0: dma=7512800, dma_len=4096/0, pfn=1091699
sg1: dma=7513800, dma_len=4096/0, pfn=1091675
sg2: dma=7514800, dma_len=4096/0, pfn=1110989
sg3: dma=7515800, dma_len=4096/0, pfn=1094723
sg4: dma=7516800, dma_len=4096/0, pfn=1128625
sg5: dma=7517800, dma_len=4096/0, pfn=1074769
sg6: dma=7518800, dma_len=4096/0, pfn=1061548
sg7: dma=7519800, dma_len=4096/0, pfn=1139995
sg8: dma=751a800, dma_len=4096/0, pfn=1091152
sg9: dma=751b800, dma_len=4096/0, pfn=1093315
sg10: dma=751c800, dma_len=4096/0, pfn=1086382
sg11: dma=751d800, dma_len=4096/0, pfn=1161577
sg12: dma=751e800, dma_len=4096/0, pfn=1162533
sg13: dma=751f800, dma_len=4096/0, pfn=1164161
sg14: dma=7520800, dma_len=4096/0, pfn=1125619
sg15: dma=7521800, dma_len=4096/0, pfn=1075073
sg16: dma=7522800, dma_len=4096/0, pfn=1074842
sg17: dma=7523800, dma_len=4096/0, pfn=1074880
sg18: dma=7524800, dma_len=4096/0, pfn=1135167
sg19: dma=7525800, dma_len=4096/0, pfn=1154790
sg20: dma=7526800, dma_len=4096/0, pfn=1164732
sg21: dma=7527800, dma_len=4096/0, pfn=1094056
sg22: dma=7528800, dma_len=4096/0, pfn=1168951
sg23: dma=7529800, dma_len=4096/0, pfn=1053264
sg24: dma=752a800, dma_len=4096/0, pfn=1049613
sg25: dma=752b800, dma_len=4096/0, pfn=1133339
sg26: dma=752c800, dma_len=4096/0, pfn=1132213
sg27: dma=752d800, dma_len=4096/0, pfn=1127468
sg28: dma=752e800, dma_len=4096/0, pfn=1127678
sg29: dma=752f800, dma_len=4096/0, pfn=1127803
sg30: dma=7530800, dma_len=4096/0, pfn=1143981
sg31: dma=7531800, dma_len=4096/0, pfn=1143026
sg32: dma=7532800, dma_len=4096/0, pfn=1142028
sg33: dma=7533800, dma_len=4096/0, pfn=1140117
sg34: dma=7534800, dma_len=4096/0, pfn=1137910
sg35: dma=7535800, dma_len=4096/0, pfn=1072277
sg36: dma=7536800, dma_len=4096/0, pfn=1129800
sg37: dma=7537800, dma_len=4096/0, pfn=1143864
sg38: dma=7539000, dma_len=4096/0, pfn=1136460
sg39: dma=753a000, dma_len=4096/0, pfn=1138666
sg40: dma=753b000, dma_len=4096/0, pfn=1135042
sg41: dma=753c000, dma_len=4096/0, pfn=1129631
sg42: dma=753d000, dma_len=4096/0, pfn=1129547
sg43: dma=753e000, dma_len=4096/0, pfn=1163576
sg44: dma=753f000, dma_len=4096/0, pfn=1109168
sg45: dma=7540000, dma_len=4096/0, pfn=1124431
sg46: dma=7541000, dma_len=4096/0, pfn=1127569
sg47: dma=7542000, dma_len=4096/0, pfn=1127728
sg48: dma=7543000, dma_len=4096/0, pfn=1124079
sg49: dma=7544000, dma_len=4096/0, pfn=1183318
sg50: dma=7545000, dma_len=4096/0, pfn=1166001
sg51: dma=7546000, dma_len=4096/0, pfn=1166019
sg52: dma=7547000, dma_len=4096/0, pfn=1166000
sg53: dma=7548000, dma_len=4096/0, pfn=1161066
sg54: dma=7549000, dma_len=4096/0, pfn=1065267
sg55: dma=754a000, dma_len=4096/0, pfn=1161488
sg56: dma=754b000, dma_len=4096/0, pfn=1160949
sg57: dma=754c000, dma_len=4096/0, pfn=1158399
sg58: dma=754d000, dma_len=4096/0, pfn=1139304
sg59: dma=754e000, dma_len=4096/0, pfn=1210905
sg60: dma=754f000, dma_len=4096/0, pfn=1061814
sg61: dma=7550000, dma_len=4096/0, pfn=1124273
sg62: dma=7551000, dma_len=4096/0, pfn=1139293
sg63: dma=7552000, dma_len=4096/0, pfn=1253082
sg64: dma=7553000, dma_len=4096/0, pfn=1120775
sg65: dma=7554000, dma_len=4096/0, pfn=1295660
sg66: dma=7555000, dma_len=4096/0, pfn=1278386
sg67: dma=7556000, dma_len=4096/0, pfn=1195092
sg68: dma=7557000, dma_len=4096/0, pfn=1180605
sg69: dma=7558000, dma_len=4096/0, pfn=1295714
sg70: dma=7559000, dma_len=4096/0, pfn=1303818
sg71: dma=755a000, dma_len=4096/0, pfn=1301800
sg72: dma=755b000, dma_len=4096/0, pfn=1305171
sg73: dma=755c000, dma_len=4096/0, pfn=1297654
sg74: dma=755d000, dma_len=4096/0, pfn=1295697
sg75: dma=755e000, dma_len=4096/0, pfn=1085326
sg76: dma=755f000, dma_len=4096/0, pfn=1210199
sg77: dma=7560000, dma_len=4096/0, pfn=1253083
sg78: dma=7561000, dma_len=4096/0, pfn=1075475
sg79: dma=7562000, dma_len=4096/0, pfn=1077515
sg80: dma=7563000, dma_len=4096/0, pfn=1077566
sg81: dma=7564000, dma_len=4096/0, pfn=1064739
sg82: dma=7565000, dma_len=4096/0, pfn=1064552
sg83: dma=7566000, dma_len=4096/0, pfn=1139305
sg84: dma=7567000, dma_len=4096/0, pfn=1139308
sg85: dma=7568000, dma_len=4096/0, pfn=1139063
sg86: dma=7569000, dma_len=4096/0, pfn=1124894
sg87: dma=756a000, dma_len=4096/0, pfn=1163500
sg88: dma=756b000, dma_len=4096/0, pfn=1151353
sg89: dma=756c000, dma_len=4096/0, pfn=1238691
sg90: dma=756d000, dma_len=4096/0, pfn=1064586
sg91: dma=756e000, dma_len=4096/0, pfn=1302882
sg92: dma=756f000, dma_len=4096/0, pfn=1305872
sg93: dma=7570000, dma_len=4096/0, pfn=1302818
sg94: dma=7571000, dma_len=4096/0, pfn=1306451
sg95: dma=7572000, dma_len=4096/0, pfn=1303196
sg96: dma=7573000, dma_len=4096/0, pfn=1300495
sg97: dma=7574000, dma_len=4096/0, pfn=1300505
sg98: dma=7575000, dma_len=4096/0, pfn=1301942
sg99: dma=7576000, dma_len=4096/0, pfn=1302371
sg100: dma=7577000, dma_len=4096/0, pfn=1302423
sg101: dma=7578000, dma_len=4096/0, pfn=1302943
sg102: dma=7579000, dma_len=4096/0, pfn=1227562
sg103: dma=757a000, dma_len=4096/0, pfn=1226351
sg104: dma=757b000, dma_len=4096/0, pfn=1302150
sg105: dma=757c000, dma_len=4096/0, pfn=1302146
sg106: dma=757d000, dma_len=4096/0, pfn=1302145
sg107: dma=757e000, dma_len=4096/0, pfn=1303473
sg108: dma=757f000, dma_len=4096/0, pfn=1302360
sg109: dma=7580000, dma_len=4096/0, pfn=1303481
sg110: dma=7581000, dma_len=4096/0, pfn=1303485
sg111: dma=7582000, dma_len=4096/0, pfn=1302000
sg112: dma=7583000, dma_len=4096/0, pfn=1302285
sg113: dma=7584000, dma_len=4096/0, pfn=1302605
sg114: dma=7585000, dma_len=4096/0, pfn=1302602
sg115: dma=7586000, dma_len=4096/0, pfn=1288276
sg116: dma=7587000, dma_len=4096/0, pfn=1199147
sg117: dma=7588000, dma_len=4096/0, pfn=1291163
sg118: dma=7589000, dma_len=4096/0, pfn=1225828
sg119: dma=758a000, dma_len=4096/0, pfn=1192479
sg120: dma=758b000, dma_len=4096/0, pfn=1302022
sg121: dma=758c000, dma_len=4096/0, pfn=1302096
sg122: dma=758d000, dma_len=4096/0, pfn=1302682
sg123: dma=758e000, dma_len=4096/0, pfn=1302600
sg124: dma=758f000, dma_len=4096/0, pfn=1302263
sg125: dma=7590000, dma_len=4096/0, pfn=1302626
sg126: dma=7591000, dma_len=4096/0, pfn=1303065
sg127: dma=7592000, dma_len=4096/0, pfn=1302639
sg128: dma=7593000, dma_len=4096/0, pfn=1302831
sg129: dma=7594000, dma_len=4096/0, pfn=1302391
sg130: dma=7595000, dma_len=4096/0, pfn=1186671
sg131: dma=7596000, dma_len=4096/0, pfn=1302107
sg132: dma=7597000, dma_len=4096/0, pfn=1302266
sg133: dma=7598000, dma_len=4096/0, pfn=1303514
sg134: dma=7599000, dma_len=4096/0, pfn=1074456
sg135: dma=759a000, dma_len=4096/0, pfn=1074454
sg136: dma=759b000, dma_len=4096/0, pfn=1077932
sg137: dma=759c000, dma_len=4096/0, pfn=1138151
sg138: dma=759d000, dma_len=4096/0, pfn=1309818
sg139: dma=759e000, dma_len=4096/0, pfn=1301073
sg140: dma=759f000, dma_len=4096/0, pfn=1300993
sg141: dma=75a0000, dma_len=4096/0, pfn=1309780
sg142: dma=75a1000, dma_len=4096/0, pfn=1301040
sg143: dma=75a2000, dma_len=4096/0, pfn=1301007
sg144: dma=75a3000, dma_len=4096/0, pfn=1130805
sg145: dma=75a4000, dma_len=4096/0, pfn=1285725
sg146: dma=75a5000, dma_len=4096/0, pfn=1075164
sg147: dma=75a6000, dma_len=4096/0, pfn=1074291
sg148: dma=75a7000, dma_len=4096/0, pfn=1176495
sg149: dma=75a8000, dma_len=4096/0, pfn=1152240
sg150: dma=75a9000, dma_len=4096/0, pfn=1066291
sg151: dma=75aa000, dma_len=4096/0, pfn=1078137
sg152: dma=75ab000, dma_len=4096/0, pfn=1300894
sg153: dma=75ac000, dma_len=4096/0, pfn=1300984
sg154: dma=75ad000, dma_len=4096/0, pfn=1306470
sg155: dma=75ae000, dma_len=4096/0, pfn=1306473
sg156: dma=75af000, dma_len=4096/0, pfn=1306438
sg157: dma=75b0000, dma_len=4096/0, pfn=1306454
sg158: dma=75b1000, dma_len=4096/0, pfn=1300991
sg159: dma=75b2000, dma_len=4096/0, pfn=1300996
sg160: dma=75b3000, dma_len=4096/0, pfn=1303940
sg161: dma=75b4000, dma_len=4096/0, pfn=1300980
sg162: dma=75b5000, dma_len=4096/0, pfn=1304592
sg163: dma=75b6000, dma_len=4096/0, pfn=1304657
sg164: dma=75b7000, dma_len=4096/0, pfn=1300865
sg165: dma=75b8000, dma_len=4096/0, pfn=1300868
sg166: dma=75b9000, dma_len=4096/0, pfn=1300850
sg167: dma=75ba000, dma_len=4096/0, pfn=1300902
sg168: dma=75bb000, dma_len=4096/0, pfn=1300913
sg169: dma=75bc000, dma_len=4096/0, pfn=1301045
sg170: dma=75bd000, dma_len=4096/0, pfn=1301048
sg171: dma=75be000, dma_len=4096/0, pfn=1301050
sg172: dma=75bf000, dma_len=4096/0, pfn=1305977
sg173: dma=75c0000, dma_len=4096/0, pfn=1303937
sg174: dma=75c1000, dma_len=4096/0, pfn=1301063
sg175: dma=75c2000, dma_len=4096/0, pfn=1301002
sg176: dma=75c3000, dma_len=4096/0, pfn=1300858
sg177: dma=75c4000, dma_len=4096/0, pfn=1301066
sg178: dma=75c5000, dma_len=4096/0, pfn=1301090
sg179: dma=75c6000, dma_len=4096/0, pfn=1301109
sg180: dma=75c7800, dma_len=4096/0, pfn=1301052
sg181: dma=75c8800, dma_len=4096/0, pfn=1050889
sg182: dma=75ca000, dma_len=4096/0, pfn=1058758
sg183: dma=75cb000, dma_len=4096/0, pfn=1300834
sg184: dma=75cc800, dma_len=4096/0, pfn=1175943
sg185: dma=75cd800, dma_len=4096/0, pfn=1059784
sg186: dma=75ce800, dma_len=4096/0, pfn=1178155
sg187: dma=75cf800, dma_len=4096/0, pfn=1301057
sg188: dma=75d0800, dma_len=4096/0, pfn=1301070
sg189: dma=75d1800, dma_len=4096/0, pfn=1302404
sg190: dma=75d2800, dma_len=4096/0, pfn=1306152
sg191: dma=75d3800, dma_len=4096/0, pfn=1300845
sg192: dma=75d4800, dma_len=4096/0, pfn=1050243
sg193: dma=75d5800, dma_len=4096/0, pfn=1303880
sg194: dma=75d6800, dma_len=4096/0, pfn=1306171
sg195: dma=75d7800, dma_len=4096/0, pfn=1306275
sg196: dma=75d8800, dma_len=4096/0, pfn=1306174
sg197: dma=75d9800, dma_len=4096/0, pfn=1306138
sg198: dma=75da800, dma_len=4096/0, pfn=1306463
sg199: dma=75db800, dma_len=4096/0, pfn=1306469
sg200: dma=75dc800, dma_len=4096/0, pfn=1301416
sg201: dma=75dd800, dma_len=4096/0, pfn=1301418
sg202: dma=75de800, dma_len=4096/0, pfn=1299028
sg203: dma=75df800, dma_len=4096/0, pfn=1309563
sg204: dma=75e0800, dma_len=4096/0, pfn=1299036
sg205: dma=75e1800, dma_len=4096/0, pfn=1299006
sg206: dma=75e2800, dma_len=4096/0, pfn=1298996
sg207: dma=75e3800, dma_len=4096/0, pfn=1299020
sg208: dma=75e4800, dma_len=4096/0, pfn=1299003
sg209: dma=75e5800, dma_len=4096/0, pfn=1053054
sg210: dma=75e6800, dma_len=4096/0, pfn=1050924
sg211: dma=75e7800, dma_len=4096/0, pfn=1059515
sg212: dma=75e8800, dma_len=4096/0, pfn=1051608
sg213: dma=75e9800, dma_len=4096/0, pfn=1064691
sg214: dma=75ea800, dma_len=4096/0, pfn=1050926
sg215: dma=75eb800, dma_len=4096/0, pfn=1105646
sg216: dma=75ec800, dma_len=4096/0, pfn=1199955
sg217: dma=75ed800, dma_len=4096/0, pfn=1060378
sg218: dma=75ee800, dma_len=4096/0, pfn=1143091
sg219: dma=75ef800, dma_len=4096/0, pfn=1062717
sg220: dma=75f0800, dma_len=4096/0, pfn=1050862
sg221: dma=75f1800, dma_len=4096/0, pfn=1306215
sg222: dma=75f2800, dma_len=4096/0, pfn=1306195
sg223: dma=75f3800, dma_len=4096/0, pfn=1306229
sg224: dma=75f4800, dma_len=4096/0, pfn=1050973
sg225: dma=75f5800, dma_len=4096/0, pfn=1050976
sg226: dma=75f6800, dma_len=4096/0, pfn=1061237
sg227: dma=75f7800, dma_len=4096/0, pfn=1198723
sg228: dma=75f9000, dma_len=4096/0, pfn=1301414
sg229: dma=75fa000, dma_len=4096/0, pfn=1061761
sg230: dma=75fb000, dma_len=4096/0, pfn=1062342
sg231: dma=75fc000, dma_len=4096/0, pfn=1050811
sg232: dma=75fd000, dma_len=4096/0, pfn=1050847
sg233: dma=75fe000, dma_len=4096/0, pfn=1050859
sg234: dma=75ff000, dma_len=4096/0, pfn=1050658
sg235: dma=7600000, dma_len=4096/0, pfn=1166357
sg236: dma=7601000, dma_len=4096/0, pfn=1050760
sg237: dma=7602000, dma_len=4096/0, pfn=1050771
sg238: dma=7603000, dma_len=4096/0, pfn=1051400
sg239: dma=7604000, dma_len=4096/0, pfn=1050702
sg240: dma=7605000, dma_len=4096/0, pfn=1078142
sg241: dma=7606000, dma_len=4096/0, pfn=1109123
sg242: dma=7607000, dma_len=4096/0, pfn=1059322
sg243: dma=7608000, dma_len=4096/0, pfn=1058840
sg244: dma=7609000, dma_len=4096/0, pfn=1050954
sg245: dma=760a000, dma_len=4096/0, pfn=1050931
sg246: dma=760b000, dma_len=4096/0, pfn=1051398
sg247: dma=760c000, dma_len=4096/0, pfn=1051387
sg248: dma=760d000, dma_len=4096/0, pfn=1050908
sg249: dma=760e000, dma_len=4096/0, pfn=1050802
sg250: dma=760f000, dma_len=4096/0, pfn=1050816
sg251: dma=4021f000, dma_len=4096/0, pfn=262687
sg252: dma=3fa4f000, dma_len=4096/0, pfn=260687
sg253: dma=41727000, dma_len=4096/0, pfn=268071
sg254: dma=41e55000, dma_len=4096/0, pfn=269909
sg255: dma=40043000, dma_len=4096/0, pfn=262211


-- 
Andy, BlueArc Engineering

^ permalink raw reply

* AW: AW: [Xenomai-core] vxworks-skin taskSpawn
From: Roderik_Wildenburg @ 2006-03-01 13:23 UTC (permalink / raw)
  To: rpm; +Cc: xenomai

Philippe Gerum wrote :
> 
> I've run the satch example successfully on an Icecube board 
> here using -rc2. 
> What's the status of this issue on your side? Was it a timer 
> configuration issue as suspected by Gilles?
> 

Status is unchanged. I still try to debugg satch with gdb/ddd and have been a little bit successfull with this. But I face more and more problems the deeper I dig into the system (e.g. unresolved symbols when compiling vxWorks-examples with --debug enabled (see other thread) or now, gdb moans about "cannot find bounds of current function" (do you have any idea, what this means ?))

I don´t think it is a timer problem, as my timer is running in oneshot mode and not in continous mode what causes the problem on Gilles system. But I am not shure.

Nevertheless, thank you for asking !! If you have any other suggestions what I can do, please let me know. I will inform you when the status changes on my side.

Best Regards
Roderik




^ permalink raw reply

* Re: [linux-lvm] Create a Logical volume with 100% of Volume groups size?
From: Patrick Caulfield @ 2006-03-01 13:21 UTC (permalink / raw)
  To: LVM general discussion and development
In-Reply-To: <44059BAB.6020307@telecyl.com>

Alejandro Alfonso wrote:
> Hi everybody!
> 
> we only want to use LVM with one Logical volume, and want to use the
> 100% of available space.
> is there any way to create it? Look:
> 
> acrol ~ # vgdisplay
>   --- Volume group ---
>   VG Name               mirror
> [...]
>   VG Size               232.88 GB
>   PE Size               32.00 MB
>   Total PE              7452
>   Alloc PE / Size       7452 / 232.88 GB
>   Free  PE / Size       0 / 0
> [...]
> 
> acrol ~ # lvcreate -L232.88G -nlv00 mirrorPoe
>   Rounding up size to full physical extent 232.91 GB
>   Insufficient free extents (7452) in volume group mirrorPoe: 7453 required
> 
> How to use all the 7452 PE? Thanks in advance

lvcreate -l7452 -nlv00 mirrorPoe

see man lvcreate


-- 

patrick

^ permalink raw reply

* Re: Problem with 2.6 kernel and sym53c8xx driver
From: Matthew Wilcox @ 2006-03-01 13:20 UTC (permalink / raw)
  To: Adrien Corbi?re; +Cc: linux-scsi
In-Reply-To: <440481D2.6030107@iutc3.unicaen.fr>

On Tue, Feb 28, 2006 at 06:01:06PM +0100, Adrien Corbi?re wrote:
> I have a server with a  "Symbios Logic 53c1010 66MHz Ultra3 SCSI" 
> adapter, and it works very well with 2.4.x kernel series (currently 
> 2.4.27). I've tried change to 2.6 kernel series, but I've never managed 
> to made this chip correctly recognized. Several test were made with 
> 2.6.5, 2.6.6, 2.6.8 (debian) and now 2.6.15.4.
> 
> I have a RAID 1To and a DAT 20/40Go on this server.
> 
> I've search on mailing lists, howtos, kernel docs. Since I've no idea of 
> what to do next, I'm writing to you.

OK.  I'm cc'ing the linux-scsi list for additional help.

> ------ With 2.6.15.4, when the module loads up, I always have this 
> message in an endless loop (what is written before is too fast for me to 
> write it on paper):
> target: 0:0:1: FAST-80 WIDE SCSI 160.0 MB/s DT (12.5 ns, offset 31)
> sym0: SCSI phase error fixup: CCB already dequeued
> sym0: SCSI BUS reset detected
> sym0: SCSI BUS has been reset

This either indicates a really serious problem in the driver, or that
the device is violating the scsi bus protocol in a nasty way.  I'll do
some debugging with you off-list to figure this out.

> The kernel finds the raid device as sda AND an "sdb" device that doesn't 
> exist.
> 
> ------ With 2.6.5, detection is nearly correct, but there is a problem 
> of size. The value of DMA adressing mode in kernel configuration doesn't 
> change anything.
> PCI: Found IRQ 9 for device 0000:01:03.0
> sym0: <1010-66> rev 0x1 at pci 0000:01:03.0 irq 9
> sym0: Symbios NVRAM, ID 7, Fast-80, LVD, parity checking
> sym0: open drain IRQ line driver, using on-chip SRAM
> sym0: using LOAD/STORE-based firmware.
> sym0: handling phase mismatch from SCRIPTS.
> sym0: SCSI BUS has been reset.
> scsi0 : sym-2.1.18i
>  Vendor: BROWNIE   Model: 1600U3P           Rev: 0001
>  Type:   Direct-Access                      ANSI SCSI revision: 03
> sym0:1:0: tagged command queuing enabled, command queue depth 16.
> sym0:1: FAST-80 WIDE SCSI 160.0 MB/s DT (12.5 ns, offset 31)
> SCSI device sda: 2568192000 512-byte hdwr sectors (215403 MB)
> SCSI device sda: drive cache: write back
> sda: sda1 sda2
> Attached scsi disk sda at scsi0, channel 0, id 1, lun 0
> scsi: host 0 channel 0 id 1 lun 0x00000200080c0400 has a LUN larger than 
> currently supported.
> scsi: host 0 channel 0 id 1 lun 0xff010000ffffffff has a LUN larger than 
> currently supported.
> scsi: host 0 channel 0 id 1 lun808529923 has a LUN larger than allowed 
> by the host adapter
> scsi: host 0 channel 0 id 1 lun3078 has a LUN larger than allowed by the 
> host adapter

This looks like a problem with the BROWNIE device,  as I've found a
similar problem here:
http://lists.suse.com/archive/suse-amd64/2004-Mar/0069.html

This is with an Adaptec card, so chances are it's the device at
fault, not the driver.  Looks to me like a bad implementation of
REPORT_LUN, so this patch should remove those annoying messages:

Index: ./drivers/scsi/scsi_devinfo.c
===================================================================
RCS file: /var/cvs/linux-2.6/drivers/scsi/scsi_devinfo.c,v
retrieving revision 1.16
diff -u -p -r1.16 scsi_devinfo.c
--- ./drivers/scsi/scsi_devinfo.c	17 Jan 2006 14:51:49 -0000	1.16
+++ ./drivers/scsi/scsi_devinfo.c	1 Mar 2006 13:17:21 -0000
@@ -126,6 +126,7 @@ static struct {
 	{"ADAPTEC", "Adaptec 5400S", NULL, BLIST_FORCELUN},
 	{"AFT PRO", "-IX CF", "0.0>", BLIST_FORCELUN},
 	{"BELKIN", "USB 2 HS-CF", "1.95",  BLIST_FORCELUN | BLIST_INQUIRY_36},
+	{"BROWNIE", "1600U3P", NULL, BLIST_NOREPORTLUN},
 	{"CANON", "IPUBJD", NULL, BLIST_SPARSELUN},
 	{"CBOX3", "USB Storage-SMC", "300A", BLIST_FORCELUN | BLIST_INQUIRY_36},
 	{"CMD", "CRA-7280", NULL, BLIST_SPARSELUN},	/* CMD RAID Controller */

>  Vendor: COMPAQ    Model: SDT-10000         Rev: 1.14
>  Type:   Sequential-Access                  ANSI SCSI revision: 02
> st: Version 20040318, fixed bufsize 32768, s/g segs 256
> Attached scsi tape st0 at scsi0, channel 0, id 5, lun 0
> st0: try direct i/o: yes (alignment 512 B), max page reachable by HBA 
> 1048575
> 
> ------ For kernel 2.4:
> PCI: Enabling device 01:03.0 (0000 -> 0003)
> PCI: Found IRQ 9 for device 01:03.0
> sym.1.3.0: setting PCI_COMMAND_MASTER PCI_COMMAND_PARITY...
> sym.1.3.0: setting PCI_COMMAND_INVALIDATE.
> sym0: <1010-66> rev 0x1 on pci bus 1 device 3 function 0 irq 9
> sym0: using 64 bit DMA addressing
> sym0: Symbios NVRAM, ID 7, Fast-80, LVD, parity checking
> sym0: open drain IRQ line driver, using on-chip SRAM
> sym0: using LOAD/STORE-based firmware.
> sym0: handling phase mismatch from SCRIPTS.
> sym0: SCSI BUS has been reset.
> scsi0 : sym-2.1.17a
> blk: queue df83a894, I/O limit 1048575Mb (mask 0xffffffffff)
>  Vendor: BROWNIE   Model: 1600U3P           Rev: 0001
>  Type:   Direct-Access                      ANSI SCSI revision: 03
> blk: queue df83a994, I/O limit 1048575Mb (mask 0xffffffffff)
>  Vendor: COMPAQ    Model: SDT-10000         Rev: 1.14
>  Type:   Sequential-Access                  ANSI SCSI revision: 02
> blk: queue df83aa94, I/O limit 1048575Mb (mask 0xffffffffff)
> sym0:1:0: tagged command queuing enabled, command queue depth 16.
> Attached scsi disk sda at scsi0, channel 0, id 1, lun 0
> sym0:1: FAST-80 WIDE SCSI 160.0 MB/s DT (12.5 ns, offset 31)
> SCSI device sda: 2568192000 512-byte hdwr sectors (1314914 MB)
> /dev/scsi/host0/bus0/target1/lun0: p1 p2
> 
> 
> Thanks in advance.
> A. Corbiere
> 
> -- 
> Adrien CORBIERE                            Tel: 02.31.52.55.26
> IUT de Caen - Campus III                   Fax: 02.31.52.55.22
> Rue Anton Tchekhov
> B.P. 53
> 14123 Ifs 

^ permalink raw reply

* Re: [PATCH] Generic hardware RNG support
From: Michael Buesch @ 2006-03-01 13:19 UTC (permalink / raw)
  To: Kumar Gala, dsaxena; +Cc: linux-kernel, bcm43xx-dev
In-Reply-To: <81D78F6B-7492-4DE0-A82D-F647869B3A40@kernel.crashing.org>

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

On Wednesday 01 March 2006 03:57, you wrote:
> > Hi, I'll email you the patchset off-list so you can look at the API
> > and write the bcm43xx driver against it.  They are a few months old  
> > and
> > need updating to 2.6.latest and it is on my 2.6.18 TODO. If you  
> > search the
> > archives there were a few small issues left such as separating out  
> > all the
> > x86 stuff into separate amd, via, and intel code instead of having  
> > a single
> > file.
> 
> Are the patches in any state to include in -mm?

What about something like the following patch.
This is a merge of Deepak Saxena's and my stuff. It brings
the best features from both patches. :)

This is only compile-tested, yet.

diff -urNX linux-2.6.16-rc5-mm1/Documentation/dontdiff linux-2.6.16-rc5-mm1.orig/drivers/char/hw_random/core.c linux-2.6.16-rc5-mm1/drivers/char/hw_random/core.c
--- linux-2.6.16-rc5-mm1.orig/drivers/char/hw_random/core.c	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.16-rc5-mm1/drivers/char/hw_random/core.c	2006-03-01 14:07:56.000000000 +0100
@@ -0,0 +1,352 @@
+/*
+        Added support for the AMD Geode LX RNG
+	(c) Copyright 2004-2005 Advanced Micro Devices, Inc.
+
+	derived from
+
+ 	Hardware driver for the Intel/AMD/VIA Random Number Generators (RNG)
+	(c) Copyright 2003 Red Hat Inc <jgarzik@redhat.com>
+ 
+ 	derived from
+ 
+        Hardware driver for the AMD 768 Random Number Generator (RNG)
+        (c) Copyright 2001 Red Hat Inc <alan@redhat.com>
+
+ 	derived from
+ 
+	Hardware driver for Intel i810 Random Number Generator (RNG)
+	Copyright 2000,2001 Jeff Garzik <jgarzik@pobox.com>
+	Copyright 2000,2001 Philipp Rumpf <prumpf@mandrakesoft.com>
+
+	Added generic RNG API
+	Copyright 2006 Michael Buesch <mbuesch@freenet.de>
+	Copyright 2005 (c) MontaVista Software, Inc.
+
+	Please read Documentation/hw_random.txt for details on use.
+
+	----------------------------------------------------------
+	This software may be used and distributed according to the terms
+        of the GNU General Public License, incorporated herein by reference.
+
+ */
+
+
+#include <linux/hw_random.h>
+#include <linux/pci.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/fs.h>
+#include <linux/init.h>
+#include <linux/interrupt.h>
+#include <linux/spinlock.h>
+#include <linux/random.h>
+#include <linux/miscdevice.h>
+#include <linux/smp_lock.h>
+#include <linux/mm.h>
+#include <linux/delay.h>
+
+#ifdef __i386__
+#include <asm/msr.h>
+#include <asm/cpufeature.h>
+#endif
+
+#include <asm/io.h>
+#include <asm/uaccess.h>
+
+
+#define RNG_MODULE_NAME		"hw_random"
+#define RNG_DRIVER_NAME		RNG_MODULE_NAME " hardware driver"
+#define PFX RNG_MODULE_NAME	": "
+
+
+/*
+ * debugging macros
+ */
+
+/* pr_debug() collapses to a no-op if DEBUG is not defined */
+#define DPRINTK(fmt, args...) pr_debug(PFX "%s: " fmt, __FUNCTION__ , ## args)
+
+
+#undef RNG_NDEBUG        /* define to enable lightweight runtime checks */
+#ifdef RNG_NDEBUG
+#define assert(expr)							\
+		if(!(expr)) {						\
+		printk(KERN_DEBUG PFX "Assertion failed! %s,%s,%s,"	\
+		"line=%d\n", #expr, __FILE__, __FUNCTION__, __LINE__);	\
+		}
+#else
+#define assert(expr)
+#endif
+
+#define RNG_MISCDEV_MINOR		183 /* official */
+
+
+static int rng_dev_open (struct inode *inode, struct file *filp);
+static ssize_t rng_dev_read (struct file *filp, char __user *buf, size_t size,
+				loff_t * offp);
+
+static struct file_operations rng_chrdev_ops = {
+	.owner		= THIS_MODULE,
+	.open		= rng_dev_open,
+	.read		= rng_dev_read,
+};
+
+static struct miscdevice rng_miscdev = {
+	.minor		= RNG_MISCDEV_MINOR,
+	.name		= RNG_MODULE_NAME,
+	.fops		= &rng_chrdev_ops,
+};
+
+static struct hwrng *current_rng;
+static LIST_HEAD(rng_list);
+static DEFINE_MUTEX(rng_mutex);
+
+
+/***********************************************************************
+ *
+ * /dev/hwrandom character device handling (major 10, minor 183)
+ *
+ */
+
+static int rng_dev_open (struct inode *inode, struct file *filp)
+{
+	/* enforce read-only access to this chrdev */
+	if ((filp->f_mode & FMODE_READ) == 0)
+		return -EINVAL;
+	if (filp->f_mode & FMODE_WRITE)
+		return -EINVAL;
+	return 0;
+}
+
+
+static ssize_t rng_dev_read (struct file *filp, char __user *buf, size_t size,
+				loff_t * offp)
+{
+	unsigned int have_data;
+	u32 data = 0;
+	ssize_t ret = 0;
+	int err;
+
+	while (size) {
+		err = mutex_lock_interruptible(&rng_mutex);
+		if (err)
+			return err;
+		if (!current_rng) {
+			mutex_unlock(&rng_mutex);
+			return -ENODEV;
+		}
+		have_data = 0;
+		if (current_rng->data_present == NULL ||
+		    current_rng->data_present(current_rng))
+			have_data = current_rng->data_read(current_rng, &data);
+		mutex_unlock(&rng_mutex);
+
+		while (have_data && size) {
+			if (put_user((u8)data, buf++)) {
+				ret = ret ? : -EFAULT;
+				break;
+			}
+			size--;
+			ret++;
+			have_data--;
+			data>>=8;
+		}
+
+		if (filp->f_flags & O_NONBLOCK)
+			return ret ? : -EAGAIN;
+
+		if(need_resched())
+			schedule_timeout_interruptible(1);
+		else
+			udelay(200);	/* FIXME: We could poll for 250uS ?? */
+
+		if (signal_pending (current))
+			return ret ? : -ERESTARTSYS;
+	}
+	return ret;
+}
+
+
+static ssize_t hwrng_attr_current_store(struct class_device *class,
+					const char *buf, size_t len)
+{
+	int err = -ENODEV;
+	struct hwrng *rng;
+
+	if (!capable(CAP_SYS_ADMIN))
+		return -EPERM;
+	err = mutex_lock_interruptible(&rng_mutex);
+	if (err)
+		return err;
+	err = -ENODEV;
+	list_for_each_entry(rng, &rng_list, list) {
+		if (strncmp(rng->name, buf, len) == 0) {
+			if (rng->init) {
+				err = rng->init(rng);
+				if (err)
+					break;
+			}
+			if (current_rng && current_rng->cleanup)
+				current_rng->cleanup(current_rng);
+			current_rng = rng;
+			err = 0;
+			break;
+		}
+	}
+	mutex_unlock(&rng_mutex);
+
+	return err ? err : len;
+}
+
+static ssize_t hwrng_attr_current_show(struct class_device *class,
+				       char *buf)
+{
+	int err;
+	ssize_t ret;
+	const char *name;
+
+	err = mutex_lock_interruptible(&rng_mutex);
+	if (err)
+		return err;
+	if (current_rng)
+		name = current_rng->name;
+	else
+		name = "none";
+	ret = sprintf(buf, "%s\n", name);
+	mutex_unlock(&rng_mutex);
+
+	return ret;
+}
+
+static ssize_t hwrng_attr_available_show(struct class_device *class,
+					 char *buf)
+{
+	int err;
+	ssize_t ret = 0;
+	struct hwrng *rng;
+
+	err = mutex_lock_interruptible(&rng_mutex);
+	if (err)
+		return err;
+	buf[0] = '\0';
+	list_for_each_entry(rng, &rng_list, list) {
+		ret += strlen(rng->name);
+		strcat(buf, rng->name);
+		ret += 1;
+		strcat(buf, " ");
+	}
+	strcat(buf, "\n");
+	ret += 1;
+	mutex_unlock(&rng_mutex);
+
+	return ret;
+}
+
+static CLASS_DEVICE_ATTR(rng_current, S_IRUGO | S_IWUSR,
+			 hwrng_attr_current_show,
+			 hwrng_attr_current_store);
+static CLASS_DEVICE_ATTR(rng_available, S_IRUGO,
+			 hwrng_attr_available_show,
+			 NULL);
+
+
+static void unregister_miscdev(void)
+{
+	class_device_remove_file(rng_miscdev.class,
+				 &class_device_attr_rng_available);
+	class_device_remove_file(rng_miscdev.class,
+				 &class_device_attr_rng_current);
+	misc_deregister(&rng_miscdev);
+}
+
+static int register_miscdev(void)
+{
+	int err;
+
+	err = misc_register(&rng_miscdev);
+	if (err)
+		goto out;
+	err = class_device_create_file(rng_miscdev.class,
+				       &class_device_attr_rng_current);
+	if (err)
+		goto err_misc_dereg;
+	err = class_device_create_file(rng_miscdev.class,
+				       &class_device_attr_rng_available);
+	if (err)
+		goto err_remove_current;
+out:
+	return err;
+
+err_remove_current:
+	class_device_remove_file(rng_miscdev.class,
+				 &class_device_attr_rng_current);
+err_misc_dereg:
+	misc_deregister(&rng_miscdev);
+	goto out;
+}
+
+int hwrng_register(struct hwrng *rng)
+{
+	int must_register_misc;
+	int err;
+	struct hwrng *old_current;
+
+	if (rng->name == NULL)
+		return -EINVAL;
+	if (rng->data_read == NULL)
+		return -EINVAL;
+
+	mutex_lock(&rng_mutex);
+	must_register_misc = (current_rng == NULL);
+	old_current = current_rng;
+	if (!current_rng) {
+		if (rng->init) {
+			err = rng->init(rng);
+			if (err) {
+				mutex_unlock(&rng_mutex);
+				return err;
+			}
+		}
+		current_rng = rng;
+	}
+	INIT_LIST_HEAD(&rng->list);
+	list_add_tail(&rng->list, &rng_list);
+	err = 0;
+	if (must_register_misc) {
+		err = register_miscdev();
+		if (err) {
+			if (rng->cleanup)
+				rng->cleanup(rng);
+			list_del(&rng->list);
+			current_rng = old_current;
+		}
+	}
+
+	mutex_unlock(&rng_mutex);
+
+	return err;
+}
+EXPORT_SYMBOL_GPL(hwrng_register);
+
+void hwrng_unregister(struct hwrng *rng)
+{
+	mutex_lock(&rng_mutex);
+	list_del(&rng->list);
+	if (current_rng == rng) {
+		if (rng->cleanup)
+			rng->cleanup(rng);
+		if (list_empty(&rng_list))
+			current_rng = NULL;
+		else
+			current_rng = list_entry(rng_list.prev, struct hwrng, list);
+	}
+	if (list_empty(&rng_list))
+		unregister_miscdev();
+	mutex_unlock(&rng_mutex);
+}
+EXPORT_SYMBOL_GPL(hwrng_unregister);
+
+
+MODULE_AUTHOR("The Linux Kernel team");
+MODULE_DESCRIPTION("H/W Random Number Generator (RNG) driver");
+MODULE_LICENSE("GPL");
diff -urNX linux-2.6.16-rc5-mm1/Documentation/dontdiff linux-2.6.16-rc5-mm1.orig/drivers/char/hw_random/ixp4xx-rng.c linux-2.6.16-rc5-mm1/drivers/char/hw_random/ixp4xx-rng.c
--- linux-2.6.16-rc5-mm1.orig/drivers/char/hw_random/ixp4xx-rng.c	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.16-rc5-mm1/drivers/char/hw_random/ixp4xx-rng.c	2006-03-01 14:05:37.000000000 +0100
@@ -0,0 +1,62 @@
+/*
+ * drivers/char/rng/ixp4xx-rng.c
+ *
+ * RNG driver for Intel IXP4xx family of NPUs
+ *
+ * Author: Deepak Saxena <dsaxena@plexity.net>
+ *
+ * Copyright 2005 (c) MontaVista Software, Inc.
+ *
+ * This file is licensed under  the terms of the GNU General Public
+ * License version 2. This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/kernel.h>
+#include <linux/config.h>
+#include <linux/types.h>
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/init.h>
+#include <linux/bitops.h>
+#include <linux/hw_random.h>
+
+#include <asm/io.h>
+#include <asm/hardware.h>
+
+
+static u32* __iomem rng_base;
+
+
+static int ixp4xx_rng_data_read(struct hwrng *rng, u32 *buffer)
+{
+	*buffer = __raw_readl(rng_base);
+
+	return 4;
+}
+
+struct hwrng ixp4xx_rng_ops = {
+	.name		= "ixp4xx",
+	.data_read	= ixp4xx_rng_data_read,
+};
+
+static int __init ixp4xx_rng_init(void)
+{
+	rng_base = (u32* __iomem) ioremap(0x70002100, 4);
+	if (!rng_base) return -ENOMEM;
+
+	return hwrng_register(&ixp4xx_rng_ops);
+}
+
+static void __exit ixp4xx_rng_exit(void)
+{
+	hwrng_unregister(&ixp4xx_rng_ops);
+	iounmap(rng_base);
+}
+
+subsys_initcall(ixp4xx_rng_init);
+module_exit(ixp4xx_rng_exit);
+
+MODULE_AUTHOR("Deepak Saxena <dsaxena@plexity.net>");
+MODULE_DESCRIPTION("H/W Random Number Generator (RNG) driver for IXP4xx");
+MODULE_LICENSE("GPL");
diff -urNX linux-2.6.16-rc5-mm1/Documentation/dontdiff linux-2.6.16-rc5-mm1.orig/drivers/char/hw_random/Kconfig linux-2.6.16-rc5-mm1/drivers/char/hw_random/Kconfig
--- linux-2.6.16-rc5-mm1.orig/drivers/char/hw_random/Kconfig	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.16-rc5-mm1/drivers/char/hw_random/Kconfig	2006-03-01 14:06:25.000000000 +0100
@@ -0,0 +1,47 @@
+#
+# Hardware Random Number Generator (RNG) configuration
+#
+
+
+config HW_RANDOM
+	bool "Hardware Random Number Generator Core support"
+	default y
+	---help---
+	  Hardware Random Number Generator Core infrastructure.
+
+config X86_RNG
+	tristate "Intel/AMD/VIA HW Random Number Generator support"
+	depends on HW_RANDOM && (X86 || IA64) && PCI
+	---help---
+	  This driver provides kernel-side support for the Random Number
+	  Generator hardware found on Intel i8xx-based motherboards,
+	  AMD 76x-based motherboards, and Via Nehemiah CPUs.
+
+	  To compile this driver as a module, choose M here: the
+	  module will be called x86-rng.
+
+	  If unsure, say N.
+
+config IXP4XX_RNG
+	tristate "Intel IXP4xx NPU HW Random Number Generator support"
+	depends on HW_RANDOM && ARCH_IXP4XX
+	---help---
+	  This driver provides kernel-side support for the Random
+	  Number Generator hardware found on the Intel IXP4xx NPU.
+
+	  To compile this driver as a module, choose M here: the
+	  module will be called ixp4xx-rng.
+
+config OMAP_RNG
+	tristate "OMAP Random Number Generator support"
+	depends on HW_RANDOM && (ARCH_OMAP16XX || ARCH_OMAP24XX)
+ 	---help---
+ 	  This driver provides kernel-side support for the Random Number
+	  Generator hardware found on OMAP16xx and OMAP24xx multimedia
+	  processors.
+ 
+	  To compile this driver as a module, choose M here: the
+	  module will be called omap-rng.
+
+ 	  If unsure, say N.
+
diff -urNX linux-2.6.16-rc5-mm1/Documentation/dontdiff linux-2.6.16-rc5-mm1.orig/drivers/char/hw_random/Makefile linux-2.6.16-rc5-mm1/drivers/char/hw_random/Makefile
--- linux-2.6.16-rc5-mm1.orig/drivers/char/hw_random/Makefile	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.16-rc5-mm1/drivers/char/hw_random/Makefile	2006-03-01 14:07:25.000000000 +0100
@@ -0,0 +1,8 @@
+#
+# Makefile for HW Random Number Generator (RNG) device drivers.
+#
+
+obj-$(CONFIG_HW_RANDOM) += core.o
+obj-$(CONFIG_IXP4XX_RNG) += ixp4xx-rng.o
+obj-$(CONFIG_X86_RNG) += x86-rng.o
+obj-$(CONFIG_OMAP_RNG) += omap-rng.o
diff -urNX linux-2.6.16-rc5-mm1/Documentation/dontdiff linux-2.6.16-rc5-mm1.orig/drivers/char/hw_random/omap-rng.c linux-2.6.16-rc5-mm1/drivers/char/hw_random/omap-rng.c
--- linux-2.6.16-rc5-mm1.orig/drivers/char/hw_random/omap-rng.c	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.16-rc5-mm1/drivers/char/hw_random/omap-rng.c	2006-03-01 14:05:34.000000000 +0100
@@ -0,0 +1,209 @@
+/*
+ * driver/char/hw_random/omap-rng.c
+ *
+ * RNG driver for TI OMAP CPU family
+ *
+ * Author: Deepak Saxena <dsaxena@plexity.net>
+ *
+ * Copyright 2005 (c) MontaVista Software, Inc.
+ *
+ * Mostly based on original driver:
+ *
+ * Copyright (C) 2005 Nokia Corporation
+ * Author: Juha Yrj��<juha.yrjola@nokia.com>
+ *
+ * This file is licensed under  the terms of the GNU General Public
+ * License version 2. This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ *
+ * TODO:
+ *
+ * - Make status updated be interrupt driven so we don't poll
+ *
+ */
+
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/random.h>
+#include <linux/err.h>
+#include <linux/device.h>
+#include <linux/hw_random.h>
+
+#include <asm/io.h>
+#include <asm/hardware/clock.h>
+
+#define RNG_OUT_REG		0x00		/* Output register */
+#define RNG_STAT_REG		0x04		/* Status register
+							[0] = STAT_BUSY */
+#define RNG_ALARM_REG		0x24		/* Alarm register
+							[7:0] = ALARM_COUNTER */
+#define RNG_CONFIG_REG		0x28		/* Configuration register
+							[11:6] = RESET_COUNT
+							[5:3]  = RING2_DELAY
+							[2:0]  = RING1_DELAY */
+#define RNG_REV_REG		0x3c		/* Revision register
+							[7:0] = REV_NB */
+#define RNG_MASK_REG		0x40		/* Mask and reset register
+							[2] = IT_EN
+							[1] = SOFTRESET
+							[0] = AUTOIDLE */
+#define RNG_SYSSTATUS		0x44		/* System status
+							[0] = RESETDONE */
+
+static void __iomem *rng_base;
+static struct clk *rng_ick;
+static struct device *rng_dev;
+
+static u32 omap_rng_read_reg(int reg)
+{
+	return __raw_readl(rng_base + reg);
+}
+
+static void omap_rng_write_reg(int reg, u32 val)
+{
+	__raw_writel(val, rng_base + reg);
+}
+
+/* REVISIT: Does the status bit really work on 16xx? */
+static int omap_rng_data_present(struct hwrng *rng)
+{
+	return omap_rng_read_reg(RNG_STAT_REG) ? 0 : 1;
+}
+
+static int omap_rng_data_read(struct hwrng *rng, u32 *data)
+{
+	*data = omap_rng_read_reg(RNG_OUT_REG);
+
+	return 4;
+}
+
+static struct hwrng omap_rng_ops = {
+	.name		= "omap",
+	.data_present	= omap_rng_data_present,
+	.data_read	= omap_rng_data_read,
+};
+
+static int __init omap_rng_probe(struct device *dev)
+{
+	struct platform_device *pdev = to_platform_device(dev);
+	struct resource *res, *mem;
+	int ret;
+
+	/*
+	 * A bit ugly, and it will never actually happen but there can
+	 * be only one RNG and this catches any bork
+	 */
+	if (rng_dev)
+		BUG();
+
+    	if (cpu_is_omap24xx()) {
+		rng_ick = clk_get(NULL, "rng_ick");
+		if (IS_ERR(rng_ick)) {
+			dev_err(dev, "Could not get rng_ick\n");
+			ret = PTR_ERR(rng_ick);
+			return ret;
+		}
+		else {
+			clk_use(rng_ick);
+		}
+	}
+
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+
+	if (!res)
+		return -ENOENT;
+
+	mem = request_mem_region(res->start, res->end - res->start + 1,
+				 pdev->name);
+	if (mem == NULL)
+		return -EBUSY;
+
+	dev_set_drvdata(dev, mem);
+	rng_base = (u32 __iomem *)io_p2v(res->start);
+
+	ret = hwrng_register(&omap_rng_ops);
+	if (ret) {
+		release_resource(mem);
+		rng_base = NULL;
+		return ret;
+	}
+
+	dev_info(dev, "OMAP Random Number Generator ver. %02x\n",
+		omap_rng_read_reg(RNG_REV_REG));
+	omap_rng_write_reg(RNG_MASK_REG, 0x1);
+
+	rng_dev = dev;
+
+	return 0;
+}
+
+static int __exit omap_rng_remove(struct device *dev)
+{
+	struct resource *mem = dev_get_drvdata(dev);
+
+	hwrng_unregister(&omap_rng_ops);
+
+	omap_rng_write_reg(RNG_MASK_REG, 0x0);
+
+	if (cpu_is_omap24xx()) {
+		clk_unuse(rng_ick);
+		clk_put(rng_ick);
+	}
+
+	release_resource(mem);
+	rng_base = NULL;
+
+	return 0;
+}
+
+#ifdef CONFIG_PM
+
+static int omap_rng_suspend(struct device *dev, pm_message_t message, u32 level)
+{
+	omap_rng_write_reg(RNG_MASK_REG, 0x0);
+
+	return 0;
+}
+
+static int omap_rng_resume(struct device *dev, pm_message_t message, u32 level)
+{
+	omap_rng_write_reg(RNG_MASK_REG, 0x1);
+
+	return 1;
+}
+
+#else
+
+#define	omap_rng_suspend	NULL
+#define	omap_rng_resume		NULL
+
+#endif
+
+
+static struct device_driver omap_rng_driver = {
+	.name		= "omap_rng",
+	.bus		= &platform_bus_type,
+	.probe		= omap_rng_probe,
+	.remove		= __exit_p(omap_rng_remove),
+	.suspend	= omap_rng_suspend,
+	.resume		= omap_rng_resume
+};
+
+static int __init omap_rng_init(void)
+{
+	if (!cpu_is_omap16xx() && !cpu_is_omap24xx())
+		return -ENODEV;
+
+	return driver_register(&omap_rng_driver);
+}
+
+static void __exit omap_rng_exit(void)
+{
+	driver_unregister(&omap_rng_driver);
+}
+
+module_init(omap_rng_init);
+module_exit(omap_rng_exit);
+
+MODULE_AUTHOR("Deepak Saxena (and others)");
+MODULE_LICENSE("GPL");
diff -urNX linux-2.6.16-rc5-mm1/Documentation/dontdiff linux-2.6.16-rc5-mm1.orig/drivers/char/hw_random/x86-rng.c linux-2.6.16-rc5-mm1/drivers/char/hw_random/x86-rng.c
--- linux-2.6.16-rc5-mm1.orig/drivers/char/hw_random/x86-rng.c	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.16-rc5-mm1/drivers/char/hw_random/x86-rng.c	2006-03-01 14:14:11.000000000 +0100
@@ -0,0 +1,593 @@
+/*
+ * drivers/char/rng/x86.c
+ *
+ * RNG driver for Intel/AMD/VIA RNGs
+ *
+ * Copyright 2005 (c) MontaVista Software, Inc.
+ *
+ * with the majority of the code coming from:
+ *
+ * Hardware driver for the Intel/AMD/VIA Random Number Generators (RNG)
+ * (c) Copyright 2003 Red Hat Inc <jgarzik@redhat.com>
+ *
+ * derived from
+ *
+ * Hardware driver for the AMD 768 Random Number Generator (RNG)
+ * (c) Copyright 2001 Red Hat Inc <alan@redhat.com>
+ *
+ * derived from
+ *
+ * Hardware driver for Intel i810 Random Number Generator (RNG)
+ * Copyright 2000,2001 Jeff Garzik <jgarzik@pobox.com>
+ * Copyright 2000,2001 Philipp Rumpf <prumpf@mandrakesoft.com>
+ *
+ * This file is licensed under  the terms of the GNU General Public
+ * License version 2. This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/fs.h>
+#include <linux/init.h>
+#include <linux/pci.h>
+#include <linux/interrupt.h>
+#include <linux/spinlock.h>
+#include <linux/random.h>
+#include <linux/miscdevice.h>
+#include <linux/smp_lock.h>
+#include <linux/mm.h>
+#include <linux/delay.h>
+#include <linux/hw_random.h>
+
+#include <asm/msr.h>
+#include <asm/cpufeature.h>
+
+#include <asm/io.h>
+
+
+/*
+ * debugging macros
+ */
+
+/* pr_debug() collapses to a no-op if DEBUG is not defined */
+#define DPRINTK(fmt, args...) pr_debug(PFX "%s: " fmt, __FUNCTION__ , ## args)
+
+#define RNG_VERSION "1.1.0"
+#define RNG_MODULE_NAME "x86-rng"
+#define RNG_DRIVER_NAME RNG_MODULE_NAME " hardware driver " RNG_VERSION
+#define PFX RNG_MODULE_NAME ": "
+
+#undef RNG_NDEBUG        /* define to enable lightweight runtime checks */
+#ifdef RNG_NDEBUG
+#define assert(expr)							\
+		if(!(expr)) {						\
+		printk(KERN_DEBUG PFX "Assertion failed! %s,%s,%s,"	\
+		"line=%d\n", #expr, __FILE__, __FUNCTION__, __LINE__);	\
+		}
+#else
+#define assert(expr)
+#endif
+
+static struct hwrng *x86_rng_ops;
+
+static int __init intel_init (struct hwrng *rng);
+static void intel_cleanup(struct hwrng *rng);
+static int intel_data_present (struct hwrng *rng);
+static int intel_data_read (struct hwrng *rng, u32 *data);
+
+static int __init amd_init (struct hwrng *rng);
+static void amd_cleanup(struct hwrng *rng);
+static int amd_data_present (struct hwrng *rng);
+static int amd_data_read (struct hwrng *rng, u32 *data);
+
+#ifdef __i386__
+static int __init via_init(struct hwrng *rng);
+static void via_cleanup(struct hwrng *rng);
+static int via_data_present (struct hwrng *rng);
+static int via_data_read (struct hwrng *rng, u32 *data);
+#endif
+
+static int __init geode_init(struct hwrng *rng);
+static void geode_cleanup(struct hwrng *rng);
+static int geode_data_present (struct hwrng *rng);
+static int geode_data_read (struct hwrng *rng, u32 *data);
+
+enum {
+	rng_hw_none,
+	rng_hw_intel,
+	rng_hw_amd,
+#ifdef __i386__
+	rng_hw_via,
+#endif
+	rng_hw_geode,
+};
+
+static struct hwrng rng_vendor_ops[] = {
+	{ /* rng_hw_none */
+	}, { /* rng_hw_intel */
+		.name		= "intel",
+		.init		= intel_init,
+		.cleanup	= intel_cleanup,
+		.data_present	= intel_data_present,
+		.data_read	= intel_data_read,
+	}, { /* rng_hw_amd */
+		.name		= "amd",
+		.init		= amd_init,
+		.cleanup	= amd_cleanup,
+		.data_present	= amd_data_present,
+		.data_read	= amd_data_read,
+	},
+#ifdef __i386__
+	{ /* rng_hw_via */
+		.name		= "via",
+		.init		= via_init,
+		.cleanup	= via_cleanup,
+		.data_present	= via_data_present,
+		.data_read	= via_data_read,
+	},
+#endif
+	{ /* rng_hw_geode */
+		.name		= "geode",
+		.init		= geode_init,
+		.cleanup	= geode_cleanup,
+		.data_present	= geode_data_present,
+		.data_read	= geode_data_read,
+	},
+};
+
+/*
+ * Data for PCI driver interface
+ *
+ * This data only exists for exporting the supported
+ * PCI ids via MODULE_DEVICE_TABLE.  We do not actually
+ * register a pci_driver, because someone else might one day
+ * want to register another driver on the same PCI id.
+ */
+static struct pci_device_id rng_pci_tbl[] = {
+	{ 0x1022, 0x7443, PCI_ANY_ID, PCI_ANY_ID, 0, 0, rng_hw_amd },
+	{ 0x1022, 0x746b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, rng_hw_amd },
+
+	{ 0x8086, 0x2418, PCI_ANY_ID, PCI_ANY_ID, 0, 0, rng_hw_intel },
+	{ 0x8086, 0x2428, PCI_ANY_ID, PCI_ANY_ID, 0, 0, rng_hw_intel },
+	{ 0x8086, 0x2430, PCI_ANY_ID, PCI_ANY_ID, 0, 0, rng_hw_intel },
+	{ 0x8086, 0x2448, PCI_ANY_ID, PCI_ANY_ID, 0, 0, rng_hw_intel },
+	{ 0x8086, 0x244e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, rng_hw_intel },
+	{ 0x8086, 0x245e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, rng_hw_intel },
+
+	{ PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_LX_AES,
+	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, rng_hw_geode },
+
+	{ 0, },	/* terminate list */
+};
+MODULE_DEVICE_TABLE (pci, rng_pci_tbl);
+
+
+/***********************************************************************
+ *
+ * Intel RNG operations
+ *
+ */
+
+/*
+ * RNG registers (offsets from rng_mem)
+ */
+#define INTEL_RNG_HW_STATUS			0
+#define         INTEL_RNG_PRESENT		0x40
+#define         INTEL_RNG_ENABLED		0x01
+#define INTEL_RNG_STATUS			1
+#define         INTEL_RNG_DATA_PRESENT		0x01
+#define INTEL_RNG_DATA				2
+
+/*
+ * Magic address at which Intel PCI bridges locate the RNG
+ */
+#define INTEL_RNG_ADDR				0xFFBC015F
+#define INTEL_RNG_ADDR_LEN			3
+
+static inline u8 intel_hwstatus (void __iomem *rng_mem)
+{
+	assert (rng_mem != NULL);
+	return readb (rng_mem + INTEL_RNG_HW_STATUS);
+}
+
+static inline u8 intel_hwstatus_set (void __iomem *rng_mem, u8 hw_status)
+{
+	assert (rng_mem != NULL);
+	writeb (hw_status, rng_mem + INTEL_RNG_HW_STATUS);
+	return intel_hwstatus (rng_mem);
+}
+
+static int intel_data_present(struct hwrng *rng)
+{
+	void __iomem *rng_mem = (void __iomem *)rng->priv;
+
+	assert (rng_mem != NULL);
+	return (readb (rng_mem + INTEL_RNG_STATUS) & INTEL_RNG_DATA_PRESENT) ?
+		1 : 0;
+}
+
+static int intel_data_read(struct hwrng *rng, u32 *data)
+{
+	void __iomem *rng_mem = (void __iomem *)rng->priv;
+
+	assert (rng_mem != NULL);
+	*data = readb (rng_mem + INTEL_RNG_DATA);
+
+	return 1;
+}
+
+static int __init intel_init(struct hwrng *rng)
+{
+	void __iomem *rng_mem;
+	int rc;
+	u8 hw_status;
+
+	DPRINTK ("ENTER\n");
+
+	rng_mem = ioremap (INTEL_RNG_ADDR, INTEL_RNG_ADDR_LEN);
+	if (rng_mem == NULL) {
+		printk (KERN_ERR PFX "cannot ioremap RNG Memory\n");
+		rc = -EBUSY;
+		goto err_out;
+	}
+	rng->priv = (unsigned long)rng_mem;
+
+	/* Check for Intel 82802 */
+	hw_status = intel_hwstatus (rng_mem);
+	if ((hw_status & INTEL_RNG_PRESENT) == 0) {
+		printk (KERN_ERR PFX "RNG not detected\n");
+		rc = -ENODEV;
+		goto err_out_free_map;
+	}
+
+	/* turn RNG h/w on, if it's off */
+	if ((hw_status & INTEL_RNG_ENABLED) == 0)
+		hw_status = intel_hwstatus_set (rng_mem, hw_status | INTEL_RNG_ENABLED);
+	if ((hw_status & INTEL_RNG_ENABLED) == 0) {
+		printk (KERN_ERR PFX "cannot enable RNG, aborting\n");
+		rc = -EIO;
+		goto err_out_free_map;
+	}
+
+	DPRINTK ("EXIT, returning 0\n");
+	return 0;
+
+err_out_free_map:
+	iounmap (rng_mem);
+err_out:
+	DPRINTK ("EXIT, returning %d\n", rc);
+	return rc;
+}
+
+static void intel_cleanup(struct hwrng *rng)
+{
+	void __iomem *rng_mem = (void __iomem *)rng->priv;
+	u8 hw_status;
+
+	hw_status = intel_hwstatus (rng_mem);
+	if (hw_status & INTEL_RNG_ENABLED)
+		intel_hwstatus_set (rng_mem, hw_status & ~INTEL_RNG_ENABLED);
+	else
+		printk(KERN_WARNING PFX "unusual: RNG already disabled\n");
+	iounmap(rng_mem);
+}
+
+/***********************************************************************
+ *
+ * AMD RNG operations
+ *
+ */
+
+static struct pci_dev *amd_pdev;
+
+static int amd_data_present (struct hwrng *rng)
+{
+	u32 pmbase = (u32)rng->priv;
+
+      	return !!(inl(pmbase + 0xF4) & 1);
+}
+
+
+static int amd_data_read (struct hwrng *rng, u32 *data)
+{
+	u32 pmbase = (u32)rng->priv;
+
+	*data = inl(pmbase + 0xF0);
+
+	return 4;
+}
+
+static int __init amd_init(struct hwrng *rng)
+{
+	u32 pmbase;
+	int rc;
+	u8 rnen;
+
+	DPRINTK ("ENTER\n");
+
+	amd_pdev = (struct pci_dev *)rng->priv;
+	pci_read_config_dword(amd_pdev, 0x58, &pmbase);
+
+	pmbase &= 0x0000FF00;
+
+	if (pmbase == 0)
+	{
+		printk (KERN_ERR PFX "power management base not set\n");
+		rc = -EIO;
+		goto err_out;
+	}
+	rng->priv = (unsigned long)pmbase;
+
+	pci_read_config_byte(amd_pdev, 0x40, &rnen);
+	rnen |= (1 << 7);	/* RNG on */
+	pci_write_config_byte(amd_pdev, 0x40, rnen);
+
+	pci_read_config_byte(amd_pdev, 0x41, &rnen);
+	rnen |= (1 << 7);	/* PMIO enable */
+	pci_write_config_byte(amd_pdev, 0x41, rnen);
+
+	pr_info( PFX "AMD768 system management I/O registers at 0x%X.\n",
+			pmbase);
+
+	DPRINTK ("EXIT, returning 0\n");
+	return 0;
+
+err_out:
+	DPRINTK ("EXIT, returning %d\n", rc);
+	return rc;
+}
+
+static void amd_cleanup(struct hwrng *rng)
+{
+	u8 rnen;
+
+	pci_read_config_byte(amd_pdev, 0x40, &rnen);
+	rnen &= ~(1 << 7);	/* RNG off */
+	pci_write_config_byte(amd_pdev, 0x40, rnen);
+	amd_pdev = NULL;
+
+	/* FIXME: twiddle pmio, also? */
+}
+
+#ifdef __i386__
+/***********************************************************************
+ *
+ * VIA RNG operations
+ *
+ */
+
+enum {
+	VIA_STRFILT_CNT_SHIFT	= 16,
+	VIA_STRFILT_FAIL	= (1 << 15),
+	VIA_STRFILT_ENABLE	= (1 << 14),
+	VIA_RAWBITS_ENABLE	= (1 << 13),
+	VIA_RNG_ENABLE		= (1 << 6),
+	VIA_XSTORE_CNT_MASK	= 0x0F,
+
+	VIA_RNG_CHUNK_8		= 0x00,	/* 64 rand bits, 64 stored bits */
+	VIA_RNG_CHUNK_4		= 0x01,	/* 32 rand bits, 32 stored bits */
+	VIA_RNG_CHUNK_4_MASK	= 0xFFFFFFFF,
+	VIA_RNG_CHUNK_2		= 0x02,	/* 16 rand bits, 32 stored bits */
+	VIA_RNG_CHUNK_2_MASK	= 0xFFFF,
+	VIA_RNG_CHUNK_1		= 0x03,	/* 8 rand bits, 32 stored bits */
+	VIA_RNG_CHUNK_1_MASK	= 0xFF,
+};
+
+/*
+ * Investigate using the 'rep' prefix to obtain 32 bits of random data
+ * in one insn.  The upside is potentially better performance.  The
+ * downside is that the instruction becomes no longer atomic.  Due to
+ * this, just like familiar issues with /dev/random itself, the worst
+ * case of a 'rep xstore' could potentially pause a cpu for an
+ * unreasonably long time.  In practice, this condition would likely
+ * only occur when the hardware is failing.  (or so we hope :))
+ *
+ * Another possible performance boost may come from simply buffering
+ * until we have 4 bytes, thus returning a u32 at a time,
+ * instead of the current u8-at-a-time.
+ */
+
+static inline u32 xstore(u32 *addr, u32 edx_in)
+{
+	u32 eax_out;
+
+	asm(".byte 0x0F,0xA7,0xC0 /* xstore %%edi (addr=%0) */"
+		:"=m"(*addr), "=a"(eax_out)
+		:"D"(addr), "d"(edx_in));
+
+	return eax_out;
+}
+
+static int via_data_present(struct hwrng *rng)
+{
+	u32 bytes_out;
+	u32 *via_rng_datum = (u32 *)(&rng->priv);
+
+	/* We choose the recommended 1-byte-per-instruction RNG rate,
+	 * for greater randomness at the expense of speed.  Larger
+	 * values 2, 4, or 8 bytes-per-instruction yield greater
+	 * speed at lesser randomness.
+	 *
+	 * If you change this to another VIA_CHUNK_n, you must also
+	 * change the ->n_bytes values in rng_vendor_ops[] tables.
+	 * VIA_CHUNK_8 requires further code changes.
+	 *
+	 * A copy of MSR_VIA_RNG is placed in eax_out when xstore
+	 * completes.
+	 */
+
+	*via_rng_datum = 0; /* paranoia, not really necessary */
+	bytes_out = xstore(via_rng_datum, VIA_RNG_CHUNK_1) & VIA_XSTORE_CNT_MASK;
+	if (bytes_out == 0)
+		return 0;
+
+	return 1;
+}
+
+static int via_data_read(struct hwrng *rng, u32 *data)
+{
+	u32 via_rng_datum = (u32)rng->priv;
+
+	*data = via_rng_datum;
+
+	return 1;
+}
+
+static int __init via_init(struct hwrng *rng)
+{
+	u32 lo, hi, old_lo;
+
+	/* Control the RNG via MSR.  Tread lightly and pay very close
+	 * close attention to values written, as the reserved fields
+	 * are documented to be "undefined and unpredictable"; but it
+	 * does not say to write them as zero, so I make a guess that
+	 * we restore the values we find in the register.
+	 */
+	rdmsr(MSR_VIA_RNG, lo, hi);
+
+	old_lo = lo;
+	lo &= ~(0x7f << VIA_STRFILT_CNT_SHIFT);
+	lo &= ~VIA_XSTORE_CNT_MASK;
+	lo &= ~(VIA_STRFILT_ENABLE | VIA_STRFILT_FAIL | VIA_RAWBITS_ENABLE);
+	lo |= VIA_RNG_ENABLE;
+
+	if (lo != old_lo)
+		wrmsr(MSR_VIA_RNG, lo, hi);
+
+	/* perhaps-unnecessary sanity check; remove after testing if
+	   unneeded */
+	rdmsr(MSR_VIA_RNG, lo, hi);
+	if ((lo & VIA_RNG_ENABLE) == 0) {
+		printk(KERN_ERR PFX "cannot enable VIA C3 RNG, aborting\n");
+		return -ENODEV;
+	}
+
+	return 0;
+}
+
+static void via_cleanup(struct hwrng *rng)
+{
+	/* do nothing */
+}
+#endif
+
+/***********************************************************************
+ *
+ * AMD Geode RNG operations
+ *
+ */
+
+#define GEODE_RNG_DATA_REG   0x50
+#define GEODE_RNG_STATUS_REG 0x54
+
+static int geode_data_read(struct hwrng *rng, u32 *data)
+{
+	void __iomem *geode_rng_base = (void __iomem *)rng->priv;
+
+	assert(geode_rng_base != NULL);
+	*data = readl(geode_rng_base + GEODE_RNG_DATA_REG);
+
+	return 4;
+}
+
+static int geode_data_present(struct hwrng *rng)
+{
+	void __iomem *geode_rng_base = (void __iomem *)rng->priv;
+	u32 val;
+
+	assert(geode_rng_base != NULL);
+	val = readl(geode_rng_base + GEODE_RNG_STATUS_REG);
+
+	return !!val;
+}
+
+static void geode_cleanup(struct hwrng *rng)
+{
+	void __iomem *geode_rng_base = (void __iomem *)rng->priv;
+
+	iounmap(geode_rng_base);
+  	geode_rng_base = NULL;
+}
+
+static int geode_init(struct hwrng *rng)
+{
+	void __iomem *geode_rng_base;
+	struct pci_dev *dev = (struct pci_dev *)rng->priv;
+	unsigned long rng_base = pci_resource_start(dev, 0);
+
+	if (rng_base == 0)
+		return 1;
+
+	geode_rng_base = ioremap(rng_base, 0x58);
+
+	if (geode_rng_base == NULL) {
+		printk(KERN_ERR PFX "Cannot ioremap RNG memory\n");
+		return -EBUSY;
+	}
+	rng->priv = (unsigned long)geode_rng_base;
+
+	return 0;
+}
+
+
+/*
+ * rng_init - initialize RNG module
+ */
+static int __init x86_rng_init(void)
+{
+	int rc;
+	struct pci_dev *pdev = NULL;
+	const struct pci_device_id *ent;
+
+	DPRINTK ("ENTER\n");
+
+	/* Probe for Intel, AMD RNGs */
+	for_each_pci_dev(pdev) {
+		ent = pci_match_id(rng_pci_tbl, pdev);
+		if (ent) {
+			x86_rng_ops = &rng_vendor_ops[ent->driver_data];
+			goto match;
+		}
+	}
+
+	/* Probe for VIA RNG */
+	if (cpu_has_xstore) {
+		x86_rng_ops = &rng_vendor_ops[rng_hw_via];
+		pdev = NULL;
+		goto match;
+	}
+
+	DPRINTK ("EXIT, returning -ENODEV\n");
+	return -ENODEV;
+
+match:
+	x86_rng_ops->priv = (unsigned long)pdev;
+	rc = hwrng_register(x86_rng_ops);
+	if (rc)
+		return rc;
+
+	pr_info( RNG_DRIVER_NAME " loaded\n");
+
+	DPRINTK ("EXIT, returning 0\n");
+	return 0;
+}
+
+/*
+ * rng_init - shutdown RNG module
+ */
+static void __exit x86_rng_exit (void)
+{
+	DPRINTK ("ENTER\n");
+
+	hwrng_unregister(x86_rng_ops);
+
+	DPRINTK ("EXIT\n");
+}
+
+subsys_initcall(x86_rng_init);
+module_exit(x86_rng_exit);
+
+MODULE_AUTHOR("The Linux Kernel team");
+MODULE_DESCRIPTION("H/W RNG driver for Intel/AMD/VIA chipsets");
+MODULE_LICENSE("GPL");
diff -urNX linux-2.6.16-rc5-mm1/Documentation/dontdiff linux-2.6.16-rc5-mm1.orig/drivers/char/hw_random.c linux-2.6.16-rc5-mm1/drivers/char/hw_random.c
--- linux-2.6.16-rc5-mm1.orig/drivers/char/hw_random.c	2006-03-01 13:18:58.000000000 +0100
+++ linux-2.6.16-rc5-mm1/drivers/char/hw_random.c	1970-01-01 01:00:00.000000000 +0100
@@ -1,698 +0,0 @@
-/*
-        Added support for the AMD Geode LX RNG
-	(c) Copyright 2004-2005 Advanced Micro Devices, Inc.
-
-	derived from
-
- 	Hardware driver for the Intel/AMD/VIA Random Number Generators (RNG)
-	(c) Copyright 2003 Red Hat Inc <jgarzik@redhat.com>
- 
- 	derived from
- 
-        Hardware driver for the AMD 768 Random Number Generator (RNG)
-        (c) Copyright 2001 Red Hat Inc <alan@redhat.com>
-
- 	derived from
- 
-	Hardware driver for Intel i810 Random Number Generator (RNG)
-	Copyright 2000,2001 Jeff Garzik <jgarzik@pobox.com>
-	Copyright 2000,2001 Philipp Rumpf <prumpf@mandrakesoft.com>
-
-	Please read Documentation/hw_random.txt for details on use.
-
-	----------------------------------------------------------
-	This software may be used and distributed according to the terms
-        of the GNU General Public License, incorporated herein by reference.
-
- */
-
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/fs.h>
-#include <linux/init.h>
-#include <linux/pci.h>
-#include <linux/interrupt.h>
-#include <linux/spinlock.h>
-#include <linux/random.h>
-#include <linux/miscdevice.h>
-#include <linux/smp_lock.h>
-#include <linux/mm.h>
-#include <linux/delay.h>
-
-#ifdef __i386__
-#include <asm/msr.h>
-#include <asm/cpufeature.h>
-#endif
-
-#include <asm/io.h>
-#include <asm/uaccess.h>
-
-
-/*
- * core module and version information
- */
-#define RNG_VERSION "1.0.0"
-#define RNG_MODULE_NAME "hw_random"
-#define RNG_DRIVER_NAME   RNG_MODULE_NAME " hardware driver " RNG_VERSION
-#define PFX RNG_MODULE_NAME ": "
-
-
-/*
- * debugging macros
- */
-
-/* pr_debug() collapses to a no-op if DEBUG is not defined */
-#define DPRINTK(fmt, args...) pr_debug(PFX "%s: " fmt, __FUNCTION__ , ## args)
-
-
-#undef RNG_NDEBUG        /* define to enable lightweight runtime checks */
-#ifdef RNG_NDEBUG
-#define assert(expr)							\
-		if(!(expr)) {						\
-		printk(KERN_DEBUG PFX "Assertion failed! %s,%s,%s,"	\
-		"line=%d\n", #expr, __FILE__, __FUNCTION__, __LINE__);	\
-		}
-#else
-#define assert(expr)
-#endif
-
-#define RNG_MISCDEV_MINOR		183 /* official */
-
-static int rng_dev_open (struct inode *inode, struct file *filp);
-static ssize_t rng_dev_read (struct file *filp, char __user *buf, size_t size,
-				loff_t * offp);
-
-static int __init intel_init (struct pci_dev *dev);
-static void intel_cleanup(void);
-static unsigned int intel_data_present (void);
-static u32 intel_data_read (void);
-
-static int __init amd_init (struct pci_dev *dev);
-static void amd_cleanup(void);
-static unsigned int amd_data_present (void);
-static u32 amd_data_read (void);
-
-#ifdef __i386__
-static int __init via_init(struct pci_dev *dev);
-static void via_cleanup(void);
-static unsigned int via_data_present (void);
-static u32 via_data_read (void);
-#endif
-
-static int __init geode_init(struct pci_dev *dev);
-static void geode_cleanup(void);
-static unsigned int geode_data_present (void);
-static u32 geode_data_read (void);
-
-struct rng_operations {
-	int (*init) (struct pci_dev *dev);
-	void (*cleanup) (void);
-	unsigned int (*data_present) (void);
-	u32 (*data_read) (void);
-	unsigned int n_bytes; /* number of bytes per ->data_read */
-};
-static struct rng_operations *rng_ops;
-
-static struct file_operations rng_chrdev_ops = {
-	.owner		= THIS_MODULE,
-	.open		= rng_dev_open,
-	.read		= rng_dev_read,
-};
-
-
-static struct miscdevice rng_miscdev = {
-	RNG_MISCDEV_MINOR,
-	RNG_MODULE_NAME,
-	&rng_chrdev_ops,
-};
-
-enum {
-	rng_hw_none,
-	rng_hw_intel,
-	rng_hw_amd,
-#ifdef __i386__
-	rng_hw_via,
-#endif
-	rng_hw_geode,
-};
-
-static struct rng_operations rng_vendor_ops[] = {
-	/* rng_hw_none */
-	{ },
-
-	/* rng_hw_intel */
-	{ intel_init, intel_cleanup, intel_data_present,
-	  intel_data_read, 1 },
-
-	/* rng_hw_amd */
-	{ amd_init, amd_cleanup, amd_data_present, amd_data_read, 4 },
-
-#ifdef __i386__
-	/* rng_hw_via */
-	{ via_init, via_cleanup, via_data_present, via_data_read, 1 },
-#endif
-
-	/* rng_hw_geode */
-	{ geode_init, geode_cleanup, geode_data_present, geode_data_read, 4 }
-};
-
-/*
- * Data for PCI driver interface
- *
- * This data only exists for exporting the supported
- * PCI ids via MODULE_DEVICE_TABLE.  We do not actually
- * register a pci_driver, because someone else might one day
- * want to register another driver on the same PCI id.
- */
-static struct pci_device_id rng_pci_tbl[] = {
-	{ 0x1022, 0x7443, PCI_ANY_ID, PCI_ANY_ID, 0, 0, rng_hw_amd },
-	{ 0x1022, 0x746b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, rng_hw_amd },
-
-	{ 0x8086, 0x2418, PCI_ANY_ID, PCI_ANY_ID, 0, 0, rng_hw_intel },
-	{ 0x8086, 0x2428, PCI_ANY_ID, PCI_ANY_ID, 0, 0, rng_hw_intel },
-	{ 0x8086, 0x2430, PCI_ANY_ID, PCI_ANY_ID, 0, 0, rng_hw_intel },
-	{ 0x8086, 0x2448, PCI_ANY_ID, PCI_ANY_ID, 0, 0, rng_hw_intel },
-	{ 0x8086, 0x244e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, rng_hw_intel },
-	{ 0x8086, 0x245e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, rng_hw_intel },
-
-	{ PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_LX_AES,
-	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, rng_hw_geode },
-
-	{ 0, },	/* terminate list */
-};
-MODULE_DEVICE_TABLE (pci, rng_pci_tbl);
-
-
-/***********************************************************************
- *
- * Intel RNG operations
- *
- */
-
-/*
- * RNG registers (offsets from rng_mem)
- */
-#define INTEL_RNG_HW_STATUS			0
-#define         INTEL_RNG_PRESENT		0x40
-#define         INTEL_RNG_ENABLED		0x01
-#define INTEL_RNG_STATUS			1
-#define         INTEL_RNG_DATA_PRESENT		0x01
-#define INTEL_RNG_DATA				2
-
-/*
- * Magic address at which Intel PCI bridges locate the RNG
- */
-#define INTEL_RNG_ADDR				0xFFBC015F
-#define INTEL_RNG_ADDR_LEN			3
-
-/* token to our ioremap'd RNG register area */
-static void __iomem *rng_mem;
-
-static inline u8 intel_hwstatus (void)
-{
-	assert (rng_mem != NULL);
-	return readb (rng_mem + INTEL_RNG_HW_STATUS);
-}
-
-static inline u8 intel_hwstatus_set (u8 hw_status)
-{
-	assert (rng_mem != NULL);
-	writeb (hw_status, rng_mem + INTEL_RNG_HW_STATUS);
-	return intel_hwstatus ();
-}
-
-static unsigned int intel_data_present(void)
-{
-	assert (rng_mem != NULL);
-
-	return (readb (rng_mem + INTEL_RNG_STATUS) & INTEL_RNG_DATA_PRESENT) ?
-		1 : 0;
-}
-
-static u32 intel_data_read(void)
-{
-	assert (rng_mem != NULL);
-
-	return readb (rng_mem + INTEL_RNG_DATA);
-}
-
-static int __init intel_init (struct pci_dev *dev)
-{
-	int rc;
-	u8 hw_status;
-
-	DPRINTK ("ENTER\n");
-
-	rng_mem = ioremap (INTEL_RNG_ADDR, INTEL_RNG_ADDR_LEN);
-	if (rng_mem == NULL) {
-		printk (KERN_ERR PFX "cannot ioremap RNG Memory\n");
-		rc = -EBUSY;
-		goto err_out;
-	}
-
-	/* Check for Intel 82802 */
-	hw_status = intel_hwstatus ();
-	if ((hw_status & INTEL_RNG_PRESENT) == 0) {
-		printk (KERN_ERR PFX "RNG not detected\n");
-		rc = -ENODEV;
-		goto err_out_free_map;
-	}
-
-	/* turn RNG h/w on, if it's off */
-	if ((hw_status & INTEL_RNG_ENABLED) == 0)
-		hw_status = intel_hwstatus_set (hw_status | INTEL_RNG_ENABLED);
-	if ((hw_status & INTEL_RNG_ENABLED) == 0) {
-		printk (KERN_ERR PFX "cannot enable RNG, aborting\n");
-		rc = -EIO;
-		goto err_out_free_map;
-	}
-
-	DPRINTK ("EXIT, returning 0\n");
-	return 0;
-
-err_out_free_map:
-	iounmap (rng_mem);
-	rng_mem = NULL;
-err_out:
-	DPRINTK ("EXIT, returning %d\n", rc);
-	return rc;
-}
-
-static void intel_cleanup(void)
-{
-	u8 hw_status;
-
-	hw_status = intel_hwstatus ();
-	if (hw_status & INTEL_RNG_ENABLED)
-		intel_hwstatus_set (hw_status & ~INTEL_RNG_ENABLED);
-	else
-		printk(KERN_WARNING PFX "unusual: RNG already disabled\n");
-	iounmap(rng_mem);
-	rng_mem = NULL;
-}
-
-/***********************************************************************
- *
- * AMD RNG operations
- *
- */
-
-static u32 pmbase;			/* PMxx I/O base */
-static struct pci_dev *amd_dev;
-
-static unsigned int amd_data_present (void)
-{
-      	return inl(pmbase + 0xF4) & 1;
-}
-
-
-static u32 amd_data_read (void)
-{
-	return inl(pmbase + 0xF0);
-}
-
-static int __init amd_init (struct pci_dev *dev)
-{
-	int rc;
-	u8 rnen;
-
-	DPRINTK ("ENTER\n");
-
-	pci_read_config_dword(dev, 0x58, &pmbase);
-
-	pmbase &= 0x0000FF00;
-
-	if (pmbase == 0)
-	{
-		printk (KERN_ERR PFX "power management base not set\n");
-		rc = -EIO;
-		goto err_out;
-	}
-
-	pci_read_config_byte(dev, 0x40, &rnen);
-	rnen |= (1 << 7);	/* RNG on */
-	pci_write_config_byte(dev, 0x40, rnen);
-
-	pci_read_config_byte(dev, 0x41, &rnen);
-	rnen |= (1 << 7);	/* PMIO enable */
-	pci_write_config_byte(dev, 0x41, rnen);
-
-	pr_info( PFX "AMD768 system management I/O registers at 0x%X.\n",
-			pmbase);
-
-	amd_dev = dev;
-
-	DPRINTK ("EXIT, returning 0\n");
-	return 0;
-
-err_out:
-	DPRINTK ("EXIT, returning %d\n", rc);
-	return rc;
-}
-
-static void amd_cleanup(void)
-{
-	u8 rnen;
-
-	pci_read_config_byte(amd_dev, 0x40, &rnen);
-	rnen &= ~(1 << 7);	/* RNG off */
-	pci_write_config_byte(amd_dev, 0x40, rnen);
-
-	/* FIXME: twiddle pmio, also? */
-}
-
-#ifdef __i386__
-/***********************************************************************
- *
- * VIA RNG operations
- *
- */
-
-enum {
-	VIA_STRFILT_CNT_SHIFT	= 16,
-	VIA_STRFILT_FAIL	= (1 << 15),
-	VIA_STRFILT_ENABLE	= (1 << 14),
-	VIA_RAWBITS_ENABLE	= (1 << 13),
-	VIA_RNG_ENABLE		= (1 << 6),
-	VIA_XSTORE_CNT_MASK	= 0x0F,
-
-	VIA_RNG_CHUNK_8		= 0x00,	/* 64 rand bits, 64 stored bits */
-	VIA_RNG_CHUNK_4		= 0x01,	/* 32 rand bits, 32 stored bits */
-	VIA_RNG_CHUNK_4_MASK	= 0xFFFFFFFF,
-	VIA_RNG_CHUNK_2		= 0x02,	/* 16 rand bits, 32 stored bits */
-	VIA_RNG_CHUNK_2_MASK	= 0xFFFF,
-	VIA_RNG_CHUNK_1		= 0x03,	/* 8 rand bits, 32 stored bits */
-	VIA_RNG_CHUNK_1_MASK	= 0xFF,
-};
-
-static u32 via_rng_datum;
-
-/*
- * Investigate using the 'rep' prefix to obtain 32 bits of random data
- * in one insn.  The upside is potentially better performance.  The
- * downside is that the instruction becomes no longer atomic.  Due to
- * this, just like familiar issues with /dev/random itself, the worst
- * case of a 'rep xstore' could potentially pause a cpu for an
- * unreasonably long time.  In practice, this condition would likely
- * only occur when the hardware is failing.  (or so we hope :))
- *
- * Another possible performance boost may come from simply buffering
- * until we have 4 bytes, thus returning a u32 at a time,
- * instead of the current u8-at-a-time.
- */
-
-static inline u32 xstore(u32 *addr, u32 edx_in)
-{
-	u32 eax_out;
-
-	asm(".byte 0x0F,0xA7,0xC0 /* xstore %%edi (addr=%0) */"
-		:"=m"(*addr), "=a"(eax_out)
-		:"D"(addr), "d"(edx_in));
-
-	return eax_out;
-}
-
-static unsigned int via_data_present(void)
-{
-	u32 bytes_out;
-
-	/* We choose the recommended 1-byte-per-instruction RNG rate,
-	 * for greater randomness at the expense of speed.  Larger
-	 * values 2, 4, or 8 bytes-per-instruction yield greater
-	 * speed at lesser randomness.
-	 *
-	 * If you change this to another VIA_CHUNK_n, you must also
-	 * change the ->n_bytes values in rng_vendor_ops[] tables.
-	 * VIA_CHUNK_8 requires further code changes.
-	 *
-	 * A copy of MSR_VIA_RNG is placed in eax_out when xstore
-	 * completes.
-	 */
-	via_rng_datum = 0; /* paranoia, not really necessary */
-	bytes_out = xstore(&via_rng_datum, VIA_RNG_CHUNK_1) & VIA_XSTORE_CNT_MASK;
-	if (bytes_out == 0)
-		return 0;
-
-	return 1;
-}
-
-static u32 via_data_read(void)
-{
-	return via_rng_datum;
-}
-
-static int __init via_init(struct pci_dev *dev)
-{
-	u32 lo, hi, old_lo;
-
-	/* Control the RNG via MSR.  Tread lightly and pay very close
-	 * close attention to values written, as the reserved fields
-	 * are documented to be "undefined and unpredictable"; but it
-	 * does not say to write them as zero, so I make a guess that
-	 * we restore the values we find in the register.
-	 */
-	rdmsr(MSR_VIA_RNG, lo, hi);
-
-	old_lo = lo;
-	lo &= ~(0x7f << VIA_STRFILT_CNT_SHIFT);
-	lo &= ~VIA_XSTORE_CNT_MASK;
-	lo &= ~(VIA_STRFILT_ENABLE | VIA_STRFILT_FAIL | VIA_RAWBITS_ENABLE);
-	lo |= VIA_RNG_ENABLE;
-
-	if (lo != old_lo)
-		wrmsr(MSR_VIA_RNG, lo, hi);
-
-	/* perhaps-unnecessary sanity check; remove after testing if
-	   unneeded */
-	rdmsr(MSR_VIA_RNG, lo, hi);
-	if ((lo & VIA_RNG_ENABLE) == 0) {
-		printk(KERN_ERR PFX "cannot enable VIA C3 RNG, aborting\n");
-		return -ENODEV;
-	}
-
-	return 0;
-}
-
-static void via_cleanup(void)
-{
-	/* do nothing */
-}
-#endif
-
-/***********************************************************************
- *
- * AMD Geode RNG operations
- *
- */
-
-static void __iomem *geode_rng_base = NULL;
-
-#define GEODE_RNG_DATA_REG   0x50
-#define GEODE_RNG_STATUS_REG 0x54
-
-static u32 geode_data_read(void)
-{
-	u32 val;
-
-	assert(geode_rng_base != NULL);
-	val = readl(geode_rng_base + GEODE_RNG_DATA_REG);
-	return val;
-}
-
-static unsigned int geode_data_present(void)
-{
-	u32 val;
-
-	assert(geode_rng_base != NULL);
-	val = readl(geode_rng_base + GEODE_RNG_STATUS_REG);
-	return val;
-}
-
-static void geode_cleanup(void)
-{
-	iounmap(geode_rng_base);
-  	geode_rng_base = NULL;
-}
-
-static int geode_init(struct pci_dev *dev)
-{
-	unsigned long rng_base = pci_resource_start(dev, 0);
-
-	if (rng_base == 0)
-		return 1;
-
-	geode_rng_base = ioremap(rng_base, 0x58);
-
-	if (geode_rng_base == NULL) {
-		printk(KERN_ERR PFX "Cannot ioremap RNG memory\n");
-		return -EBUSY;
-	}
-
-	return 0;
-}
-
-/***********************************************************************
- *
- * /dev/hwrandom character device handling (major 10, minor 183)
- *
- */
-
-static int rng_dev_open (struct inode *inode, struct file *filp)
-{
-	/* enforce read-only access to this chrdev */
-	if ((filp->f_mode & FMODE_READ) == 0)
-		return -EINVAL;
-	if (filp->f_mode & FMODE_WRITE)
-		return -EINVAL;
-
-	return 0;
-}
-
-
-static ssize_t rng_dev_read (struct file *filp, char __user *buf, size_t size,
-				loff_t * offp)
-{
-	static DEFINE_SPINLOCK(rng_lock);
-	unsigned int have_data;
-	u32 data = 0;
-	ssize_t ret = 0;
-
-	while (size) {
-		spin_lock(&rng_lock);
-
-		have_data = 0;
-		if (rng_ops->data_present()) {
-			data = rng_ops->data_read();
-			have_data = rng_ops->n_bytes;
-		}
-
-		spin_unlock (&rng_lock);
-
-		while (have_data && size) {
-			if (put_user((u8)data, buf++)) {
-				ret = ret ? : -EFAULT;
-				break;
-			}
-			size--;
-			ret++;
-			have_data--;
-			data>>=8;
-		}
-
-		if (filp->f_flags & O_NONBLOCK)
-			return ret ? : -EAGAIN;
-
-		if(need_resched())
-			schedule_timeout_interruptible(1);
-		else
-			udelay(200);	/* FIXME: We could poll for 250uS ?? */
-
-		if (signal_pending (current))
-			return ret ? : -ERESTARTSYS;
-	}
-	return ret;
-}
-
-
-
-/*
- * rng_init_one - look for and attempt to init a single RNG
- */
-static int __init rng_init_one (struct pci_dev *dev)
-{
-	int rc;
-
-	DPRINTK ("ENTER\n");
-
-	assert(rng_ops != NULL);
-
-	rc = rng_ops->init(dev);
-	if (rc)
-		goto err_out;
-
-	rc = misc_register (&rng_miscdev);
-	if (rc) {
-		printk (KERN_ERR PFX "misc device register failed\n");
-		goto err_out_cleanup_hw;
-	}
-
-	DPRINTK ("EXIT, returning 0\n");
-	return 0;
-
-err_out_cleanup_hw:
-	rng_ops->cleanup();
-err_out:
-	DPRINTK ("EXIT, returning %d\n", rc);
-	return rc;
-}
-
-
-
-MODULE_AUTHOR("The Linux Kernel team");
-MODULE_DESCRIPTION("H/W Random Number Generator (RNG) driver");
-MODULE_LICENSE("GPL");
-
-
-/*
- * rng_init - initialize RNG module
- */
-static int __init rng_init (void)
-{
-	int rc;
-	struct pci_dev *pdev = NULL;
-	const struct pci_device_id *ent;
-
-	DPRINTK ("ENTER\n");
-
-	/* Probe for Intel, AMD, Geode RNGs */
-	for_each_pci_dev(pdev) {
-		ent = pci_match_id(rng_pci_tbl, pdev);
-		if (ent) {
-			rng_ops = &rng_vendor_ops[ent->driver_data];
-			goto match;
-		}
-	}
-
-#ifdef __i386__
-	/* Probe for VIA RNG */
-	if (cpu_has_xstore) {
-		rng_ops = &rng_vendor_ops[rng_hw_via];
-		pdev = NULL;
-		goto match;
-	}
-#endif
-
-	DPRINTK ("EXIT, returning -ENODEV\n");
-	return -ENODEV;
-
-match:
-	rc = rng_init_one (pdev);
-	if (rc)
-		return rc;
-
-	pr_info( RNG_DRIVER_NAME " loaded\n");
-
-	DPRINTK ("EXIT, returning 0\n");
-	return 0;
-}
-
-
-/*
- * rng_init - shutdown RNG module
- */
-static void __exit rng_cleanup (void)
-{
-	DPRINTK ("ENTER\n");
-
-	misc_deregister (&rng_miscdev);
-
-	if (rng_ops->cleanup)
-		rng_ops->cleanup();
-
-	DPRINTK ("EXIT\n");
-}
-
-
-module_init (rng_init);
-module_exit (rng_cleanup);
diff -urNX linux-2.6.16-rc5-mm1/Documentation/dontdiff linux-2.6.16-rc5-mm1.orig/drivers/char/Kconfig linux-2.6.16-rc5-mm1/drivers/char/Kconfig
--- linux-2.6.16-rc5-mm1.orig/drivers/char/Kconfig	2006-03-01 13:18:58.000000000 +0100
+++ linux-2.6.16-rc5-mm1/drivers/char/Kconfig	2006-03-01 13:48:16.000000000 +0100
@@ -652,20 +652,7 @@
 
 	  If you're not sure, say N.
 
-config HW_RANDOM
-	tristate "Intel/AMD/VIA HW Random Number Generator support"
-	depends on (X86 || IA64) && PCI
-	---help---
-	  This driver provides kernel-side support for the Random Number
-	  Generator hardware found on Intel i8xx-based motherboards,
-	  AMD 76x-based motherboards, and Via Nehemiah CPUs.
-
-	  Provides a character driver, used to read() entropy data.
-
-	  To compile this driver as a module, choose M here: the
-	  module will be called hw_random.
-
-	  If unsure, say N.
+source "drivers/char/hw_random/Kconfig"
 
 config NVRAM
 	tristate "/dev/nvram support"
diff -urNX linux-2.6.16-rc5-mm1/Documentation/dontdiff linux-2.6.16-rc5-mm1.orig/drivers/char/Makefile linux-2.6.16-rc5-mm1/drivers/char/Makefile
--- linux-2.6.16-rc5-mm1.orig/drivers/char/Makefile	2006-03-01 13:18:57.000000000 +0100
+++ linux-2.6.16-rc5-mm1/drivers/char/Makefile	2006-03-01 13:27:47.000000000 +0100
@@ -74,7 +74,7 @@
 obj-$(CONFIG_TOSHIBA) += toshiba.o
 obj-$(CONFIG_I8K) += i8k.o
 obj-$(CONFIG_DS1620) += ds1620.o
-obj-$(CONFIG_HW_RANDOM) += hw_random.o
+obj-$(CONFIG_HW_RANDOM) += hw_random/
 obj-$(CONFIG_FTAPE) += ftape/
 obj-$(CONFIG_COBALT_LCD) += lcd.o
 obj-$(CONFIG_PPDEV) += ppdev.o
diff -urNX linux-2.6.16-rc5-mm1/Documentation/dontdiff linux-2.6.16-rc5-mm1.orig/include/linux/hw_random.h linux-2.6.16-rc5-mm1/include/linux/hw_random.h
--- linux-2.6.16-rc5-mm1.orig/include/linux/hw_random.h	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.16-rc5-mm1/include/linux/hw_random.h	2006-03-01 14:12:54.000000000 +0100
@@ -0,0 +1,44 @@
+/*
+	Hardware Random Number Generator
+
+	Please read Documentation/hw_random.txt for details on use.
+
+	----------------------------------------------------------
+	This software may be used and distributed according to the terms
+        of the GNU General Public License, incorporated herein by reference.
+
+ */
+
+#ifndef LINUX_HWRANDOM_H_
+#define LINUX_HWRANDOM_H_
+
+#include <linux/types.h>
+#include <linux/list.h>
+
+struct pci_dev;
+
+struct hwrng {
+	/** Unique name. */
+	const char *name;
+
+	/** Initialization callback. */
+	int (*init) (struct hwrng *rng);
+	/** Cleanup callback. */
+	void (*cleanup) (struct hwrng *rng);
+	/** Is the RNG able to provide data now? */
+	int (*data_present) (struct hwrng *rng);
+	/** Read data from the RNG device.
+	  * Returns the number of random bytes in data.
+	  */
+	int (*data_read) (struct hwrng *rng, u32 *data);
+	/** Private data, for use by the RNG driver. */
+	unsigned long priv;
+
+	/* internal. */
+	struct list_head list;
+};
+
+extern int hwrng_register(struct hwrng *rng);
+extern void hwrng_unregister(struct hwrng *rng);
+
+#endif /* LINUX_HWRANDOM_H_ */


-- 
Greetings Michael.

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply

* Re: depmod kernel compilation
From: linux-os (Dick Johnson) @ 2006-03-01 13:19 UTC (permalink / raw)
  To: tim tim; +Cc: Linux kernel
In-Reply-To: <503e0f9d0603010506x416e21e3o679a0b713f870a8a@mail.gmail.com>


On Wed, 1 Mar 2006, tim tim wrote:

> hello.. i am trying to install 2.6.10 kernel.. and used the following..
>
> make xconfig -- selected lodable module support
> make bzImage
> make modules
> make modules_install
>
> then it show some depmod.. how can i install the kernel.. here i have
> a fully installed  RedHat EL3 os. 2.4.21...
>
> how figure it out

Going from 2.4.x to 2.6.x. make sure you have the latest modutils!
If not, install the latest, then do `make modules_install` again.
Then.....

`make install`

Cheers,
Dick Johnson
Penguin : Linux version 2.6.15.4 on an i686 machine (5589.54 BogoMips).
Warning : 98.36% of all statistics are fiction, book release in April.
_
\x1a\x04

****************************************************************
The information transmitted in this message is confidential and may be privileged.  Any review, retransmission, dissemination, or other use of this information by persons or entities other than the intended recipient is prohibited.  If you are not the intended recipient, please notify Analogic Corporation immediately - by replying to this message or by sending an email to DeliveryErrors@analogic.com - and destroy all copies of this information, including any attachments, without reading or disclosing them.

Thank you.

^ permalink raw reply

* Re: LibPATA code issues / 2.6.15.4
From: Justin Piszcz @ 2006-03-01 13:17 UTC (permalink / raw)
  To: Mark Lord
  Cc: Eric D. Mudama, Jeff Garzik, David Greaves, Tejun Heo,
	linux-kernel, IDE/ATA development list, albertcc, axboe,
	Linus Torvalds
In-Reply-To: <4404F31D.90407@rtr.ca>



On Tue, 28 Feb 2006, Mark Lord wrote:

> Eric D. Mudama wrote:
>> those drives should support all FUA opcodes properly, both queued and 
>> unqueued
>
> His first drive (sda) does not support queued commands at all,
> but the newer firmware in his second drive (sdb) does support NCQ.
>
> Both drives support FUA.
>
> cheers
>

Could someone *PLEASE* produce a *unified* patch that is compatible with 
2.6.16-rc5 or 2.6.15.4 so I can reproduce the error?

Mark had two patches, I have had the most PIA time getting them to work, 
patch properly, etc..

With 2.6.16-rc5:

# make bzImage
   CHK     include/linux/version.h
scripts/kconfig/conf -s arch/i386/Kconfig
#
# using defaults found in .config
#
   SPLIT   include/linux/autoconf.h -> include/config/*
   CHK     include/linux/compile.h
   CHK     usr/initramfs_list
   GEN     .version
   CHK     include/linux/compile.h
   UPD     include/linux/compile.h
   CC      init/version.o
   LD      init/built-in.o
   LD      .tmp_vmlinux1
drivers/built-in.o: In function `ata_to_sense_error': undefined reference 
to `print'
drivers/built-in.o: In function `ata_to_sense_error': undefined reference 
to `print'
make: *** [.tmp_vmlinux1] Error 1
Command exited with non-zero status 2



^ permalink raw reply

* Re: [PATCH] proc: task_mmu bug fix.
From: Rafael J. Wysocki @ 2006-03-01 13:15 UTC (permalink / raw)
  To: Eric W. Biederman; +Cc: Andrew Morton, linux-kernel, pj
In-Reply-To: <m1oe0qnxdi.fsf@ebiederm.dsl.xmission.com>

On Wednesday 01 March 2006 13:49, Eric W. Biederman wrote:
> Andrew Morton <akpm@osdl.org> writes:
> 
> > ebiederm@xmission.com (Eric W. Biederman) wrote:
> >>
> >> This should fix the big bug that has been crashing kernels when
> >>  fuser is called.  At least it is the bug I observed here.  It seems
> >>  you need the right access pattern on /proc/<pid>/maps to trigger this.
> >
> > Thanks.  Do you think this is likely to fix the crashes reported by
> > Laurent, Jesper, Paul, Rafael and Martin?
> 
> So I haven't tracked down all of the bug reports yet.  But the
> few bits I have seen make it likely.  First the task_mmu change
> was one of the largest change in logic I had to make.  Second
> the ugly bug reports seem to be about an extra decrement.  Third
> it seems to be my task_ref work that is the most implicated.
> 
> I will certainly follow and see what I can do to confirm that I have
> gotten everything.

I can confirm it fixes the problem that I have reported.

Thanks a lot,
Rafael

^ permalink raw reply

* Re: [PATCH] proc: task_mmu bug fix.
From: Hugh Dickins @ 2006-03-01 13:14 UTC (permalink / raw)
  To: Eric W. Biederman; +Cc: Andrew Morton, Rafael J. Wysocki, linux-kernel, pj
In-Reply-To: <m1oe0qnxdi.fsf@ebiederm.dsl.xmission.com>

On Wed, 1 Mar 2006, Eric W. Biederman wrote:
> Andrew Morton <akpm@osdl.org> writes:
> >
> > Thanks.  Do you think this is likely to fix the crashes reported by
> > Laurent, Jesper, Paul, Rafael and Martin?
> 
> So I haven't tracked down all of the bug reports yet.  But the
> few bits I have seen make it likely.  First the task_mmu change
> was one of the largest change in logic I had to make.  Second
> the ugly bug reports seem to be about an extra decrement.  Third
> it seems to be my task_ref work that is the most implicated.

I was getting the same bootup __put_task_struct symptoms as Rafael,
and this patch fixes those nicely: looks stable now, thanks Eric.

Hugh

^ permalink raw reply

* Re: [RFC] vfs: cleanup of permission()
From: Herbert Poetzl @ 2006-03-01 13:11 UTC (permalink / raw)
  To: Trond Myklebust
  Cc: Andrew Morton, Christoph Hellwig, Al Viro, Linux Kernel ML
In-Reply-To: <1141202744.11585.20.camel@lade.trondhjem.org>

On Wed, Mar 01, 2006 at 12:45:44AM -0800, Trond Myklebust wrote:
> On Tue, 2006-02-28 at 06:26 +0100, Herbert Poetzl wrote:
> > Hi Andrew! Christoph! Al!
> > 
> > after thinking some time about the oracle words
> > (sent in reply to previous BME submissions) we 
> > (Sam and I) came to the conclusion that it would 
> > be a good idea to remove the nameidata introduced
> > in September 2003 from the inode permission()
> > checks, so that vfs_permission() can take care
> > of them ...
> 
> Why? There may be perfectly legitimate reasons for the filesystem to
> request information about the path. I can think of server failover
> situations in NFSv4 where the client may need to look up the
> filehandle for the file on the new server before it can service the
> ACCESS call.

the second part is actually a hack to help nfs and fuse
to get the 'required' information until there is a proper
interface (at the vfs not inode level) to pass relevant
information (probably dentry/vfsmount/flags)

> > this is in two parts, the first one does the 
> > removal and the second one fixes up nfs and fuse
> > by passing the relevant nd_flags via the mask
> > 
> > Note: this is just a suggestion, so please let
> >       us know what you think 
> 
> Firstly, the fact that the lookup intent flags happen not to collide
> with MAY_* is a complete fluke, not a design. The numerical values of
> either set of flags could change tomorrow for all you know.
>
> Secondly, an intent is _not_ a permissions mask by any stretch of the
> imagination.

see above

> IOW: at the very least make that intent flag a separate parameter.

IMHO it would be good to remove them completely form the
current permission() checks.

best,
Herbert

> Cheers,
>   Trond
> 
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/

^ permalink raw reply

* videotrans (Season 1 Episode 2 ;-)
From: chuck gelm @ 2006-03-01 13:09 UTC (permalink / raw)
  To: linux-newbie; +Cc: Stephen Samuel
In-Reply-To: <440570C2.1060003@bcgreen.com>

Stephen Samuel wrote:

> Try dvdauthor ... I got it to work for me. It's somewhat simplistic
> but it does the job.
>
> It creates the directory structure, I then used k3b to burn the
> physical DVD
>
Hi, Stephen:

 'dvdauthor' is mentioned in the last step of the videotrans utilities.
(http://videotrans.sourceforge.net/videotrans.1.html)

 I was able to convert three (3) .avi files and burn them to DVD,
but the 'menu' was not good.  The menu had one image of the
first scene of the last video that occupied the entire menu screen.
I could 'arrow' over to second movie and see the ">" button highlighted,
but it took a few minutes to guess that to see the third 'play button
I needed to press the 'down arrow' on my remote.  Then the play arrow
appeared in the middle of the 'image of the first scene of the last video'.
Oh, and at the bottom of the menu screen was always displayed the
filename of the last video, not the currently selected video.  :-|

 I am now redoing the process and leaving out the 'scene image'.
I hope to see a menu of only movie filenames from which to choose.
\/
/\
Fingers crost'
Chuck

-
To unsubscribe from this list: send the line "unsubscribe linux-newbie" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.linux-learn.org/faqs

^ permalink raw reply

* Re: [RFC] vfs: cleanup of permission()
From: Herbert Poetzl @ 2006-03-01 13:06 UTC (permalink / raw)
  To: tvrtko.ursulin
  Cc: Andrew Morton, Christoph Hellwig, Linux Kernel ML, Al Viro, LSM
In-Reply-To: <OFAFEC22B7.7F7518A9-ON80257124.0043AF58-80257124.00448503@sophos.com>

On Wed, Mar 01, 2006 at 12:28:25PM +0000, tvrtko.ursulin@sophos.com wrote:
> > On Tue, 2006-02-28 at 06:26 +0100, Herbert Poetzl wrote:
> > Hi Andrew! Christoph! Al!
> > 
> > after thinking some time about the oracle words
> > (sent in reply to previous BME submissions) we 
> > (Sam and I) came to the conclusion that it would 
> > be a good idea to remove the nameidata introduced
> > in September 2003 from the inode permission()
> > checks, so that vfs_permission() can take care
> > of them ...
> 
> Could you please provide a link to that 'previous BME submissions'?

here you go: http://lkml.org/lkml/2006/1/21/19

> Thanks.

you're welcome!

> Also, since you are modifying LSM interfaces, why not discuss it on
> the LSM mailing list?

no problem with that, will cc the lsm folks next time
(feel free to bounce the messages)

for now, here is a link to this thread:
  http://lkml.org/lkml/2006/2/28/4

> And finally, please don't remove nameidata. Modules out there depend
> on it and we at Sophos are about to release a new product which needs
> it as well. The plan was to announce the whole thing parallel with the
> release, but after spotting your post I was prompted to react ahead
> of the schedule. However, I am very busy at the moment so the actual
> announcment with full details will have to wait for a week or two.

thing is, permission() does inode based checks
and the nameidata is not even provided in most
cases, so you cannot rely on that information
anyway

it would probably be better to have some kind
of vfs_permission, which uses dentry/vfsmnt for
decisions on the vfs layer, this would also allow
to cover most of the cases where nameidata is not
available (for example the filep based stuff)

best,
Herbert

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

^ permalink raw reply

* depmod kernel compilation
From: tim tim @ 2006-03-01 13:06 UTC (permalink / raw)
  To: linux-kernel

hello.. i am trying to install 2.6.10 kernel.. and used the following..

make xconfig -- selected lodable module support
make bzImage
make modules
make modules_install

then it show some depmod.. how can i install the kernel.. here i have
a fully installed  RedHat EL3 os. 2.4.21...

how figure it out

^ permalink raw reply

* [linux-lvm] Create a Logical volume with 100% of Volume groups size?
From: Alejandro Alfonso @ 2006-03-01 13:03 UTC (permalink / raw)
  To: linux-lvm

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

Hi everybody!

we only want to use LVM with one Logical volume, and want to use the
100% of available space.
is there any way to create it? Look:

acrol ~ # vgdisplay
  --- Volume group ---
  VG Name               mirror
[...]
  VG Size               232.88 GB
  PE Size               32.00 MB
  Total PE              7452
  Alloc PE / Size       7452 / 232.88 GB
  Free  PE / Size       0 / 0
[...]

acrol ~ # lvcreate -L232.88G -nlv00 mirrorPoe
  Rounding up size to full physical extent 232.91 GB
  Insufficient free extents (7452) in volume group mirrorPoe: 7453 required

How to use all the 7452 PE? Thanks in advance

Best regards!
-- 
------------------------------------------------------------------------
 
*       Alejandro Alfonso Fern�ndez
      Dpto de Sistemas. �rea Corporativa *
alejandro.alfonso@telecyl.com <mailto:alejandro.alfonso@telecyl.com>
http://www.telecyl.com/
 
Proci�n 7, Portales 1-2 Edificio Am�rica II
28023 Madrid
Tfn: 91 452 18 00 - Fax: 91 452 18 08 	Juan Garc�a Hortelano, 43
Edificio Telecyl
47014 Valladolid
Tfn: 983 428 200 - Fax: 983 428 223

------------------------------------------------------------------------

[-- Attachment #2: Type: text/html, Size: 2751 bytes --]

^ permalink raw reply

* Re: [PATCH] proc: task_mmu bug fix.
From: Eric W. Biederman @ 2006-03-01 12:49 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-kernel, pj
In-Reply-To: <20060228234628.55ee9f76.akpm@osdl.org>

Andrew Morton <akpm@osdl.org> writes:

> ebiederm@xmission.com (Eric W. Biederman) wrote:
>>
>> This should fix the big bug that has been crashing kernels when
>>  fuser is called.  At least it is the bug I observed here.  It seems
>>  you need the right access pattern on /proc/<pid>/maps to trigger this.
>
> Thanks.  Do you think this is likely to fix the crashes reported by
> Laurent, Jesper, Paul, Rafael and Martin?

So I haven't tracked down all of the bug reports yet.  But the
few bits I have seen make it likely.  First the task_mmu change
was one of the largest change in logic I had to make.  Second
the ugly bug reports seem to be about an extra decrement.  Third
it seems to be my task_ref work that is the most implicated.

I will certainly follow and see what I can do to confirm that I have
gotten everything.

Eric

^ permalink raw reply

* Re: [RFC] vfs: cleanup of permission()
From: tvrtko.ursulin @ 2006-03-01 12:59 UTC (permalink / raw)
  To: Arjan van de Ven
  Cc: Andrew Morton, Christoph Hellwig, Herbert Poetzl, Linux Kernel ML,
	Al Viro
In-Reply-To: <1141216671.3185.22.camel@laptopd505.fenrus.org>

Arjan van de Ven <arjan@infradead.org> wrote on 01/03/2006 12:37:51:

> > And finally, please don't remove nameidata. Modules out there depend 
on it 
> 
> are those modules about to merged into the kernel? The current intent

See third paragraph of my reply.

> infrastructure isn't fulfilling what it should do well, and from what
> I've seen on the discussions it sounds that the best way forward is to
> undo the current implementation and then roll out one which caters to
> the needs of the existing users better.

That I don't know so I can't comment at the moment. I haven't seen 
anything on linux-security-modules recently?
 
> As external module, you have little say so far simply because your usage
> isn't visible. I'd urge you to quickly submit your code so that the
> things you need from this are better visible to the people who are
> thinking and working on the redesign.

I know all that, but it is a complicated matter to discuss. That's why I 
was planning to make a comprehensive announcement which would discuss most 
of the hot topics. Ideally yes, I would like to merge, but it won't happen 
now. The first thing I would like to do is establish common ground with 
other security vendors so that we could approach the problem together. 
Personaly, I am not sure whether insisting that everything should be a 
part of kernel is a right thing to do even though I think I understand all 
the up- and down-sides of both policies.

Having said all this above, I am afraid that there will be no other choice 
but to start working on the announcement asap. :)
 
> > and we at Sophos are about to release a new product which needs it as 
> > well. 
> 
> I assume we're talking about an open source product, or at least kernel
> component, here?

Of course. Kernel component might be known to some as Talpa and it is 
released under GPL.


^ permalink raw reply

* [RFC] Generic Migration
From: Francois Barre @ 2006-03-01 12:59 UTC (permalink / raw)
  To: linux-raid

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

Hi all,

I hope I won't bore you too much, but I had these ideas on my mind for
a couple of days now, so I just wanted to share them to you.
It is not a long document, so I guess it would take 10mins to read.
Sorry for my sometimes obscure english, ya know, I did the best I could...

I do welcome any comments, critics, suggestions, ... especially
because it's really a first draft here.

I of course would wish to implement what i'm speaking about, one day
or another...

Best regards,

F.-E.B.

[-- Attachment #2: md-generic-migration.txt --]
[-- Type: text/plain, Size: 8158 bytes --]

Generic reshape model for MD

1. Introduction

The aim of this document is to present a concept of generic online md level
migration, such as raid1 to raid5, raid growth, ...
Regardless to implementation issues, the only migrations that are strictly
impossible are those where data (and replications) will not fit in the disk
at the end of the migration. For example, raid5 to raid1 with the same number
of disks is strictly impossible.
The aim of generic migration is to make each migration possible and easily
implementable (if not straitforward), including the ones that would imply 
a growth, to the extend that enough spare disks are provided.

2. Proposal

2.1. Initial Concept.

Migration always imply a total read/re-write of the whole disks, just as 
a resync or a growth would do.

Needless to say, raid-levels are always aware of their own layout, and know
how to read or write stuff to disk with regard to their layout.

So in short, the concept is : let's benefit of their awareness.
Let's add a layer on top of the raidX block layer, which would be responsible 
for reading a certain amount of data using the previous raid level/layout 
(feeding the window), and writing this window using the target raid 
level/layout. Both reads and writes use the corresponding level implementation,
just as a regular use would do.
So, don't forget the window is read/written at md level.

2.2. Layout shape and calculations
(Nota : we would not consider here linear md models).

At this point, we should detail three different types of migrations, in terms
of migration of data at the disk level.

Considering only raid1, 4, 5 and 6, it is clear that we can find an exact 
ratio M between the size of the window (in sectors) and the corresponding 
number of sectors involved on disk.
For raid1, M = 1, for raid 4 and 5, M = k - 1 (k being the total number of 
disks in a non-degraded setup), and for raid 6, M = k - 2.

In a migration context, we have to know M for the previous setup and M' for 
the target setup.

Let's call W the size of the window. A convenient window size shall be a 
multiple of M and M', such as each window read involves W/M sectors on
each disk, and each window write involves W/M' sectors on each disk.

First, a little bit of notation issues.
	s(n,p,q) defines sectors p to p+q on the nth disk before migration.
	s'(n,p,q) defines sectors p to p+q on the nth disk after migration. 
	w(m) defines the mth window of the migration (window at sector m,
	and of size W).

	k defines the number of disks before migration.
	k' defines the number of disks after migration.


	w(m) = s(0,p,W/M) ... s(k,p,W/M) means the mth window is built using
	the pth sector of disks 0...k. All disks may not be necessary
	to build the window, but it is asserted that we *can* build
	the window knowing this.
	(Nota : don't misunderstand this ugly notation : this is not concatenation..)

	In the general case, migration consists on 
	1. Building window
	w(m) = s(0,p,W/M) ... s(k,p, W/M)

	2. Writing back the window
	s'(0,p',W/M') ... s'(k',p',W/M') = w(m)

	So, m = M * p = M' * p'.

It is clear here that we should ask level-specific code for their M value,
as we provide them the number of disks we want to use for migrations.

2.3. Different types of migrations.

As a result, we can have three different migrations 

- stable migration : when the data before and after migration sits at the same
part of the disk, i.e., M = M', and for each m, p' == p.
  So data at s(0,p) ... s(k,p) will be copied to s(0,p) ... s(k',p).
  A good example ? Raid-5 to Raid-6 conversion with an additionnal disk.
  k' = k + 1, M = k - 1, M' = k' - 2 = k - 1 = M.
  A consequence of M = M' is that the md device size does not change after the
  migration.

- downsize migration : that means M' > M, and p' < p.
  An example ? Raid-6 to Raid-5 conversion with the same number of disks.
  We have M = k - 2 and M' = k - 1, so M' > M.
  Indeed, when we will finish migrating, space will remain at the end of disks
  so md device size will increase and we'll need an extra resync of the
  remaining part.

- upsize migration : that means p' > p. This is only possible when underlying
  (partition) size is greater than the one actually used. This can be part of
  'standard' growth and is strictly off-topic.


2.4. Implementation in short

Well, I will NOT underestimate the work to accomplish by saying 'easy, just 
change that and code this... Piece of cake !'.
The basic concept is : rely on the current implementation of involved raid
levels to do the job. That is, using request_queue and bio, read the window
and write it back.
That also implies we have two concurrent raid level drivers on top of the
same drives.
During the migration process, the block device at md level will be splitted in
two parts : the one that has migrated (and is written on disk using the target
layout), and the one that is to be migrated (which is stored on disk using the
previous layout). This border evolves during the process, starting at the
beginning of the md, finishing at the end of the previous layout.

(In the case of a downsize migration, a resync of the remaining part must be
performed after the migration of previous content.)

Let's call current_sector the current start sector of the window to be copied.
current_sector starts at 0, and ends at the previous layout size. It can only
grow, because we only consider stable and downsize migration.

Let's assume the mddev->queue is empty and clean at the beginning of the
migration.
Let's assume that each level-specific cache is cleared.
Let's assume we are able to strictly forbid the underlying level drivers to
read or write stuff outside of their own border.
That is, the previous driver will not read nor write on sectors after 
current_sector (and the corresponding sectors on disk), and the target driver
will not read nor write before.
That also imply inhibiting level-specific resync threads, ...

So, an idea of the implementation could be a wrapper around the 
make_request_fn set for the queue of the mddev, plus a migration thread.

The make_request_fn of the migration will be responsible for choosing the
relevant level driver for the (userland) requests it recieves.
If the request is before current_sector, call the target level driver.
If the request is after current_sector, call the previous one.
If the request is inside the window, delay it.
Of course, overlapping issues will appear here.

The migration thread will be responsible for fetching the window content,
increment current_sector, write window with the new layout. Locking and 
unlocking as necessary.

2.5. Journaling and failure recovery

Consider these points :
- before migration starts, we recorder in the superblocks all necessary 
setup information regarding the targetted raid level and layout. This includes
disk role in the target layout, window size, ...
- during migration, we regularly write the current status (the current_sector)
of the migration in (some ?) superblocks.
This way, we could handle crash recovery of migrations, at least for dowsize
migrations.
Because stable migrations are a bit more complex to handle, because we write 
stuff where we have read it. This means we don't know after a crash if :
A: window was being read
B: window was being written
C: window was completely written.

Status A and C are safe, at least if we can determine that we started writing 
the window or not.
Status B is unsafe : we started writing data but did not finish, so sectors
are in a mix of old and new layout.
Several options could turn here :
- use another device/journal (nvram ?) to backup the window before writing
- write all data at a certain offset to forbid a window to be rewritten where 
it was read. This shall imply a change in all underlying drivers...

3. Open Issues

As we rely on the level-specific code for reading/writing, we benefit from its
own redundancy implementation. So we could migrate a degraded array.




^ permalink raw reply


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.