[IDE] siimage.c: fix PIO settings programming From: Ryan Earl . A 32-bit argument was being passed instead of a 16-bit argument to the function referenced by hwif->OUTW(val, port), thus clobbering the stack. The 16 most significant bits of speedt were being used as the whole first argument (this will always be 0) and the lower order 16-bits of speedt were then being used as the upper order 16-bits of the address/port, while the upper 16-bits of the real address/port were the lower 16-bits. drivers/ide/pci/siimage.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff -puN drivers/ide/pci/siimage.c~ide-siimage-stack-fix drivers/ide/pci/siimage.c --- linux-2.6.0-test11/drivers/ide/pci/siimage.c~ide-siimage-stack-fix 2003-12-07 18:04:46.512116120 +0100 +++ linux-2.6.0-test11-root/drivers/ide/pci/siimage.c 2003-12-07 18:10:07.997242952 +0100 @@ -1,5 +1,5 @@ /* - * linux/drivers/ide/pci/siimage.c Version 1.07 Nov 30, 2003 + * linux/drivers/ide/pci/siimage.c Version 1.08 Dec 7, 2003 * * Copyright (C) 2001-2002 Andre Hedrick * Copyright (C) 2003 Red Hat @@ -266,7 +266,7 @@ static byte siimage_taskfile_timing (ide static void siimage_tuneproc (ide_drive_t *drive, byte mode_wanted) { ide_hwif_t *hwif = HWIF(drive); - u32 speedt = 0; + u16 speedt = 0; u16 speedp = 0; unsigned long addr = siimage_seldev(drive, 0x04); unsigned long tfaddr = siimage_selreg(hwif, 0x02); _