Commit 541aaffb authored by Wim Van Sebroeck's avatar Wim Van Sebroeck

Merge http://linux.bkbits.net/linux-2.5

into hostme.bitkeeper.com:/repos/l/linux-watchdog/linux-2.5-watchdog
parents 5cb1fc6d 0708e1f7
...@@ -14,6 +14,7 @@ CONFIG_GENERIC_ISA_DMA=y ...@@ -14,6 +14,7 @@ CONFIG_GENERIC_ISA_DMA=y
# Code maturity level options # Code maturity level options
# #
CONFIG_EXPERIMENTAL=y CONFIG_EXPERIMENTAL=y
# CONFIG_BROKEN is not set
# #
# General setup # General setup
...@@ -23,10 +24,12 @@ CONFIG_SYSVIPC=y ...@@ -23,10 +24,12 @@ CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set # CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y CONFIG_SYSCTL=y
CONFIG_LOG_BUF_SHIFT=18 CONFIG_LOG_BUF_SHIFT=18
# CONFIG_IKCONFIG is not set
# CONFIG_EMBEDDED is not set # CONFIG_EMBEDDED is not set
CONFIG_KALLSYMS=y CONFIG_KALLSYMS=y
CONFIG_FUTEX=y CONFIG_FUTEX=y
CONFIG_EPOLL=y CONFIG_EPOLL=y
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y CONFIG_IOSCHED_DEADLINE=y
...@@ -72,10 +75,10 @@ CONFIG_PM=y ...@@ -72,10 +75,10 @@ CONFIG_PM=y
CONFIG_SOFTWARE_SUSPEND=y CONFIG_SOFTWARE_SUSPEND=y
# #
# ACPI Support # ACPI (Advanced Configuration and Power Interface) Support
# #
# CONFIG_ACPI_HT is not set
CONFIG_ACPI=y CONFIG_ACPI=y
# CONFIG_ACPI_HT_ONLY is not set
CONFIG_ACPI_BOOT=y CONFIG_ACPI_BOOT=y
CONFIG_ACPI_SLEEP=y CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_SLEEP_PROC_FS=y CONFIG_ACPI_SLEEP_PROC_FS=y
...@@ -117,7 +120,6 @@ CONFIG_UID16=y ...@@ -117,7 +120,6 @@ CONFIG_UID16=y
# #
# Generic Driver Options # Generic Driver Options
# #
# CONFIG_FW_LOADER is not set
# #
# Memory Technology Devices (MTD) # Memory Technology Devices (MTD)
...@@ -159,6 +161,7 @@ CONFIG_BLK_DEV_IDEDISK=y ...@@ -159,6 +161,7 @@ CONFIG_BLK_DEV_IDEDISK=y
CONFIG_IDEDISK_MULTI_MODE=y CONFIG_IDEDISK_MULTI_MODE=y
# CONFIG_IDEDISK_STROKE is not set # CONFIG_IDEDISK_STROKE is not set
CONFIG_BLK_DEV_IDECD=y CONFIG_BLK_DEV_IDECD=y
# CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDEFLOPPY is not set # CONFIG_BLK_DEV_IDEFLOPPY is not set
# CONFIG_BLK_DEV_IDESCSI is not set # CONFIG_BLK_DEV_IDESCSI is not set
# CONFIG_IDE_TASK_IOCTL is not set # CONFIG_IDE_TASK_IOCTL is not set
...@@ -318,7 +321,6 @@ CONFIG_IP_MULTICAST=y ...@@ -318,7 +321,6 @@ CONFIG_IP_MULTICAST=y
# CONFIG_DECNET is not set # CONFIG_DECNET is not set
# CONFIG_BRIDGE is not set # CONFIG_BRIDGE is not set
# CONFIG_NETFILTER is not set # CONFIG_NETFILTER is not set
# CONFIG_XFRM_USER is not set
# #
# SCTP Configuration (EXPERIMENTAL) # SCTP Configuration (EXPERIMENTAL)
...@@ -405,6 +407,7 @@ CONFIG_E1000=m ...@@ -405,6 +407,7 @@ CONFIG_E1000=m
# CONFIG_HAMACHI is not set # CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set # CONFIG_YELLOWFIN is not set
# CONFIG_R8169 is not set # CONFIG_R8169 is not set
# CONFIG_SIS190 is not set
# CONFIG_SK98LIN is not set # CONFIG_SK98LIN is not set
CONFIG_TIGON3=y CONFIG_TIGON3=y
...@@ -595,10 +598,7 @@ CONFIG_FS_MBCACHE=y ...@@ -595,10 +598,7 @@ CONFIG_FS_MBCACHE=y
CONFIG_REISERFS_FS=y CONFIG_REISERFS_FS=y
# CONFIG_REISERFS_CHECK is not set # CONFIG_REISERFS_CHECK is not set
# CONFIG_REISERFS_PROC_INFO is not set # CONFIG_REISERFS_PROC_INFO is not set
CONFIG_JFS_FS=y # CONFIG_JFS_FS is not set
CONFIG_JFS_POSIX_ACL=y
# CONFIG_JFS_DEBUG is not set
# CONFIG_JFS_STATISTICS is not set
CONFIG_FS_POSIX_ACL=y CONFIG_FS_POSIX_ACL=y
# CONFIG_XFS_FS is not set # CONFIG_XFS_FS is not set
# CONFIG_MINIX_FS is not set # CONFIG_MINIX_FS is not set
...@@ -674,49 +674,6 @@ CONFIG_SUNRPC=y ...@@ -674,49 +674,6 @@ CONFIG_SUNRPC=y
# #
# CONFIG_PARTITION_ADVANCED is not set # CONFIG_PARTITION_ADVANCED is not set
CONFIG_MSDOS_PARTITION=y CONFIG_MSDOS_PARTITION=y
CONFIG_NLS=y
#
# Native Language Support
#
CONFIG_NLS_DEFAULT="iso8859-1"
# CONFIG_NLS_CODEPAGE_437 is not set
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
# CONFIG_NLS_CODEPAGE_850 is not set
# CONFIG_NLS_CODEPAGE_852 is not set
# CONFIG_NLS_CODEPAGE_855 is not set
# CONFIG_NLS_CODEPAGE_857 is not set
# CONFIG_NLS_CODEPAGE_860 is not set
# CONFIG_NLS_CODEPAGE_861 is not set
# CONFIG_NLS_CODEPAGE_862 is not set
# CONFIG_NLS_CODEPAGE_863 is not set
# CONFIG_NLS_CODEPAGE_864 is not set
# CONFIG_NLS_CODEPAGE_865 is not set
# CONFIG_NLS_CODEPAGE_866 is not set
# CONFIG_NLS_CODEPAGE_869 is not set
# CONFIG_NLS_CODEPAGE_936 is not set
# CONFIG_NLS_CODEPAGE_950 is not set
# CONFIG_NLS_CODEPAGE_932 is not set
# CONFIG_NLS_CODEPAGE_949 is not set
# CONFIG_NLS_CODEPAGE_874 is not set
# CONFIG_NLS_ISO8859_8 is not set
# CONFIG_NLS_CODEPAGE_1250 is not set
# CONFIG_NLS_CODEPAGE_1251 is not set
# CONFIG_NLS_ISO8859_1 is not set
# CONFIG_NLS_ISO8859_2 is not set
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set
# CONFIG_NLS_ISO8859_5 is not set
# CONFIG_NLS_ISO8859_6 is not set
# CONFIG_NLS_ISO8859_7 is not set
# CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_ISO8859_13 is not set
# CONFIG_NLS_ISO8859_14 is not set
# CONFIG_NLS_ISO8859_15 is not set
# CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not set
# CONFIG_NLS_UTF8 is not set
# #
# Graphics support # Graphics support
......
...@@ -1170,8 +1170,6 @@ sys32_rt_sigqueueinfo(int pid, int sig, siginfo_t32 *uinfo) ...@@ -1170,8 +1170,6 @@ sys32_rt_sigqueueinfo(int pid, int sig, siginfo_t32 *uinfo)
return ret; return ret;
} }
extern void check_pending(int signum);
asmlinkage long sys_utimes(char *, struct timeval *); asmlinkage long sys_utimes(char *, struct timeval *);
asmlinkage long asmlinkage long
......
...@@ -299,7 +299,7 @@ void __init setup_local_APIC (void) ...@@ -299,7 +299,7 @@ void __init setup_local_APIC (void)
* This is meaningless in clustered apic mode, so we skip it. * This is meaningless in clustered apic mode, so we skip it.
*/ */
if (!clustered_apic_mode && if (!clustered_apic_mode &&
!cpu_isset(GET_APIC_ID(apic_read(APIC_ID)), phys_cpu_present_map)) !physid_isset(GET_APIC_ID(apic_read(APIC_ID)), phys_cpu_present_map))
BUG(); BUG();
/* /*
...@@ -993,7 +993,7 @@ int __init APIC_init_uniprocessor (void) ...@@ -993,7 +993,7 @@ int __init APIC_init_uniprocessor (void)
connect_bsp_APIC(); connect_bsp_APIC();
phys_cpu_present_map = cpumask_of_cpu(0); phys_cpu_present_map = physid_mask_of_physid(0);
apic_write_around(APIC_ID, boot_cpu_id); apic_write_around(APIC_ID, boot_cpu_id);
setup_local_APIC(); setup_local_APIC();
......
...@@ -1014,7 +1014,7 @@ void disable_IO_APIC(void) ...@@ -1014,7 +1014,7 @@ void disable_IO_APIC(void)
static void __init setup_ioapic_ids_from_mpc (void) static void __init setup_ioapic_ids_from_mpc (void)
{ {
union IO_APIC_reg_00 reg_00; union IO_APIC_reg_00 reg_00;
cpumask_t phys_id_present_map = phys_cpu_present_map; physid_mask_t phys_id_present_map = phys_cpu_present_map;
int apic; int apic;
int i; int i;
unsigned char old_id; unsigned char old_id;
...@@ -1047,22 +1047,22 @@ static void __init setup_ioapic_ids_from_mpc (void) ...@@ -1047,22 +1047,22 @@ static void __init setup_ioapic_ids_from_mpc (void)
* system must have a unique ID or we get lots of nice * system must have a unique ID or we get lots of nice
* 'stuck on smp_invalidate_needed IPI wait' messages. * 'stuck on smp_invalidate_needed IPI wait' messages.
*/ */
if (cpu_isset(mp_ioapics[apic].mpc_apicid, phys_id_present_map)) { if (physid_isset(mp_ioapics[apic].mpc_apicid, phys_id_present_map)) {
printk(KERN_ERR "BIOS bug, IO-APIC#%d ID %d is already used!...\n", printk(KERN_ERR "BIOS bug, IO-APIC#%d ID %d is already used!...\n",
apic, mp_ioapics[apic].mpc_apicid); apic, mp_ioapics[apic].mpc_apicid);
for (i = 0; i < 0xf; i++) for (i = 0; i < 0xf; i++)
if (!cpu_isset(i, phys_id_present_map)) if (!physid_isset(i, phys_id_present_map))
break; break;
if (i >= 0xf) if (i >= 0xf)
panic("Max APIC ID exceeded!\n"); panic("Max APIC ID exceeded!\n");
printk(KERN_ERR "... fixing up to %d. (tell your hw vendor)\n", printk(KERN_ERR "... fixing up to %d. (tell your hw vendor)\n",
i); i);
cpu_set(i, phys_id_present_map); physid_set(i, phys_id_present_map);
mp_ioapics[apic].mpc_apicid = i; mp_ioapics[apic].mpc_apicid = i;
} else { } else {
printk(KERN_INFO printk(KERN_INFO
"Using IO-APIC %d\n", mp_ioapics[apic].mpc_apicid); "Using IO-APIC %d\n", mp_ioapics[apic].mpc_apicid);
cpu_set(mp_ioapics[apic].mpc_apicid, phys_id_present_map); physid_set(mp_ioapics[apic].mpc_apicid, phys_id_present_map);
} }
...@@ -1642,7 +1642,7 @@ void __init mp_config_ioapic_for_sci(int irq) ...@@ -1642,7 +1642,7 @@ void __init mp_config_ioapic_for_sci(int irq)
int __init io_apic_get_unique_id (int ioapic, int apic_id) int __init io_apic_get_unique_id (int ioapic, int apic_id)
{ {
union IO_APIC_reg_00 reg_00; union IO_APIC_reg_00 reg_00;
static cpumask_t apic_id_map; static physid_mask_t apic_id_map;
unsigned long flags; unsigned long flags;
int i = 0; int i = 0;
...@@ -1655,7 +1655,7 @@ int __init io_apic_get_unique_id (int ioapic, int apic_id) ...@@ -1655,7 +1655,7 @@ int __init io_apic_get_unique_id (int ioapic, int apic_id)
* advantage of new APIC bus architecture. * advantage of new APIC bus architecture.
*/ */
if (!cpus_empty(apic_id_map)) if (!physids_empty(apic_id_map))
apic_id_map = phys_cpu_present_map; apic_id_map = phys_cpu_present_map;
spin_lock_irqsave(&ioapic_lock, flags); spin_lock_irqsave(&ioapic_lock, flags);
...@@ -1672,10 +1672,10 @@ int __init io_apic_get_unique_id (int ioapic, int apic_id) ...@@ -1672,10 +1672,10 @@ int __init io_apic_get_unique_id (int ioapic, int apic_id)
* Every APIC in a system must have a unique ID or we get lots of nice * Every APIC in a system must have a unique ID or we get lots of nice
* 'stuck on smp_invalidate_needed IPI wait' messages. * 'stuck on smp_invalidate_needed IPI wait' messages.
*/ */
if (cpu_isset(apic_id, apic_id_map)) { if (physid_isset(apic_id, apic_id_map)) {
for (i = 0; i < IO_APIC_MAX_ID; i++) { for (i = 0; i < IO_APIC_MAX_ID; i++) {
if (!cpu_isset(i, apic_id_map)) if (!physid_isset(i, apic_id_map))
break; break;
} }
...@@ -1688,7 +1688,7 @@ int __init io_apic_get_unique_id (int ioapic, int apic_id) ...@@ -1688,7 +1688,7 @@ int __init io_apic_get_unique_id (int ioapic, int apic_id)
apic_id = i; apic_id = i;
} }
cpu_set(apic_id, apic_id_map); physid_set(apic_id, apic_id_map);
if (reg_00.bits.ID != apic_id) { if (reg_00.bits.ID != apic_id) {
reg_00.bits.ID = apic_id; reg_00.bits.ID = apic_id;
......
...@@ -10,12 +10,11 @@ ...@@ -10,12 +10,11 @@
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/mm.h>
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
#include <linux/stddef.h> #include <linux/stddef.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <asm/io.h> #include <linux/thread_info.h>
/* Set EXTENT bits starting at BASE in BITMAP to value TURN_ON. */ /* Set EXTENT bits starting at BASE in BITMAP to value TURN_ON. */
static void set_bitmap(unsigned long *bitmap, unsigned int base, unsigned int extent, int new_value) static void set_bitmap(unsigned long *bitmap, unsigned int base, unsigned int extent, int new_value)
...@@ -118,12 +117,7 @@ asmlinkage long sys_iopl(unsigned int level, struct pt_regs regs) ...@@ -118,12 +117,7 @@ asmlinkage long sys_iopl(unsigned int level, struct pt_regs regs)
return -EPERM; return -EPERM;
} }
regs.eflags = (regs.eflags &~ 0x3000UL) | (level << 12); regs.eflags = (regs.eflags &~ 0x3000UL) | (level << 12);
/* Make sure we return the long way (not sysenter) */
set_thread_flag(TIF_IRET);
return 0; return 0;
} }
void eat_key(void)
{
if (inb(0x60) & 1)
inb(0x64);
}
...@@ -67,7 +67,7 @@ unsigned int boot_cpu_id = -1U; ...@@ -67,7 +67,7 @@ unsigned int boot_cpu_id = -1U;
static unsigned int num_processors = 0; static unsigned int num_processors = 0;
/* Bitmask of physically existing CPUs */ /* Bitmask of physically existing CPUs */
cpumask_t phys_cpu_present_map = CPU_MASK_NONE; physid_mask_t phys_cpu_present_map = PHYSID_MASK_NONE;
/* ACPI MADT entry parsing functions */ /* ACPI MADT entry parsing functions */
#ifdef CONFIG_ACPI_BOOT #ifdef CONFIG_ACPI_BOOT
...@@ -126,7 +126,7 @@ static void __init MP_processor_info (struct mpc_config_processor *m) ...@@ -126,7 +126,7 @@ static void __init MP_processor_info (struct mpc_config_processor *m)
} }
ver = m->mpc_apicver; ver = m->mpc_apicver;
cpu_set(m->mpc_apicid, phys_cpu_present_map); physid_set(m->mpc_apicid, phys_cpu_present_map);
/* /*
* Validate version * Validate version
*/ */
......
...@@ -243,6 +243,8 @@ static void __init contig_initmem_init(void) ...@@ -243,6 +243,8 @@ static void __init contig_initmem_init(void)
void __init setup_arch(char **cmdline_p) void __init setup_arch(char **cmdline_p)
{ {
unsigned long low_mem_size;
ROOT_DEV = ORIG_ROOT_DEV; ROOT_DEV = ORIG_ROOT_DEV;
drive_info = DRIVE_INFO; drive_info = DRIVE_INFO;
screen_info = SCREEN_INFO; screen_info = SCREEN_INFO;
...@@ -378,7 +380,13 @@ void __init setup_arch(char **cmdline_p) ...@@ -378,7 +380,13 @@ void __init setup_arch(char **cmdline_p)
request_resource(&ioport_resource, standard_io_resources+i); request_resource(&ioport_resource, standard_io_resources+i);
} }
pci_mem_start = IOMAP_START; /* Will likely break when you have unassigned resources with more
than 4GB memory and bridges that don't support more than 4GB.
Doing it properly would require to allocate GFP_DMA memory
in this case. */
low_mem_size = ((end_pfn << PAGE_SHIFT) + 0xfffff) & ~0xfffff;
if (low_mem_size > pci_mem_start)
pci_mem_start = low_mem_size;
#ifdef CONFIG_GART_IOMMU #ifdef CONFIG_GART_IOMMU
iommu_hole_init(); iommu_hole_init();
......
...@@ -734,10 +734,10 @@ static void __init smp_boot_cpus(unsigned int max_cpus) ...@@ -734,10 +734,10 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
current_thread_info()->cpu = 0; current_thread_info()->cpu = 0;
smp_tune_scheduling(); smp_tune_scheduling();
if (!cpu_isset(hard_smp_processor_id(), phys_cpu_present_map)) { if (!physid_isset(hard_smp_processor_id(), phys_cpu_present_map)) {
printk("weird, boot CPU (#%d) not listed by the BIOS.\n", printk("weird, boot CPU (#%d) not listed by the BIOS.\n",
hard_smp_processor_id()); hard_smp_processor_id());
cpu_set(hard_smp_processor_id(), phys_cpu_present_map); physid_set(hard_smp_processor_id(), phys_cpu_present_map);
} }
/* /*
...@@ -748,7 +748,7 @@ static void __init smp_boot_cpus(unsigned int max_cpus) ...@@ -748,7 +748,7 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
printk(KERN_NOTICE "SMP motherboard not detected.\n"); printk(KERN_NOTICE "SMP motherboard not detected.\n");
io_apic_irqs = 0; io_apic_irqs = 0;
cpu_online_map = cpumask_of_cpu(0); cpu_online_map = cpumask_of_cpu(0);
phys_cpu_present_map = cpumask_of_cpu(0); phys_cpu_present_map = physid_mask_of_physid(0);
if (APIC_init_uniprocessor()) if (APIC_init_uniprocessor())
printk(KERN_NOTICE "Local APIC not detected." printk(KERN_NOTICE "Local APIC not detected."
" Using dummy APIC emulation.\n"); " Using dummy APIC emulation.\n");
...@@ -759,10 +759,10 @@ static void __init smp_boot_cpus(unsigned int max_cpus) ...@@ -759,10 +759,10 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
* Should not be necessary because the MP table should list the boot * Should not be necessary because the MP table should list the boot
* CPU too, but we do it for the sake of robustness anyway. * CPU too, but we do it for the sake of robustness anyway.
*/ */
if (!cpu_isset(boot_cpu_id, phys_cpu_present_map)) { if (!physid_isset(boot_cpu_id, phys_cpu_present_map)) {
printk(KERN_NOTICE "weird, boot CPU (#%d) not listed by the BIOS.\n", printk(KERN_NOTICE "weird, boot CPU (#%d) not listed by the BIOS.\n",
boot_cpu_id); boot_cpu_id);
cpu_set(hard_smp_processor_id(), phys_cpu_present_map); physid_set(hard_smp_processor_id(), phys_cpu_present_map);
} }
/* /*
...@@ -774,7 +774,7 @@ static void __init smp_boot_cpus(unsigned int max_cpus) ...@@ -774,7 +774,7 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
printk(KERN_ERR "... forcing use of dummy APIC emulation. (tell your hw vendor)\n"); printk(KERN_ERR "... forcing use of dummy APIC emulation. (tell your hw vendor)\n");
io_apic_irqs = 0; io_apic_irqs = 0;
cpu_online_map = cpumask_of_cpu(0); cpu_online_map = cpumask_of_cpu(0);
phys_cpu_present_map = cpumask_of_cpu(0); phys_cpu_present_map = physid_mask_of_physid(0);
disable_apic = 1; disable_apic = 1;
goto smp_done; goto smp_done;
} }
...@@ -789,7 +789,7 @@ static void __init smp_boot_cpus(unsigned int max_cpus) ...@@ -789,7 +789,7 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
printk(KERN_INFO "SMP mode deactivated, forcing use of dummy APIC emulation.\n"); printk(KERN_INFO "SMP mode deactivated, forcing use of dummy APIC emulation.\n");
io_apic_irqs = 0; io_apic_irqs = 0;
cpu_online_map = cpumask_of_cpu(0); cpu_online_map = cpumask_of_cpu(0);
phys_cpu_present_map = cpumask_of_cpu(0); phys_cpu_present_map = physid_mask_of_physid(0);
disable_apic = 1; disable_apic = 1;
goto smp_done; goto smp_done;
} }
...@@ -803,7 +803,7 @@ static void __init smp_boot_cpus(unsigned int max_cpus) ...@@ -803,7 +803,7 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
/* /*
* Now scan the CPU present map and fire up the other CPUs. * Now scan the CPU present map and fire up the other CPUs.
*/ */
Dprintk("CPU present map: %lx\n", phys_cpu_present_map); Dprintk("CPU present map: %lx\n", physids_coerce(phys_cpu_present_map));
for (apicid = 0; apicid < NR_CPUS; apicid++) { for (apicid = 0; apicid < NR_CPUS; apicid++) {
/* /*
......
...@@ -79,6 +79,7 @@ static inline unsigned int do_gettimeoffset_tsc(void) ...@@ -79,6 +79,7 @@ static inline unsigned int do_gettimeoffset_tsc(void)
unsigned long t; unsigned long t;
unsigned long x; unsigned long x;
rdtscll_sync(&t); rdtscll_sync(&t);
if (t < vxtime.last_tsc) t = vxtime.last_tsc; /* hack */
x = ((t - vxtime.last_tsc) * vxtime.tsc_quot) >> 32; x = ((t - vxtime.last_tsc) * vxtime.tsc_quot) >> 32;
return x; return x;
} }
......
...@@ -85,6 +85,7 @@ static force_inline void do_vgettimeofday(struct timeval * tv) ...@@ -85,6 +85,7 @@ static force_inline void do_vgettimeofday(struct timeval * tv)
if (__vxtime.mode == VXTIME_TSC) { if (__vxtime.mode == VXTIME_TSC) {
sync_core(); sync_core();
rdtscll(t); rdtscll(t);
if (t < __vxtime.last_tsc) t = __vxtime.last_tsc;
usec += ((t - __vxtime.last_tsc) * usec += ((t - __vxtime.last_tsc) *
__vxtime.tsc_quot) >> 32; __vxtime.tsc_quot) >> 32;
} else { } else {
......
...@@ -69,6 +69,7 @@ config ACPI_SLEEP ...@@ -69,6 +69,7 @@ config ACPI_SLEEP
bool "Sleep States (EXPERIMENTAL)" bool "Sleep States (EXPERIMENTAL)"
depends on X86 && ACPI depends on X86 && ACPI
depends on EXPERIMENTAL && PM depends on EXPERIMENTAL && PM
select SOFTWARE_SUSPEND
default y default y
---help--- ---help---
This option adds support for ACPI suspend states. This option adds support for ACPI suspend states.
......
...@@ -54,8 +54,6 @@ ...@@ -54,8 +54,6 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/bitops.h> #include <asm/bitops.h>
#include "ide_modes.h"
#if (DISK_RECOVERY_TIME > 0) #if (DISK_RECOVERY_TIME > 0)
#error So the User Has To Fix the Compilation And Stop Hacking Port 0x43. Does anyone ever use this anyway ?? #error So the User Has To Fix the Compilation And Stop Hacking Port 0x43. Does anyone ever use this anyway ??
......
...@@ -22,8 +22,6 @@ ...@@ -22,8 +22,6 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/bitops.h> #include <asm/bitops.h>
#include "ide_modes.h"
/* /*
* IDE library routines. These are plug in code that most * IDE library routines. These are plug in code that most
* drivers can use but occasionally may be weird enough * drivers can use but occasionally may be weird enough
...@@ -170,7 +168,7 @@ u8 ide_rate_filter (u8 mode, u8 speed) ...@@ -170,7 +168,7 @@ u8 ide_rate_filter (u8 mode, u8 speed)
BUG(); BUG();
return min(speed, speed_max[mode]); return min(speed, speed_max[mode]);
#else /* !CONFIG_BLK_DEV_IDEDMA */ #else /* !CONFIG_BLK_DEV_IDEDMA */
return min(speed, XFER_PIO_4); return min(speed, (u8)XFER_PIO_4);
#endif /* CONFIG_BLK_DEV_IDEDMA */ #endif /* CONFIG_BLK_DEV_IDEDMA */
} }
...@@ -188,6 +186,12 @@ int ide_dma_enable (ide_drive_t *drive) ...@@ -188,6 +186,12 @@ int ide_dma_enable (ide_drive_t *drive)
EXPORT_SYMBOL(ide_dma_enable); EXPORT_SYMBOL(ide_dma_enable);
/*
* Standard (generic) timings for PIO modes, from ATA2 specification.
* These timings are for access to the IDE data port register *only*.
* Some drives may specify a mode, while also specifying a different
* value for cycle_time (from drive identification data).
*/
const ide_pio_timings_t ide_pio_timings[6] = { const ide_pio_timings_t ide_pio_timings[6] = {
{ 70, 165, 600 }, /* PIO Mode 0 */ { 70, 165, 600 }, /* PIO Mode 0 */
{ 50, 125, 383 }, /* PIO Mode 1 */ { 50, 125, 383 }, /* PIO Mode 1 */
...@@ -199,6 +203,13 @@ const ide_pio_timings_t ide_pio_timings[6] = { ...@@ -199,6 +203,13 @@ const ide_pio_timings_t ide_pio_timings[6] = {
EXPORT_SYMBOL_GPL(ide_pio_timings); EXPORT_SYMBOL_GPL(ide_pio_timings);
/*
* Shared data/functions for determining best PIO mode for an IDE drive.
* Most of this stuff originally lived in cmd640.c, and changes to the
* ide_pio_blacklist[] table should be made with EXTREME CAUTION to avoid
* breaking the fragile cmd640.c support.
*/
/* /*
* Black list. Some drives incorrectly report their maximal PIO mode, * Black list. Some drives incorrectly report their maximal PIO mode,
* at least in respect to CMD640. Here we keep info on some known drives. * at least in respect to CMD640. Here we keep info on some known drives.
......
...@@ -649,10 +649,13 @@ static void hwif_register (ide_hwif_t *hwif) ...@@ -649,10 +649,13 @@ static void hwif_register (ide_hwif_t *hwif)
/* register with global device tree */ /* register with global device tree */
strlcpy(hwif->gendev.bus_id,hwif->name,BUS_ID_SIZE); strlcpy(hwif->gendev.bus_id,hwif->name,BUS_ID_SIZE);
hwif->gendev.driver_data = hwif; hwif->gendev.driver_data = hwif;
if (hwif->gendev.parent == NULL) {
if (hwif->pci_dev) if (hwif->pci_dev)
hwif->gendev.parent = &hwif->pci_dev->dev; hwif->gendev.parent = &hwif->pci_dev->dev;
else else
hwif->gendev.parent = NULL; /* Would like to do = &device_legacy */ /* Would like to do = &device_legacy */
hwif->gendev.parent = NULL;
}
device_register(&hwif->gendev); device_register(&hwif->gendev);
} }
...@@ -770,8 +773,7 @@ void probe_hwif (ide_hwif_t *hwif) ...@@ -770,8 +773,7 @@ void probe_hwif (ide_hwif_t *hwif)
*/ */
for (unit = 0; unit < MAX_DRIVES; ++unit) { for (unit = 0; unit < MAX_DRIVES; ++unit) {
ide_drive_t *drive = &hwif->drives[unit]; ide_drive_t *drive = &hwif->drives[unit];
drive->dn = ((hwif->channel ? 2 : 0) + unit); drive->dn = (hwif->channel ? 2 : 0) + unit;
hwif->drives[unit].dn = ((hwif->channel ? 2 : 0) + unit);
(void) probe_for_drive(drive); (void) probe_for_drive(drive);
if (drive->present && !hwif->present) { if (drive->present && !hwif->present) {
hwif->present = 1; hwif->present = 1;
...@@ -945,15 +947,10 @@ static int ide_init_queue(ide_drive_t *drive) ...@@ -945,15 +947,10 @@ static int ide_init_queue(ide_drive_t *drive)
if (drive->disk) if (drive->disk)
drive->disk->queue = drive->queue; drive->disk->queue = drive->queue;
return 0; /* needs drive->queue to be set */
}
/*
* Setup the drive for request handling.
*/
static void ide_init_drive(ide_drive_t *drive)
{
ide_toggle_bounce(drive, 1); ide_toggle_bounce(drive, 1);
return 0;
} }
/* /*
...@@ -1068,10 +1065,9 @@ static int init_irq (ide_hwif_t *hwif) ...@@ -1068,10 +1065,9 @@ static int init_irq (ide_hwif_t *hwif)
} }
/* /*
* Link any new drives into the hwgroup, allocate * For any present drive:
* the block device queue and initialize the drive. * - allocate the block device queue
* Note that ide_init_drive sends commands to the new * - link drive into the hwgroup
* drive.
*/ */
for (index = 0; index < MAX_DRIVES; ++index) { for (index = 0; index < MAX_DRIVES; ++index) {
ide_drive_t *drive = &hwif->drives[index]; ide_drive_t *drive = &hwif->drives[index];
...@@ -1092,7 +1088,6 @@ static int init_irq (ide_hwif_t *hwif) ...@@ -1092,7 +1088,6 @@ static int init_irq (ide_hwif_t *hwif)
hwgroup->drive->next = drive; hwgroup->drive->next = drive;
} }
spin_unlock_irq(&ide_lock); spin_unlock_irq(&ide_lock);
ide_init_drive(drive);
} }
#if !defined(__mc68000__) && !defined(CONFIG_APUS) && !defined(__sparc__) #if !defined(__mc68000__) && !defined(CONFIG_APUS) && !defined(__sparc__)
...@@ -1303,31 +1298,6 @@ int hwif_init (ide_hwif_t *hwif) ...@@ -1303,31 +1298,6 @@ int hwif_init (ide_hwif_t *hwif)
EXPORT_SYMBOL(hwif_init); EXPORT_SYMBOL(hwif_init);
int export_ide_init_queue (ide_drive_t *drive)
{
if (ide_init_queue(drive))
return 1;
ide_init_drive(drive);
return 0;
}
EXPORT_SYMBOL(export_ide_init_queue);
u8 export_probe_for_drive (ide_drive_t *drive)
{
return probe_for_drive(drive);
}
EXPORT_SYMBOL(export_probe_for_drive);
int ideprobe_init (void);
static ide_module_t ideprobe_module = {
IDE_PROBE_MODULE,
ideprobe_init,
NULL
};
int ideprobe_init (void) int ideprobe_init (void)
{ {
unsigned int index; unsigned int index;
...@@ -1359,7 +1329,7 @@ int ideprobe_init (void) ...@@ -1359,7 +1329,7 @@ int ideprobe_init (void)
} }
} }
if (!ide_probe) if (!ide_probe)
ide_probe = &ideprobe_module; ide_probe = &ideprobe_init;
MOD_DEC_USE_COUNT; MOD_DEC_USE_COUNT;
return 0; return 0;
} }
......
...@@ -161,8 +161,6 @@ ...@@ -161,8 +161,6 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/bitops.h> #include <asm/bitops.h>
#include "ide_modes.h"
/* default maximum number of failures */ /* default maximum number of failures */
#define IDE_DEFAULT_MAX_FAILURES 1 #define IDE_DEFAULT_MAX_FAILURES 1
...@@ -180,7 +178,9 @@ static int initializing; /* set while initializing built-in drivers */ ...@@ -180,7 +178,9 @@ static int initializing; /* set while initializing built-in drivers */
DECLARE_MUTEX(ide_cfg_sem); DECLARE_MUTEX(ide_cfg_sem);
spinlock_t ide_lock __cacheline_aligned_in_smp = SPIN_LOCK_UNLOCKED; spinlock_t ide_lock __cacheline_aligned_in_smp = SPIN_LOCK_UNLOCKED;
#ifdef CONFIG_BLK_DEV_IDEPCI
static int ide_scan_direction; /* THIS was formerly 2.2.x pci=reverse */ static int ide_scan_direction; /* THIS was formerly 2.2.x pci=reverse */
#endif
#ifdef CONFIG_IDEDMA_AUTO #ifdef CONFIG_IDEDMA_AUTO
int noautodma = 0; int noautodma = 0;
...@@ -190,11 +190,7 @@ int noautodma = 1; ...@@ -190,11 +190,7 @@ int noautodma = 1;
EXPORT_SYMBOL(noautodma); EXPORT_SYMBOL(noautodma);
/* int (*ide_probe)(void);
* ide_modules keeps track of the available IDE chipset/probe/driver modules.
*/
ide_module_t *ide_chipsets;
ide_module_t *ide_probe;
/* /*
* This is declared extern in ide.h, for access by other IDE modules: * This is declared extern in ide.h, for access by other IDE modules:
...@@ -452,7 +448,7 @@ void ide_probe_module (void) ...@@ -452,7 +448,7 @@ void ide_probe_module (void)
(void) request_module("ide-probe-mod"); (void) request_module("ide-probe-mod");
#endif /* (CONFIG_KMOD) && (CONFIG_BLK_DEV_IDE_MODULE) */ #endif /* (CONFIG_KMOD) && (CONFIG_BLK_DEV_IDE_MODULE) */
} else { } else {
(void) ide_probe->init(); (void)ide_probe();
} }
} }
...@@ -1045,21 +1041,6 @@ int ide_register_hw (hw_regs_t *hw, ide_hwif_t **hwifp) ...@@ -1045,21 +1041,6 @@ int ide_register_hw (hw_regs_t *hw, ide_hwif_t **hwifp)
EXPORT_SYMBOL(ide_register_hw); EXPORT_SYMBOL(ide_register_hw);
/*
* Compatibility function with existing drivers. If you want
* something different, use the function above.
*/
int ide_register (int arg1, int arg2, int irq)
{
hw_regs_t hw;
ide_init_hwif_ports(&hw, (unsigned long) arg1, (unsigned long) arg2, NULL);
hw.irq = irq;
return ide_register_hw(&hw, NULL);
}
EXPORT_SYMBOL(ide_register);
/* /*
* Locks for IDE setting functionality * Locks for IDE setting functionality
*/ */
...@@ -1658,11 +1639,15 @@ int generic_ide_ioctl(struct block_device *bdev, unsigned int cmd, ...@@ -1658,11 +1639,15 @@ int generic_ide_ioctl(struct block_device *bdev, unsigned int cmd,
case HDIO_SCAN_HWIF: case HDIO_SCAN_HWIF:
{ {
hw_regs_t hw;
int args[3]; int args[3];
if (!capable(CAP_SYS_RAWIO)) return -EACCES; if (!capable(CAP_SYS_RAWIO)) return -EACCES;
if (copy_from_user(args, (void *)arg, 3 * sizeof(int))) if (copy_from_user(args, (void *)arg, 3 * sizeof(int)))
return -EFAULT; return -EFAULT;
if (ide_register(args[0], args[1], args[2]) == -1) ide_init_hwif_ports(&hw, (unsigned long) args[0],
(unsigned long) args[1], NULL);
hw.irq = args[2];
if (ide_register_hw(&hw, NULL) == -1)
return -EIO; return -EIO;
return 0; return 0;
} }
......
/*
* linux/drivers/ide/ide_modes.h
*
* Copyright (C) 1996 Linus Torvalds, Igor Abramov, and Mark Lord
*/
#ifndef _IDE_MODES_H
#define _IDE_MODES_H
#include <linux/config.h>
/*
* Shared data/functions for determining best PIO mode for an IDE drive.
* Most of this stuff originally lived in cmd640.c, and changes to the
* ide_pio_blacklist[] table should be made with EXTREME CAUTION to avoid
* breaking the fragile cmd640.c support.
*/
/*
* Standard (generic) timings for PIO modes, from ATA2 specification.
* These timings are for access to the IDE data port register *only*.
* Some drives may specify a mode, while also specifying a different
* value for cycle_time (from drive identification data).
*/
typedef struct ide_pio_timings_s {
int setup_time; /* Address setup (ns) minimum */
int active_time; /* Active pulse (ns) minimum */
int cycle_time; /* Cycle time (ns) minimum = (setup + active + recovery) */
} ide_pio_timings_t;
typedef struct ide_pio_data_s {
u8 pio_mode;
u8 use_iordy;
u8 overridden;
u8 blacklisted;
unsigned int cycle_time;
} ide_pio_data_t;
u8 ide_get_best_pio_mode (ide_drive_t *drive, u8 mode_wanted, u8 max_mode, ide_pio_data_t *d);
extern const ide_pio_timings_t ide_pio_timings[6];
#endif /* _IDE_MODES_H */
...@@ -54,8 +54,6 @@ ...@@ -54,8 +54,6 @@
#include <asm/io.h> #include <asm/io.h>
#include "ide_modes.h"
/* port addresses for auto-detection */ /* port addresses for auto-detection */
#define ALI_NUM_PORTS 4 #define ALI_NUM_PORTS 4
static int ports[ALI_NUM_PORTS] __initdata = {0x074, 0x0f4, 0x034, 0x0e4}; static int ports[ALI_NUM_PORTS] __initdata = {0x074, 0x0f4, 0x034, 0x0e4};
......
...@@ -21,8 +21,6 @@ ...@@ -21,8 +21,6 @@
#include <asm/io.h> #include <asm/io.h>
#include "ide_modes.h"
/* /*
* Changing this #undef to #define may solve start up problems in some systems. * Changing this #undef to #define may solve start up problems in some systems.
*/ */
......
...@@ -53,8 +53,6 @@ ...@@ -53,8 +53,6 @@
#include <asm/io.h> #include <asm/io.h>
#include "ide_modes.h"
/* #define DEBUG */ /* remove comments for DEBUG messages */ /* #define DEBUG */ /* remove comments for DEBUG messages */
/* /*
......
...@@ -42,7 +42,6 @@ ...@@ -42,7 +42,6 @@
#include <asm/system.h> #include <asm/system.h>
#include <asm/io.h> #include <asm/io.h>
#include "ide_modes.h"
#include "qd65xx.h" #include "qd65xx.h"
/* /*
......
...@@ -54,8 +54,6 @@ ...@@ -54,8 +54,6 @@
#include <asm/io.h> #include <asm/io.h>
#include "ide_modes.h"
/* /*
* Default speeds. These can be changed with "auto-tune" and/or hdparm. * Default speeds. These can be changed with "auto-tune" and/or hdparm.
*/ */
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
#include <asm/io.h> #include <asm/io.h>
#include "ide_modes.h"
#include "aec62xx.h" #include "aec62xx.h"
#if defined(DISPLAY_AEC62XX_TIMINGS) && defined(CONFIG_PROC_FS) #if defined(DISPLAY_AEC62XX_TIMINGS) && defined(CONFIG_PROC_FS)
......
...@@ -37,7 +37,6 @@ ...@@ -37,7 +37,6 @@
#include <asm/io.h> #include <asm/io.h>
#include "ide_modes.h"
#include "alim15x3.h" #include "alim15x3.h"
/* /*
......
...@@ -115,8 +115,6 @@ ...@@ -115,8 +115,6 @@
#include <asm/io.h> #include <asm/io.h>
#include "ide_modes.h"
/* /*
* This flag is set in ide.c by the parameter: ide0=cmd640_vlb * This flag is set in ide.c by the parameter: ide0=cmd640_vlb
*/ */
......
...@@ -25,7 +25,6 @@ ...@@ -25,7 +25,6 @@
#include <asm/io.h> #include <asm/io.h>
#include "ide_modes.h"
#include "cmd64x.h" #include "cmd64x.h"
#if defined(DISPLAY_CMD64X_TIMINGS) && defined(CONFIG_PROC_FS) #if defined(DISPLAY_CMD64X_TIMINGS) && defined(CONFIG_PROC_FS)
......
...@@ -51,7 +51,6 @@ ...@@ -51,7 +51,6 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include "ide_modes.h"
#include "cs5520.h" #include "cs5520.h"
#if defined(DISPLAY_CS5520_TIMINGS) && defined(CONFIG_PROC_FS) #if defined(DISPLAY_CS5520_TIMINGS) && defined(CONFIG_PROC_FS)
......
...@@ -31,7 +31,6 @@ ...@@ -31,7 +31,6 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include "ide_modes.h"
#include "cs5530.h" #include "cs5530.h"
#if defined(DISPLAY_CS5530_TIMINGS) && defined(CONFIG_PROC_FS) #if defined(DISPLAY_CS5530_TIMINGS) && defined(CONFIG_PROC_FS)
......
...@@ -54,7 +54,6 @@ ...@@ -54,7 +54,6 @@
#include <asm/io.h> #include <asm/io.h>
#include "ide_modes.h"
#include "cy82c693.h" #include "cy82c693.h"
/* /*
...@@ -113,7 +112,7 @@ static void compute_clocks (u8 pio, pio_clocks_t *p_pclk) ...@@ -113,7 +112,7 @@ static void compute_clocks (u8 pio, pio_clocks_t *p_pclk)
/* note: we use the same values for 16bit IOR and IOW /* note: we use the same values for 16bit IOR and IOW
* those are all the same, since I don't have other * those are all the same, since I don't have other
* timings than those from ide_modes.h * timings than those from ide-lib.c
*/ */
p_pclk->time_16r = (u8)clk1; p_pclk->time_16r = (u8)clk1;
......
...@@ -42,7 +42,6 @@ ...@@ -42,7 +42,6 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include "ide_modes.h"
#include "hpt34x.h" #include "hpt34x.h"
#if defined(DISPLAY_HPT34X_TIMINGS) && defined(CONFIG_PROC_FS) #if defined(DISPLAY_HPT34X_TIMINGS) && defined(CONFIG_PROC_FS)
......
...@@ -62,7 +62,6 @@ ...@@ -62,7 +62,6 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include "ide_modes.h"
#include "hpt366.h" #include "hpt366.h"
#if defined(DISPLAY_HPT366_TIMINGS) && defined(CONFIG_PROC_FS) #if defined(DISPLAY_HPT366_TIMINGS) && defined(CONFIG_PROC_FS)
...@@ -989,7 +988,40 @@ static void __init init_hwif_hpt366 (ide_hwif_t *hwif) ...@@ -989,7 +988,40 @@ static void __init init_hwif_hpt366 (ide_hwif_t *hwif)
hwif->intrproc = &hpt3xx_intrproc; hwif->intrproc = &hpt3xx_intrproc;
hwif->maskproc = &hpt3xx_maskproc; hwif->maskproc = &hpt3xx_maskproc;
pci_read_config_byte(hwif->pci_dev, 0x5a, &ata66); /*
* The HPT37x uses the CBLID pins as outputs for MA15/MA16
* address lines to access an external eeprom. To read valid
* cable detect state the pins must be enabled as inputs.
*/
if (hpt_minimum_revision(dev, 8) && PCI_FUNC(dev->devfn) & 1) {
/*
* HPT374 PCI function 1
* - set bit 15 of reg 0x52 to enable TCBLID as input
* - set bit 15 of reg 0x56 to enable FCBLID as input
*/
u16 mcr3, mcr6;
pci_read_config_word(dev, 0x52, &mcr3);
pci_read_config_word(dev, 0x56, &mcr6);
pci_write_config_word(dev, 0x52, mcr3 | 0x8000);
pci_write_config_word(dev, 0x56, mcr6 | 0x8000);
/* now read cable id register */
pci_read_config_byte(dev, 0x5a, &ata66);
pci_write_config_word(dev, 0x52, mcr3);
pci_write_config_word(dev, 0x56, mcr6);
} else if (hpt_minimum_revision(dev, 3)) {
/*
* HPT370/372 and 374 pcifn 0
* - clear bit 0 of 0x5b to enable P/SCBLID as inputs
*/
u8 scr2;
pci_read_config_byte(dev, 0x5b, &scr2);
pci_write_config_byte(dev, 0x5b, scr2 & ~1);
/* now read cable id register */
pci_read_config_byte(dev, 0x5a, &ata66);
pci_write_config_byte(dev, 0x5b, scr2);
} else {
pci_read_config_byte(dev, 0x5a, &ata66);
}
#ifdef DEBUG #ifdef DEBUG
printk("HPT366: reg5ah=0x%02x ATA-%s Cable Port%d\n", printk("HPT366: reg5ah=0x%02x ATA-%s Cable Port%d\n",
......
...@@ -42,7 +42,6 @@ ...@@ -42,7 +42,6 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/it8172/it8172_int.h> #include <asm/it8172/it8172_int.h>
#include "ide_modes.h"
#include "it8172.h" #include "it8172.h"
/* /*
......
...@@ -104,7 +104,6 @@ ...@@ -104,7 +104,6 @@
#include <asm/io.h> #include <asm/io.h>
#include "ide_modes.h"
#include "opti621.h" #include "opti621.h"
#define OPTI621_MAX_PIO 3 #define OPTI621_MAX_PIO 3
......
...@@ -32,7 +32,6 @@ ...@@ -32,7 +32,6 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include "ide_modes.h"
#include "pdc202xx_new.h" #include "pdc202xx_new.h"
#define PDC202_DEBUG_CABLE 0 #define PDC202_DEBUG_CABLE 0
......
...@@ -46,7 +46,6 @@ ...@@ -46,7 +46,6 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include "ide_modes.h"
#include "pdc202xx_old.h" #include "pdc202xx_old.h"
#define PDC202_DEBUG_CABLE 0 #define PDC202_DEBUG_CABLE 0
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include "ide_modes.h"
#include "pdcadma.h" #include "pdcadma.h"
#if defined(DISPLAY_PDCADMA_TIMINGS) && defined(CONFIG_PROC_FS) #if defined(DISPLAY_PDCADMA_TIMINGS) && defined(CONFIG_PROC_FS)
......
...@@ -103,7 +103,6 @@ ...@@ -103,7 +103,6 @@
#include <asm/io.h> #include <asm/io.h>
#include "ide_modes.h"
#include "piix.h" #include "piix.h"
static int no_piix_dma; static int no_piix_dma;
......
...@@ -29,7 +29,6 @@ ...@@ -29,7 +29,6 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include "ide_modes.h"
#include "sc1200.h" #include "sc1200.h"
#define SC1200_REV_A 0x00 #define SC1200_REV_A 0x00
......
...@@ -39,7 +39,6 @@ ...@@ -39,7 +39,6 @@
#include <asm/io.h> #include <asm/io.h>
#include "ide_modes.h"
#include "serverworks.h" #include "serverworks.h"
static u8 svwks_revision = 0; static u8 svwks_revision = 0;
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
#include <asm/io.h> #include <asm/io.h>
#include "ide_modes.h"
#include "siimage.h" #include "siimage.h"
#if defined(DISPLAY_SIIMAGE_TIMINGS) && defined(CONFIG_PROC_FS) #if defined(DISPLAY_SIIMAGE_TIMINGS) && defined(CONFIG_PROC_FS)
......
...@@ -63,7 +63,6 @@ ...@@ -63,7 +63,6 @@
#include <asm/irq.h> #include <asm/irq.h>
#include "ide-timing.h" #include "ide-timing.h"
#include "ide_modes.h"
#include "sis5513.h" #include "sis5513.h"
/* registers layout and init values are chipset family dependant */ /* registers layout and init values are chipset family dependant */
......
...@@ -29,7 +29,6 @@ ...@@ -29,7 +29,6 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/dma.h> #include <asm/dma.h>
#include "ide_modes.h"
#include "sl82c105.h" #include "sl82c105.h"
#undef DEBUG #undef DEBUG
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include <asm/io.h> #include <asm/io.h>
#include "ide_modes.h"
#include "slc90e66.h" #include "slc90e66.h"
#if defined(DISPLAY_SLC90E66_TIMINGS) && defined(CONFIG_PROC_FS) #if defined(DISPLAY_SLC90E66_TIMINGS) && defined(CONFIG_PROC_FS)
......
...@@ -41,7 +41,6 @@ ...@@ -41,7 +41,6 @@
#include <linux/ide.h> #include <linux/ide.h>
#include <linux/init.h> #include <linux/init.h>
#include "ide_modes.h"
#include "triflex.h" #include "triflex.h"
static struct pci_dev *triflex_dev; static struct pci_dev *triflex_dev;
......
...@@ -42,7 +42,6 @@ ...@@ -42,7 +42,6 @@
#include <asm/machdep.h> #include <asm/machdep.h>
#include <asm/irq.h> #include <asm/irq.h>
#include "ide_modes.h"
static int identify (volatile u8 *p); static int identify (volatile u8 *p);
static void print_fixed (volatile u8 *p); static void print_fixed (volatile u8 *p);
static void print_funcid (int func); static void print_funcid (int func);
......
...@@ -42,7 +42,6 @@ ...@@ -42,7 +42,6 @@
#include <linux/adb.h> #include <linux/adb.h>
#include <linux/pmu.h> #include <linux/pmu.h>
#endif #endif
#include "ide_modes.h"
extern void ide_do_request(ide_hwgroup_t *hwgroup, int masked_irq); extern void ide_do_request(ide_hwgroup_t *hwgroup, int masked_irq);
...@@ -942,7 +941,7 @@ pmac_ide_build_sglist(ide_drive_t *drive, struct request *rq) ...@@ -942,7 +941,7 @@ pmac_ide_build_sglist(ide_drive_t *drive, struct request *rq)
if (hwif->sg_dma_active) if (hwif->sg_dma_active)
BUG(); BUG();
nents = blk_rq_map_sg(&drive->queue, rq, sg); nents = blk_rq_map_sg(drive->queue, rq, sg);
if (rq_data_dir(rq) == READ) if (rq_data_dir(rq) == READ)
pmif->sg_dma_direction = PCI_DMA_FROMDEVICE; pmif->sg_dma_direction = PCI_DMA_FROMDEVICE;
......
...@@ -1111,7 +1111,7 @@ SiS190_close(struct net_device *dev) ...@@ -1111,7 +1111,7 @@ SiS190_close(struct net_device *dev)
spin_unlock_irq(&tp->lock); spin_unlock_irq(&tp->lock);
synchronize_irq(); synchronize_irq(dev->irq);
free_irq(dev->irq, dev); free_irq(dev->irq, dev);
SiS190_tx_clear(tp); SiS190_tx_clear(tp);
......
...@@ -90,14 +90,14 @@ static int show_map(struct seq_file *m, void *v) ...@@ -90,14 +90,14 @@ static int show_map(struct seq_file *m, void *v)
ino = inode->i_ino; ino = inode->i_ino;
} }
seq_printf(m, "%0*lx-%0*lx %c%c%c%c %0*lx %02x:%02x %lu %n", seq_printf(m, "%08lx-%08lx %c%c%c%c %08lx %02x:%02x %lu %n",
(int) (2*sizeof(void*)), map->vm_start, map->vm_start,
(int) (2*sizeof(void*)), map->vm_end, map->vm_end,
flags & VM_READ ? 'r' : '-', flags & VM_READ ? 'r' : '-',
flags & VM_WRITE ? 'w' : '-', flags & VM_WRITE ? 'w' : '-',
flags & VM_EXEC ? 'x' : '-', flags & VM_EXEC ? 'x' : '-',
flags & VM_MAYSHARE ? 's' : 'p', flags & VM_MAYSHARE ? 's' : 'p',
(int) (2*sizeof(void*)), map->vm_pgoff << PAGE_SHIFT, map->vm_pgoff << PAGE_SHIFT,
MAJOR(dev), MINOR(dev), ino, &len); MAJOR(dev), MINOR(dev), ino, &len);
if (map->vm_file) { if (map->vm_file) {
......
...@@ -466,7 +466,7 @@ static __inline__ int ffs(int x) ...@@ -466,7 +466,7 @@ static __inline__ int ffs(int x)
__asm__("bsfl %1,%0\n\t" __asm__("bsfl %1,%0\n\t"
"cmovzl %2,%0" "cmovzl %2,%0"
: "=r" (r) : "g" (x), "r" (32)); : "=r" (r) : "g" (x), "r" (-1));
return r+1; return r+1;
} }
......
...@@ -169,7 +169,6 @@ extern int mp_bus_id_to_pci_bus [MAX_MP_BUSSES]; ...@@ -169,7 +169,6 @@ extern int mp_bus_id_to_pci_bus [MAX_MP_BUSSES];
extern cpumask_t mp_bus_to_cpumask [MAX_MP_BUSSES]; extern cpumask_t mp_bus_to_cpumask [MAX_MP_BUSSES];
extern unsigned int boot_cpu_physical_apicid; extern unsigned int boot_cpu_physical_apicid;
extern cpumask_t phys_cpu_present_map;
extern int smp_found_config; extern int smp_found_config;
extern void find_smp_config (void); extern void find_smp_config (void);
extern void get_smp_config (void); extern void get_smp_config (void);
...@@ -198,5 +197,49 @@ extern void mp_config_ioapic_for_sci(int irq); ...@@ -198,5 +197,49 @@ extern void mp_config_ioapic_for_sci(int irq);
extern int using_apic_timer; extern int using_apic_timer;
#define PHYSID_ARRAY_SIZE BITS_TO_LONGS(MAX_APICS)
struct physid_mask
{
unsigned long mask[PHYSID_ARRAY_SIZE];
};
typedef struct physid_mask physid_mask_t;
#define physid_set(physid, map) set_bit(physid, (map).mask)
#define physid_clear(physid, map) clear_bit(physid, (map).mask)
#define physid_isset(physid, map) test_bit(physid, (map).mask)
#define physid_test_and_set(physid, map) test_and_set_bit(physid, (map).mask)
#define physids_and(dst, src1, src2) bitmap_and((dst).mask, (src1).mask, (src2).mask, MAX_APICS)
#define physids_or(dst, src1, src2) bitmap_or((dst).mask, (src1).mask, (src2).mask, MAX_APICS)
#define physids_clear(map) bitmap_clear((map).mask, MAX_APICS)
#define physids_complement(map) bitmap_complement((map).mask, MAX_APICS)
#define physids_empty(map) bitmap_empty((map).mask, MAX_APICS)
#define physids_equal(map1, map2) bitmap_equal((map1).mask, (map2).mask, MAX_APICS)
#define physids_weight(map) bitmap_weight((map).mask, MAX_APICS)
#define physids_shift_right(d, s, n) bitmap_shift_right((d).mask, (s).mask, n, MAX_APICS)
#define physids_shift_left(d, s, n) bitmap_shift_left((d).mask, (s).mask, n, MAX_APICS)
#define physids_coerce(map) ((map).mask[0])
#define physids_promote(physids) \
({ \
physid_mask_t __physid_mask = PHYSID_MASK_NONE; \
__physid_mask.mask[0] = physids; \
__physid_mask; \
})
#define physid_mask_of_physid(physid) \
({ \
physid_mask_t __physid_mask = PHYSID_MASK_NONE; \
physid_set(physid, __physid_mask); \
__physid_mask; \
})
#define PHYSID_MASK_ALL { {[0 ... PHYSID_ARRAY_SIZE-1] = ~0UL} }
#define PHYSID_MASK_NONE { {[0 ... PHYSID_ARRAY_SIZE-1] = 0UL} }
extern physid_mask_t phys_cpu_present_map;
#endif #endif
...@@ -31,6 +31,9 @@ do { \ ...@@ -31,6 +31,9 @@ do { \
memcpy((pcpudst)+__per_cpu_offset(__i), \ memcpy((pcpudst)+__per_cpu_offset(__i), \
(src), (size)); \ (src), (size)); \
} while (0) } while (0)
extern void setup_per_cpu_areas(void);
#else /* ! SMP */ #else /* ! SMP */
#define DEFINE_PER_CPU(type, name) \ #define DEFINE_PER_CPU(type, name) \
...@@ -46,6 +49,4 @@ do { \ ...@@ -46,6 +49,4 @@ do { \
#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(per_cpu__##var) #define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(per_cpu__##var)
#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(per_cpu__##var) #define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(per_cpu__##var)
extern void setup_per_cpu_areas(void);
#endif /* _ASM_X8664_PERCPU_H_ */ #endif /* _ASM_X8664_PERCPU_H_ */
...@@ -225,7 +225,6 @@ struct tss_struct { ...@@ -225,7 +225,6 @@ struct tss_struct {
* 8 bytes, for an extra "long" of ~0UL * 8 bytes, for an extra "long" of ~0UL
*/ */
unsigned long io_bitmap[IO_BITMAP_LONGS + 1]; unsigned long io_bitmap[IO_BITMAP_LONGS + 1];
u32 __cacheline_filler[4]; /* size is 0x100 */
} __attribute__((packed)) ____cacheline_aligned; } __attribute__((packed)) ____cacheline_aligned;
struct thread_struct { struct thread_struct {
......
...@@ -36,7 +36,6 @@ struct pt_regs; ...@@ -36,7 +36,6 @@ struct pt_regs;
*/ */
extern void smp_alloc_memory(void); extern void smp_alloc_memory(void);
extern cpumask_t phys_cpu_present_map;
extern cpumask_t cpu_online_map; extern cpumask_t cpu_online_map;
extern volatile unsigned long smp_invalidate_needed; extern volatile unsigned long smp_invalidate_needed;
extern int pic_mode; extern int pic_mode;
......
...@@ -44,7 +44,7 @@ extern unsigned long saved_context_eflags; ...@@ -44,7 +44,7 @@ extern unsigned long saved_context_eflags;
:"r" ((thread)->debugreg##register)) :"r" ((thread)->debugreg##register))
extern void fix_processor_context(void); extern void fix_processor_context(void);
extern void do_magic(int resume); extern int do_magic(int resume);
#ifdef CONFIG_ACPI_SLEEP #ifdef CONFIG_ACPI_SLEEP
extern unsigned long saved_eip; extern unsigned long saved_eip;
......
...@@ -10,21 +10,18 @@ ...@@ -10,21 +10,18 @@
/* Map the K8 CPU local memory controllers to a simple 1:1 CPU:NODE topology */ /* Map the K8 CPU local memory controllers to a simple 1:1 CPU:NODE topology */
extern int fake_node; extern int fake_node;
extern cpumask_t cpu_online_map; extern unsigned long cpu_online_map;
#define cpu_to_node(cpu) (fake_node ? 0 : (cpu)) #define cpu_to_node(cpu) (fake_node ? 0 : (cpu))
#define memblk_to_node(memblk) (fake_node ? 0 : (memblk)) #define memblk_to_node(memblk) (fake_node ? 0 : (memblk))
#define parent_node(node) (node) #define parent_node(node) (node)
#define node_to_first_cpu(node) (fake_node ? 0 : (node)) #define node_to_first_cpu(node) (fake_node ? 0 : (node))
#define node_to_cpu_mask(node) (fake_node ? cpu_online_map : cpumask_of_cpu(node)) #define node_to_cpu_mask(node) (fake_node ? cpu_online_map : (1UL << (node)))
#define node_to_memblk(node) (node) #define node_to_memblk(node) (node)
static inline cpumask_t pcibus_to_cpumask(int bus) static inline unsigned long pcibus_to_cpumask(int bus)
{ {
cpumask_t ret; return mp_bus_to_cpumask[bus] & cpu_online_map;
cpus_and(ret, mp_bus_to_cpumask[bus], cpu_online_map);
return ret;
} }
#define NODE_BALANCE_RATE 30 /* CHECKME */ #define NODE_BALANCE_RATE 30 /* CHECKME */
......
...@@ -1242,21 +1242,6 @@ typedef struct ide_driver_s { ...@@ -1242,21 +1242,6 @@ typedef struct ide_driver_s {
extern int generic_ide_ioctl(struct block_device *, unsigned, unsigned long); extern int generic_ide_ioctl(struct block_device *, unsigned, unsigned long);
/*
* IDE modules.
*/
#define IDE_CHIPSET_MODULE 0 /* not supported yet */
#define IDE_PROBE_MODULE 1
typedef int (ide_module_init_proc)(void);
typedef struct ide_module_s {
int type;
ide_module_init_proc *init;
void *info;
struct ide_module_s *next;
} ide_module_t;
typedef struct ide_devices_s { typedef struct ide_devices_s {
char name[4]; /* hdX */ char name[4]; /* hdX */
unsigned attached : 1; /* native */ unsigned attached : 1; /* native */
...@@ -1274,8 +1259,7 @@ typedef struct ide_devices_s { ...@@ -1274,8 +1259,7 @@ typedef struct ide_devices_s {
*/ */
#ifndef _IDE_C #ifndef _IDE_C
extern ide_hwif_t ide_hwifs[]; /* master data repository */ extern ide_hwif_t ide_hwifs[]; /* master data repository */
extern ide_module_t *ide_chipsets; extern int (*ide_probe)(void);
extern ide_module_t *ide_probe;
extern ide_devices_t *idedisk; extern ide_devices_t *idedisk;
extern ide_devices_t *idecd; extern ide_devices_t *idecd;
...@@ -1772,8 +1756,6 @@ extern int ide_hwif_request_regions(ide_hwif_t *hwif); ...@@ -1772,8 +1756,6 @@ extern int ide_hwif_request_regions(ide_hwif_t *hwif);
extern void ide_hwif_release_regions(ide_hwif_t* hwif); extern void ide_hwif_release_regions(ide_hwif_t* hwif);
extern void ide_unregister (unsigned int index); extern void ide_unregister (unsigned int index);
extern int export_ide_init_queue(ide_drive_t *);
extern u8 export_probe_for_drive(ide_drive_t *);
extern int probe_hwif_init(ide_hwif_t *); extern int probe_hwif_init(ide_hwif_t *);
static inline void *ide_get_hwifdata (ide_hwif_t * hwif) static inline void *ide_get_hwifdata (ide_hwif_t * hwif)
...@@ -1794,6 +1776,24 @@ extern char *ide_xfer_verbose(u8 xfer_rate); ...@@ -1794,6 +1776,24 @@ extern char *ide_xfer_verbose(u8 xfer_rate);
extern void ide_toggle_bounce(ide_drive_t *drive, int on); extern void ide_toggle_bounce(ide_drive_t *drive, int on);
extern int ide_set_xfer_rate(ide_drive_t *drive, u8 rate); extern int ide_set_xfer_rate(ide_drive_t *drive, u8 rate);
typedef struct ide_pio_timings_s {
int setup_time; /* Address setup (ns) minimum */
int active_time; /* Active pulse (ns) minimum */
int cycle_time; /* Cycle time (ns) minimum = (setup + active + recovery) */
} ide_pio_timings_t;
typedef struct ide_pio_data_s {
u8 pio_mode;
u8 use_iordy;
u8 overridden;
u8 blacklisted;
unsigned int cycle_time;
} ide_pio_data_t;
extern u8 ide_get_best_pio_mode (ide_drive_t *drive, u8 mode_wanted, u8 max_mode, ide_pio_data_t *d);
extern const ide_pio_timings_t ide_pio_timings[6];
extern spinlock_t ide_lock; extern spinlock_t ide_lock;
extern struct semaphore ide_cfg_sem; extern struct semaphore ide_cfg_sem;
/* /*
......
...@@ -707,7 +707,7 @@ asmlinkage long sys_msgsnd (int msqid, struct msgbuf *msgp, size_t msgsz, int ms ...@@ -707,7 +707,7 @@ asmlinkage long sys_msgsnd (int msqid, struct msgbuf *msgp, size_t msgsz, int ms
goto retry; goto retry;
} }
msq->q_lspid = current->pid; msq->q_lspid = current->tgid;
msq->q_stime = get_seconds(); msq->q_stime = get_seconds();
if(!pipelined_send(msq,msg)) { if(!pipelined_send(msq,msg)) {
...@@ -801,7 +801,7 @@ asmlinkage long sys_msgrcv (int msqid, struct msgbuf *msgp, size_t msgsz, ...@@ -801,7 +801,7 @@ asmlinkage long sys_msgrcv (int msqid, struct msgbuf *msgp, size_t msgsz,
list_del(&msg->m_list); list_del(&msg->m_list);
msq->q_qnum--; msq->q_qnum--;
msq->q_rtime = get_seconds(); msq->q_rtime = get_seconds();
msq->q_lrpid = current->pid; msq->q_lrpid = current->tgid;
msq->q_cbytes -= msg->m_ts; msq->q_cbytes -= msg->m_ts;
atomic_sub(msg->m_ts,&msg_bytes); atomic_sub(msg->m_ts,&msg_bytes);
atomic_dec(&msg_hdrs); atomic_dec(&msg_hdrs);
......
...@@ -664,7 +664,7 @@ static int semctl_main(int semid, int semnum, int cmd, int version, union semun ...@@ -664,7 +664,7 @@ static int semctl_main(int semid, int semnum, int cmd, int version, union semun
for (un = sma->undo; un; un = un->id_next) for (un = sma->undo; un; un = un->id_next)
un->semadj[semnum] = 0; un->semadj[semnum] = 0;
curr->semval = val; curr->semval = val;
curr->sempid = current->pid; curr->sempid = current->tgid;
sma->sem_ctime = get_seconds(); sma->sem_ctime = get_seconds();
/* maybe some queued-up processes were waiting for this */ /* maybe some queued-up processes were waiting for this */
update_queue(sma); update_queue(sma);
...@@ -1052,7 +1052,7 @@ asmlinkage long sys_semtimedop(int semid, struct sembuf __user *tsops, ...@@ -1052,7 +1052,7 @@ asmlinkage long sys_semtimedop(int semid, struct sembuf __user *tsops,
if (error) if (error)
goto out_unlock_free; goto out_unlock_free;
error = try_atomic_semop (sma, sops, nsops, un, current->pid); error = try_atomic_semop (sma, sops, nsops, un, current->tgid);
if (error <= 0) if (error <= 0)
goto update; goto update;
...@@ -1064,7 +1064,7 @@ asmlinkage long sys_semtimedop(int semid, struct sembuf __user *tsops, ...@@ -1064,7 +1064,7 @@ asmlinkage long sys_semtimedop(int semid, struct sembuf __user *tsops,
queue.sops = sops; queue.sops = sops;
queue.nsops = nsops; queue.nsops = nsops;
queue.undo = un; queue.undo = un;
queue.pid = current->pid; queue.pid = current->tgid;
queue.id = semid; queue.id = semid;
if (alter) if (alter)
append_to_queue(sma ,&queue); append_to_queue(sma ,&queue);
...@@ -1206,7 +1206,7 @@ void exit_sem(struct task_struct *tsk) ...@@ -1206,7 +1206,7 @@ void exit_sem(struct task_struct *tsk)
sem->semval += u->semadj[i]; sem->semval += u->semadj[i];
if (sem->semval < 0) if (sem->semval < 0)
sem->semval = 0; /* shouldn't happen */ sem->semval = 0; /* shouldn't happen */
sem->sempid = current->pid; sem->sempid = current->tgid;
} }
} }
sma->sem_otime = get_seconds(); sma->sem_otime = get_seconds();
......
...@@ -89,7 +89,7 @@ static inline void shm_inc (int id) { ...@@ -89,7 +89,7 @@ static inline void shm_inc (int id) {
if(!(shp = shm_lock(id))) if(!(shp = shm_lock(id)))
BUG(); BUG();
shp->shm_atim = get_seconds(); shp->shm_atim = get_seconds();
shp->shm_lprid = current->pid; shp->shm_lprid = current->tgid;
shp->shm_nattch++; shp->shm_nattch++;
shm_unlock(shp); shm_unlock(shp);
} }
...@@ -136,7 +136,7 @@ static void shm_close (struct vm_area_struct *shmd) ...@@ -136,7 +136,7 @@ static void shm_close (struct vm_area_struct *shmd)
/* remove from the list of attaches of the shm segment */ /* remove from the list of attaches of the shm segment */
if(!(shp = shm_lock(id))) if(!(shp = shm_lock(id)))
BUG(); BUG();
shp->shm_lprid = current->pid; shp->shm_lprid = current->tgid;
shp->shm_dtim = get_seconds(); shp->shm_dtim = get_seconds();
shp->shm_nattch--; shp->shm_nattch--;
if(shp->shm_nattch == 0 && if(shp->shm_nattch == 0 &&
...@@ -209,7 +209,7 @@ static int newseg (key_t key, int shmflg, size_t size) ...@@ -209,7 +209,7 @@ static int newseg (key_t key, int shmflg, size_t size)
if(id == -1) if(id == -1)
goto no_id; goto no_id;
shp->shm_cprid = current->pid; shp->shm_cprid = current->tgid;
shp->shm_lprid = 0; shp->shm_lprid = 0;
shp->shm_atim = shp->shm_dtim = 0; shp->shm_atim = shp->shm_dtim = 0;
shp->shm_ctim = get_seconds(); shp->shm_ctim = get_seconds();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment