Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
759b650f
Commit
759b650f
authored
Feb 17, 2006
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'release' of
git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6
parents
69454e69
8f8b1138
Changes
31
Hide whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
275 additions
and
248 deletions
+275
-248
Documentation/cpu-hotplug.txt
Documentation/cpu-hotplug.txt
+12
-2
arch/ia64/kernel/acpi.c
arch/ia64/kernel/acpi.c
+53
-0
arch/ia64/kernel/entry.S
arch/ia64/kernel/entry.S
+3
-1
arch/ia64/kernel/ia64_ksyms.c
arch/ia64/kernel/ia64_ksyms.c
+0
-15
arch/ia64/kernel/setup.c
arch/ia64/kernel/setup.c
+4
-0
arch/ia64/kernel/smpboot.c
arch/ia64/kernel/smpboot.c
+1
-4
arch/ia64/kernel/time.c
arch/ia64/kernel/time.c
+17
-22
arch/ia64/kernel/traps.c
arch/ia64/kernel/traps.c
+8
-0
arch/ia64/sn/kernel/io_init.c
arch/ia64/sn/kernel/io_init.c
+40
-57
arch/ia64/sn/kernel/setup.c
arch/ia64/sn/kernel/setup.c
+3
-1
arch/ia64/sn/kernel/sn2/prominfo_proc.c
arch/ia64/sn/kernel/sn2/prominfo_proc.c
+13
-12
arch/ia64/sn/kernel/sn2/sn2_smp.c
arch/ia64/sn/kernel/sn2/sn2_smp.c
+17
-18
arch/ia64/sn/kernel/sn2/sn_proc_fs.c
arch/ia64/sn/kernel/sn2/sn_proc_fs.c
+11
-11
arch/ia64/sn/kernel/sn2/timer.c
arch/ia64/sn/kernel/sn2/timer.c
+19
-0
arch/ia64/sn/kernel/sn2/timer_interrupt.c
arch/ia64/sn/kernel/sn2/timer_interrupt.c
+1
-6
arch/ia64/sn/kernel/tiocx.c
arch/ia64/sn/kernel/tiocx.c
+1
-3
arch/ia64/sn/kernel/xpc_channel.c
arch/ia64/sn/kernel/xpc_channel.c
+5
-3
arch/ia64/sn/kernel/xpc_main.c
arch/ia64/sn/kernel/xpc_main.c
+13
-7
arch/ia64/sn/pci/pci_dma.c
arch/ia64/sn/pci/pci_dma.c
+8
-8
arch/ia64/sn/pci/pcibr/pcibr_ate.c
arch/ia64/sn/pci/pcibr/pcibr_ate.c
+8
-21
arch/ia64/sn/pci/pcibr/pcibr_dma.c
arch/ia64/sn/pci/pcibr/pcibr_dma.c
+4
-10
arch/ia64/sn/pci/pcibr/pcibr_provider.c
arch/ia64/sn/pci/pcibr/pcibr_provider.c
+6
-3
drivers/ide/pci/sgiioc4.c
drivers/ide/pci/sgiioc4.c
+0
-5
include/asm-ia64/acpi.h
include/asm-ia64/acpi.h
+2
-0
include/asm-ia64/machvec_sn2.h
include/asm-ia64/machvec_sn2.h
+1
-6
include/asm-ia64/sn/arch.h
include/asm-ia64/sn/arch.h
+1
-1
include/asm-ia64/sn/bte.h
include/asm-ia64/sn/bte.h
+3
-3
include/asm-ia64/sn/pcibr_provider.h
include/asm-ia64/sn/pcibr_provider.h
+1
-13
include/asm-ia64/sn/sn_feature_sets.h
include/asm-ia64/sn/sn_feature_sets.h
+0
-3
include/asm-ia64/sn/xpc.h
include/asm-ia64/sn/xpc.h
+18
-13
include/asm-ia64/timex.h
include/asm-ia64/timex.h
+2
-0
No files found.
Documentation/cpu-hotplug.txt
View file @
759b650f
...
...
@@ -44,10 +44,20 @@ maxcpus=n Restrict boot time cpus to n. Say if you have 4 cpus, using
maxcpus=2 will only boot 2. You can choose to bring the
other cpus later online, read FAQ's for more info.
additional_cpus=n [x86_64 only] use this to limit hotpluggable cpus.
This option sets
additional_cpus*=n Use this to limit hotpluggable cpus. This option sets
cpu_possible_map = cpu_present_map + additional_cpus
(*) Option valid only for following architectures
- x86_64, ia64
ia64 and x86_64 use the number of disabled local apics in ACPI tables MADT
to determine the number of potentially hot-pluggable cpus. The implementation
should only rely on this to count the #of cpus, but *MUST* not rely on the
apicid values in those tables for disabled apics. In the event BIOS doesnt
mark such hot-pluggable cpus as disabled entries, one could use this
parameter "additional_cpus=x" to represent those cpus in the cpu_possible_map.
CPU maps and such
-----------------
[More on cpumaps and primitive to manipulate, please check
...
...
arch/ia64/kernel/acpi.c
View file @
759b650f
...
...
@@ -761,6 +761,59 @@ int acpi_map_cpu2node(acpi_handle handle, int cpu, long physid)
return
(
0
);
}
int
additional_cpus
__initdata
=
-
1
;
static
__init
int
setup_additional_cpus
(
char
*
s
)
{
if
(
s
)
additional_cpus
=
simple_strtol
(
s
,
NULL
,
0
);
return
0
;
}
early_param
(
"additional_cpus"
,
setup_additional_cpus
);
/*
* cpu_possible_map should be static, it cannot change as cpu's
* are onlined, or offlined. The reason is per-cpu data-structures
* are allocated by some modules at init time, and dont expect to
* do this dynamically on cpu arrival/departure.
* cpu_present_map on the other hand can change dynamically.
* In case when cpu_hotplug is not compiled, then we resort to current
* behaviour, which is cpu_possible == cpu_present.
* - Ashok Raj
*
* Three ways to find out the number of additional hotplug CPUs:
* - If the BIOS specified disabled CPUs in ACPI/mptables use that.
* - The user can overwrite it with additional_cpus=NUM
* - Otherwise don't reserve additional CPUs.
*/
__init
void
prefill_possible_map
(
void
)
{
int
i
;
int
possible
,
disabled_cpus
;
disabled_cpus
=
total_cpus
-
available_cpus
;
if
(
additional_cpus
==
-
1
)
{
if
(
disabled_cpus
>
0
)
additional_cpus
=
disabled_cpus
;
else
additional_cpus
=
0
;
}
possible
=
available_cpus
+
additional_cpus
;
if
(
possible
>
NR_CPUS
)
possible
=
NR_CPUS
;
printk
(
KERN_INFO
"SMP: Allowing %d CPUs, %d hotplug CPUs
\n
"
,
possible
,
max
((
possible
-
available_cpus
),
0
));
for
(
i
=
0
;
i
<
possible
;
i
++
)
cpu_set
(
i
,
cpu_possible_map
);
}
int
acpi_map_lsapic
(
acpi_handle
handle
,
int
*
pcpu
)
{
struct
acpi_buffer
buffer
=
{
ACPI_ALLOCATE_BUFFER
,
NULL
};
...
...
arch/ia64/kernel/entry.S
View file @
759b650f
...
...
@@ -569,7 +569,9 @@ GLOBAL_ENTRY(ia64_trace_syscall)
.
mem
.
offset
0,0
; st8.spill [r2]=r8 // store return value in slot for r8
.
mem
.
offset
8,0
; st8.spill [r3]=r10 // clear error indication in slot for r10
br.call.sptk.many
rp
=
syscall_trace_leave
//
give
parent
a
chance
to
catch
return
value
.
ret3
:
br.cond.sptk
.
work_pending_syscall_end
.
ret3
:
(
pUStk
)
cmp.eq.unc
p6
,
p0
=
r0
,
r0
//
p6
<-
pUStk
br.cond.sptk
.
work_pending_syscall_end
strace_error
:
ld8
r3
=[
r2
]
//
load
pt_regs
.
r8
...
...
arch/ia64/kernel/ia64_ksyms.c
View file @
759b650f
...
...
@@ -10,23 +10,8 @@
#include <linux/string.h>
EXPORT_SYMBOL
(
memset
);
EXPORT_SYMBOL
(
memchr
);
EXPORT_SYMBOL
(
memcmp
);
EXPORT_SYMBOL
(
memcpy
);
EXPORT_SYMBOL
(
memmove
);
EXPORT_SYMBOL
(
memscan
);
EXPORT_SYMBOL
(
strcat
);
EXPORT_SYMBOL
(
strchr
);
EXPORT_SYMBOL
(
strcmp
);
EXPORT_SYMBOL
(
strcpy
);
EXPORT_SYMBOL
(
strlen
);
EXPORT_SYMBOL
(
strncat
);
EXPORT_SYMBOL
(
strncmp
);
EXPORT_SYMBOL
(
strncpy
);
EXPORT_SYMBOL
(
strnlen
);
EXPORT_SYMBOL
(
strrchr
);
EXPORT_SYMBOL
(
strstr
);
EXPORT_SYMBOL
(
strpbrk
);
#include <asm/checksum.h>
EXPORT_SYMBOL
(
ip_fast_csum
);
/* hand-coded assembly */
...
...
arch/ia64/kernel/setup.c
View file @
759b650f
...
...
@@ -430,6 +430,7 @@ setup_arch (char **cmdline_p)
if
(
early_console_setup
(
*
cmdline_p
)
==
0
)
mark_bsp_online
();
parse_early_param
();
#ifdef CONFIG_ACPI
/* Initialize the ACPI boot-time table parser */
acpi_table_init
();
...
...
@@ -688,6 +689,9 @@ void
setup_per_cpu_areas
(
void
)
{
/* start_kernel() requires this... */
#ifdef CONFIG_ACPI_HOTPLUG_CPU
prefill_possible_map
();
#endif
}
/*
...
...
arch/ia64/kernel/smpboot.c
View file @
759b650f
...
...
@@ -129,7 +129,7 @@ DEFINE_PER_CPU(int, cpu_state);
/* Bitmasks of currently online, and possible CPUs */
cpumask_t
cpu_online_map
;
EXPORT_SYMBOL
(
cpu_online_map
);
cpumask_t
cpu_possible_map
;
cpumask_t
cpu_possible_map
=
CPU_MASK_NONE
;
EXPORT_SYMBOL
(
cpu_possible_map
);
cpumask_t
cpu_core_map
[
NR_CPUS
]
__cacheline_aligned
;
...
...
@@ -506,9 +506,6 @@ smp_build_cpu_map (void)
for
(
cpu
=
0
;
cpu
<
NR_CPUS
;
cpu
++
)
{
ia64_cpu_to_sapicid
[
cpu
]
=
-
1
;
#ifdef CONFIG_HOTPLUG_CPU
cpu_set
(
cpu
,
cpu_possible_map
);
#endif
}
ia64_cpu_to_sapicid
[
0
]
=
boot_cpu_id
;
...
...
arch/ia64/kernel/time.c
View file @
759b650f
...
...
@@ -250,32 +250,27 @@ time_init (void)
set_normalized_timespec
(
&
wall_to_monotonic
,
-
xtime
.
tv_sec
,
-
xtime
.
tv_nsec
);
}
#define SMALLUSECS 100
void
udelay
(
unsigned
long
usecs
)
/*
* Generic udelay assumes that if preemption is allowed and the thread
* migrates to another CPU, that the ITC values are synchronized across
* all CPUs.
*/
static
void
ia64_itc_udelay
(
unsigned
long
usecs
)
{
unsigned
long
start
;
unsigned
long
cycles
;
unsigned
long
smallusecs
;
unsigned
long
start
=
ia64_get_itc
();
unsigned
long
end
=
start
+
usecs
*
local_cpu_data
->
cyc_per_usec
;
/*
* Execute the non-preemptible delay loop (because the ITC might
* not be synchronized between CPUS) in relatively short time
* chunks, allowing preemption between the chunks.
*/
while
(
usecs
>
0
)
{
smallusecs
=
(
usecs
>
SMALLUSECS
)
?
SMALLUSECS
:
usecs
;
preempt_disable
();
cycles
=
smallusecs
*
local_cpu_data
->
cyc_per_usec
;
start
=
ia64_get_itc
();
while
(
time_before
(
ia64_get_itc
(),
end
))
cpu_relax
();
}
while
(
ia64_get_itc
()
-
start
<
cycles
)
cpu_relax
();
void
(
*
ia64_udelay
)(
unsigned
long
usecs
)
=
&
ia64_itc_udelay
;
preempt_enable
();
usecs
-=
smallusecs
;
}
void
udelay
(
unsigned
long
usecs
)
{
(
*
ia64_udelay
)(
usecs
);
}
EXPORT_SYMBOL
(
udelay
);
...
...
arch/ia64/kernel/traps.c
View file @
759b650f
...
...
@@ -16,6 +16,7 @@
#include <linux/module.h>
/* for EXPORT_SYMBOL */
#include <linux/hardirq.h>
#include <linux/kprobes.h>
#include <linux/delay.h>
/* for ssleep() */
#include <asm/fpswa.h>
#include <asm/ia32.h>
...
...
@@ -116,6 +117,13 @@ die (const char *str, struct pt_regs *regs, long err)
bust_spinlocks
(
0
);
die
.
lock_owner
=
-
1
;
spin_unlock_irq
(
&
die
.
lock
);
if
(
panic_on_oops
)
{
printk
(
KERN_EMERG
"Fatal exception: panic in 5 seconds
\n
"
);
ssleep
(
5
);
panic
(
"Fatal exception"
);
}
do_exit
(
SIGSEGV
);
}
...
...
arch/ia64/sn/kernel/io_init.c
View file @
759b650f
...
...
@@ -23,6 +23,10 @@
#include "xtalk/hubdev.h"
#include "xtalk/xwidgetdev.h"
extern
void
sn_init_cpei_timer
(
void
);
extern
void
register_sn_procfs
(
void
);
static
struct
list_head
sn_sysdata_list
;
/* sysdata list struct */
...
...
@@ -40,12 +44,12 @@ struct brick {
struct
slab_info
slab_info
[
MAX_SLABS
+
1
];
};
int
sn_ioif_inited
=
0
;
/* SN I/O infrastructure initialized? */
int
sn_ioif_inited
;
/* SN I/O infrastructure initialized? */
struct
sn_pcibus_provider
*
sn_pci_provider
[
PCIIO_ASIC_MAX_TYPES
];
/* indexed by asic type */
static
int
max_segment_number
=
0
;
/* Default highest segment number */
static
int
max_pcibus_number
=
255
;
/* Default highest pci bus number */
static
int
max_segment_number
;
/* Default highest segment number */
static
int
max_pcibus_number
=
255
;
/* Default highest pci bus number */
/*
* Hooks and struct for unsupported pci providers
...
...
@@ -84,7 +88,6 @@ static inline u64
sal_get_device_dmaflush_list
(
u64
nasid
,
u64
widget_num
,
u64
device_num
,
u64
address
)
{
struct
ia64_sal_retval
ret_stuff
;
ret_stuff
.
status
=
0
;
ret_stuff
.
v0
=
0
;
...
...
@@ -94,7 +97,6 @@ sal_get_device_dmaflush_list(u64 nasid, u64 widget_num, u64 device_num,
(
u64
)
nasid
,
(
u64
)
widget_num
,
(
u64
)
device_num
,
(
u64
)
address
,
0
,
0
,
0
);
return
ret_stuff
.
status
;
}
/*
...
...
@@ -102,7 +104,6 @@ sal_get_device_dmaflush_list(u64 nasid, u64 widget_num, u64 device_num,
*/
static
inline
u64
sal_get_hubdev_info
(
u64
handle
,
u64
address
)
{
struct
ia64_sal_retval
ret_stuff
;
ret_stuff
.
status
=
0
;
ret_stuff
.
v0
=
0
;
...
...
@@ -118,7 +119,6 @@ static inline u64 sal_get_hubdev_info(u64 handle, u64 address)
*/
static
inline
u64
sal_get_pcibus_info
(
u64
segment
,
u64
busnum
,
u64
address
)
{
struct
ia64_sal_retval
ret_stuff
;
ret_stuff
.
status
=
0
;
ret_stuff
.
v0
=
0
;
...
...
@@ -215,7 +215,7 @@ static void __init sn_fixup_ionodes(void)
struct
hubdev_info
*
hubdev
;
u64
status
;
u64
nasid
;
int
i
,
widget
,
device
;
int
i
,
widget
,
device
,
size
;
/*
* Get SGI Specific HUB chipset information.
...
...
@@ -251,48 +251,37 @@ static void __init sn_fixup_ionodes(void)
if
(
!
hubdev
->
hdi_flush_nasid_list
.
widget_p
)
continue
;
size
=
(
HUB_WIDGET_ID_MAX
+
1
)
*
sizeof
(
struct
sn_flush_device_kernel
*
);
hubdev
->
hdi_flush_nasid_list
.
widget_p
=
kmalloc
((
HUB_WIDGET_ID_MAX
+
1
)
*
sizeof
(
struct
sn_flush_device_kernel
*
),
GFP_KERNEL
);
memset
(
hubdev
->
hdi_flush_nasid_list
.
widget_p
,
0x0
,
(
HUB_WIDGET_ID_MAX
+
1
)
*
sizeof
(
struct
sn_flush_device_kernel
*
));
kzalloc
(
size
,
GFP_KERNEL
);
if
(
!
hubdev
->
hdi_flush_nasid_list
.
widget_p
)
BUG
();
for
(
widget
=
0
;
widget
<=
HUB_WIDGET_ID_MAX
;
widget
++
)
{
sn_flush_device_kernel
=
kmalloc
(
DEV_PER_WIDGET
*
sizeof
(
struct
sn_flush_device_kernel
),
GFP_KERNEL
);
size
=
DEV_PER_WIDGET
*
sizeof
(
struct
sn_flush_device_kernel
);
sn_flush_device_kernel
=
kzalloc
(
size
,
GFP_KERNEL
);
if
(
!
sn_flush_device_kernel
)
BUG
();
memset
(
sn_flush_device_kernel
,
0x0
,
DEV_PER_WIDGET
*
sizeof
(
struct
sn_flush_device_kernel
));
dev_entry
=
sn_flush_device_kernel
;
for
(
device
=
0
;
device
<
DEV_PER_WIDGET
;
device
++
,
dev_entry
++
)
{
dev_entry
->
common
=
kmalloc
(
sizeof
(
struct
sn_flush_device_common
),
GFP_KERNEL
);
size
=
sizeof
(
struct
sn_flush_device_common
);
dev_entry
->
common
=
kzalloc
(
size
,
GFP_KERNEL
);
if
(
!
dev_entry
->
common
)
BUG
();
memset
(
dev_entry
->
common
,
0x0
,
sizeof
(
struct
sn_flush_device_common
));
if
(
sn_prom_feature_available
(
PRF_DEVICE_FLUSH_LIST
))
status
=
sal_get_device_dmaflush_list
(
nasid
,
widget
,
device
,
(
u64
)(
dev_entry
->
common
));
nasid
,
widget
,
device
,
(
u64
)(
dev_entry
->
common
));
else
status
=
sn_device_fixup_war
(
nasid
,
widget
,
device
,
dev_entry
->
common
);
widget
,
device
,
dev_entry
->
common
);
if
(
status
!=
SALRET_OK
)
panic
(
"SAL call failed: %s
\n
"
,
ia64_sal_strerror
(
status
));
...
...
@@ -383,13 +372,12 @@ void sn_pci_fixup_slot(struct pci_dev *dev)
pci_dev_get
(
dev
);
/* for the sysdata pointer */
pcidev_info
=
kzalloc
(
sizeof
(
struct
pcidev_info
),
GFP_KERNEL
);
if
(
pcidev_info
<=
0
)
if
(
!
pcidev_info
)
BUG
();
/* Cannot afford to run out of memory */
sn_irq_info
=
k
m
alloc
(
sizeof
(
struct
sn_irq_info
),
GFP_KERNEL
);
if
(
sn_irq_info
<=
0
)
sn_irq_info
=
k
z
alloc
(
sizeof
(
struct
sn_irq_info
),
GFP_KERNEL
);
if
(
!
sn_irq_info
)
BUG
();
/* Cannot afford to run out of memory */
memset
(
sn_irq_info
,
0
,
sizeof
(
struct
sn_irq_info
));
/* Call to retrieve pci device information needed by kernel. */
status
=
sal_get_pcidev_info
((
u64
)
segment
,
(
u64
)
dev
->
bus
->
number
,
...
...
@@ -482,13 +470,13 @@ void sn_pci_fixup_slot(struct pci_dev *dev)
*/
void
sn_pci_controller_fixup
(
int
segment
,
int
busnum
,
struct
pci_bus
*
bus
)
{
int
status
=
0
;
int
status
;
int
nasid
,
cnode
;
struct
pci_controller
*
controller
;
struct
sn_pci_controller
*
sn_controller
;
struct
pcibus_bussoft
*
prom_bussoft_ptr
;
struct
hubdev_info
*
hubdev_info
;
void
*
provider_soft
=
NULL
;
void
*
provider_soft
;
struct
sn_pcibus_provider
*
provider
;
status
=
sal_get_pcibus_info
((
u64
)
segment
,
(
u64
)
busnum
,
...
...
@@ -535,6 +523,8 @@ void sn_pci_controller_fixup(int segment, int busnum, struct pci_bus *bus)
bus
->
sysdata
=
controller
;
if
(
provider
->
bus_fixup
)
provider_soft
=
(
*
provider
->
bus_fixup
)
(
prom_bussoft_ptr
,
controller
);
else
provider_soft
=
NULL
;
if
(
provider_soft
==
NULL
)
{
/* fixup failed or not applicable */
...
...
@@ -638,13 +628,8 @@ void sn_bus_free_sysdata(void)
static
int
__init
sn_pci_init
(
void
)
{
int
i
=
0
;
int
j
=
0
;
int
i
,
j
;
struct
pci_dev
*
pci_dev
=
NULL
;
extern
void
sn_init_cpei_timer
(
void
);
#ifdef CONFIG_PROC_FS
extern
void
register_sn_procfs
(
void
);
#endif
if
(
!
ia64_platform_is
(
"sn2"
)
||
IS_RUNNING_ON_FAKE_PROM
())
return
0
;
...
...
@@ -700,32 +685,29 @@ static int __init sn_pci_init(void)
*/
void
hubdev_init_node
(
nodepda_t
*
npda
,
cnodeid_t
node
)
{
struct
hubdev_info
*
hubdev_info
;
int
size
;
pg_data_t
*
pg
;
size
=
sizeof
(
struct
hubdev_info
);
if
(
node
>=
num_online_nodes
())
/* Headless/memless IO nodes */
hubdev_info
=
(
struct
hubdev_info
*
)
alloc_bootmem_node
(
NODE_DATA
(
0
),
sizeof
(
struct
hubdev_info
));
pg
=
NODE_DATA
(
0
);
else
hubdev_info
=
(
struct
hubdev_info
*
)
alloc_bootmem_node
(
NODE_DATA
(
node
),
sizeof
(
struct
hubdev_info
));
npda
->
pdinfo
=
(
void
*
)
hubdev_info
;
pg
=
NODE_DATA
(
node
);
hubdev_info
=
(
struct
hubdev_info
*
)
alloc_bootmem_node
(
pg
,
size
);
npda
->
pdinfo
=
(
void
*
)
hubdev_info
;
}
geoid_t
cnodeid_get_geoid
(
cnodeid_t
cnode
)
{
struct
hubdev_info
*
hubdev
;
hubdev
=
(
struct
hubdev_info
*
)(
NODEPDA
(
cnode
)
->
pdinfo
);
return
hubdev
->
hdi_geoid
;
}
subsys_initcall
(
sn_pci_init
);
...
...
@@ -734,3 +716,4 @@ EXPORT_SYMBOL(sn_pci_unfixup_slot);
EXPORT_SYMBOL
(
sn_pci_controller_fixup
);
EXPORT_SYMBOL
(
sn_bus_store_sysdata
);
EXPORT_SYMBOL
(
sn_bus_free_sysdata
);
EXPORT_SYMBOL
(
sn_pcidev_info_get
);
arch/ia64/sn/kernel/setup.c
View file @
759b650f
...
...
@@ -75,7 +75,7 @@ EXPORT_SYMBOL(sn_rtc_cycles_per_second);
DEFINE_PER_CPU
(
struct
sn_hub_info_s
,
__sn_hub_info
);
EXPORT_PER_CPU_SYMBOL
(
__sn_hub_info
);
DEFINE_PER_CPU
(
short
,
__sn_cnodeid_to_nasid
[
MAX_
NUM
NODES
]);
DEFINE_PER_CPU
(
short
,
__sn_cnodeid_to_nasid
[
MAX_
COMPACT_
NODES
]);
EXPORT_PER_CPU_SYMBOL
(
__sn_cnodeid_to_nasid
);
DEFINE_PER_CPU
(
struct
nodepda_s
*
,
__sn_nodepda
);
...
...
@@ -317,6 +317,7 @@ struct pcdp_vga_device {
#define PCDP_PCI_TRANS_IOPORT 0x02
#define PCDP_PCI_TRANS_MMIO 0x01
#if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE)
static
void
sn_scan_pcdp
(
void
)
{
...
...
@@ -358,6 +359,7 @@ sn_scan_pcdp(void)
break
;
/* once we find the primary, we're done */
}
}
#endif
static
unsigned
long
sn2_rtc_initial
;
...
...
arch/ia64/sn/kernel/sn2/prominfo_proc.c
View file @
759b650f
...
...
@@ -3,7 +3,7 @@
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
* Copyright (C) 1999,2001-2004 Silicon Graphics, Inc. All Rights Reserved.
* Copyright (C) 1999,2001-2004
, 2006
Silicon Graphics, Inc. All Rights Reserved.
*
* Module to export the system's Firmware Interface Tables, including
* PROM revision numbers and banners, in /proc
...
...
@@ -190,7 +190,7 @@ static int
read_version_entry
(
char
*
page
,
char
**
start
,
off_t
off
,
int
count
,
int
*
eof
,
void
*
data
)
{
int
len
=
0
;
int
len
;
/* data holds the NASID of the node */
len
=
dump_version
(
page
,
(
unsigned
long
)
data
);
...
...
@@ -202,7 +202,7 @@ static int
read_fit_entry
(
char
*
page
,
char
**
start
,
off_t
off
,
int
count
,
int
*
eof
,
void
*
data
)
{
int
len
=
0
;
int
len
;
/* data holds the NASID of the node */
len
=
dump_fit
(
page
,
(
unsigned
long
)
data
);
...
...
@@ -229,13 +229,16 @@ int __init prominfo_init(void)
struct
proc_dir_entry
*
p
;
cnodeid_t
cnodeid
;
unsigned
long
nasid
;
int
size
;
char
name
[
NODE_NAME_LEN
];
if
(
!
ia64_platform_is
(
"sn2"
))
return
0
;
proc_entries
=
kmalloc
(
num_online_nodes
()
*
sizeof
(
struct
proc_dir_entry
*
),
GFP_KERNEL
);
size
=
num_online_nodes
()
*
sizeof
(
struct
proc_dir_entry
*
);
proc_entries
=
kzalloc
(
size
,
GFP_KERNEL
);
if
(
!
proc_entries
)
return
-
ENOMEM
;
sgi_prominfo_entry
=
proc_mkdir
(
"sgi_prominfo"
,
NULL
);
...
...
@@ -244,14 +247,12 @@ int __init prominfo_init(void)
sprintf
(
name
,
"node%d"
,
cnodeid
);
*
entp
=
proc_mkdir
(
name
,
sgi_prominfo_entry
);
nasid
=
cnodeid_to_nasid
(
cnodeid
);
p
=
create_proc_read_entry
(
"fit"
,
0
,
*
entp
,
read_fit_entry
,
(
void
*
)
nasid
);
p
=
create_proc_read_entry
(
"fit"
,
0
,
*
entp
,
read_fit_entry
,
(
void
*
)
nasid
);
if
(
p
)
p
->
owner
=
THIS_MODULE
;
p
=
create_proc_read_entry
(
"version"
,
0
,
*
entp
,
read_version_entry
,
(
void
*
)
nasid
);
p
=
create_proc_read_entry
(
"version"
,
0
,
*
entp
,
read_version_entry
,
(
void
*
)
nasid
);
if
(
p
)
p
->
owner
=
THIS_MODULE
;
entp
++
;
...
...
@@ -263,7 +264,7 @@ int __init prominfo_init(void)
void
__exit
prominfo_exit
(
void
)
{
struct
proc_dir_entry
**
entp
;
unsigned
cnodeid
;
unsigned
int
cnodeid
;
char
name
[
NODE_NAME_LEN
];
entp
=
proc_entries
;
...
...
arch/ia64/sn/kernel/sn2/sn2_smp.c
View file @
759b650f
...
...
@@ -46,8 +46,14 @@ DECLARE_PER_CPU(struct ptc_stats, ptcstats);
static
__cacheline_aligned
DEFINE_SPINLOCK
(
sn2_global_ptc_lock
);
void
sn2_ptc_deadlock_recovery
(
short
*
,
short
,
short
,
int
,
volatile
unsigned
long
*
,
unsigned
long
,
volatile
unsigned
long
*
,
unsigned
long
);
extern
unsigned
long
sn2_ptc_deadlock_recovery_core
(
volatile
unsigned
long
*
,
unsigned
long
,
volatile
unsigned
long
*
,
unsigned
long
,
volatile
unsigned
long
*
,
unsigned
long
);
void
sn2_ptc_deadlock_recovery
(
short
*
,
short
,
short
,
int
,
volatile
unsigned
long
*
,
unsigned
long
,
volatile
unsigned
long
*
,
unsigned
long
);
/*
* Note: some is the following is captured here to make degugging easier
...
...
@@ -59,16 +65,6 @@ void sn2_ptc_deadlock_recovery(short *, short, short, int, volatile unsigned lon
#define reset_max_active_on_deadlock() 1
#define PTC_LOCK(sh1) ((sh1) ? &sn2_global_ptc_lock : &sn_nodepda->ptc_lock)
static
inline
void
ptc_lock
(
int
sh1
,
unsigned
long
*
flagp
)
{
spin_lock_irqsave
(
PTC_LOCK
(
sh1
),
*
flagp
);
}
static
inline
void
ptc_unlock
(
int
sh1
,
unsigned
long
flags
)
{
spin_unlock_irqrestore
(
PTC_LOCK
(
sh1
),
flags
);
}
struct
ptc_stats
{
unsigned
long
ptc_l
;
unsigned
long
change_rid
;
...
...
@@ -82,6 +78,8 @@ struct ptc_stats {
unsigned
long
shub_ptc_flushes_not_my_mm
;
};
#define sn2_ptctest 0
static
inline
unsigned
long
wait_piowc
(
void
)
{
volatile
unsigned
long
*
piows
;
...
...
@@ -200,7 +198,7 @@ sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start,
max_active
=
max_active_pio
(
shub1
);
itc
=
ia64_get_itc
();
ptc_lock
(
shub1
,
&
flags
);
spin_lock_irqsave
(
PTC_LOCK
(
shub1
),
flags
);
itc2
=
ia64_get_itc
();
__get_cpu_var
(
ptcstats
).
lock_itc_clocks
+=
itc2
-
itc
;
...
...
@@ -258,7 +256,7 @@ sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start,
ia64_srlz_d
();
}
ptc_unlock
(
shub1
,
flags
);
spin_unlock_irqrestore
(
PTC_LOCK
(
shub1
)
,
flags
);
preempt_enable
();
}
...
...
@@ -270,11 +268,12 @@ sn2_global_tlb_purge(struct mm_struct *mm, unsigned long start,
* TLB flush transaction. The recovery sequence is somewhat tricky & is
* coded in assembly language.
*/
void
sn2_ptc_deadlock_recovery
(
short
*
nasids
,
short
ib
,
short
ie
,
int
mynasid
,
volatile
unsigned
long
*
ptc0
,
unsigned
long
data0
,
volatile
unsigned
long
*
ptc1
,
unsigned
long
data1
)
void
sn2_ptc_deadlock_recovery
(
short
*
nasids
,
short
ib
,
short
ie
,
int
mynasid
,
volatile
unsigned
long
*
ptc0
,
unsigned
long
data0
,
volatile
unsigned
long
*
ptc1
,
unsigned
long
data1
)
{
extern
unsigned
long
sn2_ptc_deadlock_recovery_core
(
volatile
unsigned
long
*
,
unsigned
long
,
volatile
unsigned
long
*
,
unsigned
long
,
volatile
unsigned
long
*
,
unsigned
long
);
short
nasid
,
i
;
unsigned
long
*
piows
,
zeroval
,
n
;
...
...
arch/ia64/sn/kernel/sn2/sn_proc_fs.c
View file @
759b650f
...
...
@@ -6,11 +6,11 @@
* Copyright (C) 2000-2005 Silicon Graphics, Inc. All rights reserved.
*/
#include <linux/config.h>
#include <asm/uaccess.h>
#ifdef CONFIG_PROC_FS
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <asm/uaccess.h>
#include <asm/sn/sn_sal.h>
static
int
partition_id_show
(
struct
seq_file
*
s
,
void
*
p
)
...
...
@@ -90,10 +90,10 @@ static int coherence_id_open(struct inode *inode, struct file *file)
return
single_open
(
file
,
coherence_id_show
,
NULL
);
}
static
struct
proc_dir_entry
*
sn_procfs_create_entry
(
const
char
*
name
,
struct
proc_dir_entry
*
parent
,
int
(
*
openfunc
)(
struct
inode
*
,
struct
file
*
),
int
(
*
releasefunc
)(
struct
inode
*
,
struct
file
*
))
static
struct
proc_dir_entry
*
sn_procfs_create_entry
(
const
char
*
name
,
struct
proc_dir_entry
*
parent
,
int
(
*
openfunc
)(
struct
inode
*
,
struct
file
*
),
int
(
*
releasefunc
)(
struct
inode
*
,
struct
file
*
))
{
struct
proc_dir_entry
*
e
=
create_proc_entry
(
name
,
0444
,
parent
);
...
...
@@ -126,24 +126,24 @@ void register_sn_procfs(void)
return
;
sn_procfs_create_entry
(
"partition_id"
,
sgi_proc_dir
,
partition_id_open
,
single_release
);
partition_id_open
,
single_release
);
sn_procfs_create_entry
(
"system_serial_number"
,
sgi_proc_dir
,
system_serial_number_open
,
single_release
);
system_serial_number_open
,
single_release
);
sn_procfs_create_entry
(
"licenseID"
,
sgi_proc_dir
,
licenseID_open
,
single_release
);
licenseID_open
,
single_release
);
e
=
sn_procfs_create_entry
(
"sn_force_interrupt"
,
sgi_proc_dir
,
sn_force_interrupt_open
,
single_release
);
sn_force_interrupt_open
,
single_release
);
if
(
e
)
e
->
proc_fops
->
write
=
sn_force_interrupt_write_proc
;
sn_procfs_create_entry
(
"coherence_id"
,
sgi_proc_dir
,
coherence_id_open
,
single_release
);
coherence_id_open
,
single_release
);
sn_procfs_create_entry
(
"sn_topology"
,
sgi_proc_dir
,
sn_topology_open
,
sn_topology_release
);
sn_topology_open
,
sn_topology_release
);
}
#endif
/* CONFIG_PROC_FS */
arch/ia64/sn/kernel/sn2/timer.c
View file @
759b650f
...
...
@@ -14,6 +14,7 @@
#include <asm/hw_irq.h>
#include <asm/system.h>
#include <asm/timex.h>
#include <asm/sn/leds.h>
#include <asm/sn/shub_mmr.h>
...
...
@@ -28,9 +29,27 @@ static struct time_interpolator sn2_interpolator = {
.
source
=
TIME_SOURCE_MMIO64
};
/*
* sn udelay uses the RTC instead of the ITC because the ITC is not
* synchronized across all CPUs, and the thread may migrate to another CPU
* if preemption is enabled.
*/
static
void
ia64_sn_udelay
(
unsigned
long
usecs
)
{
unsigned
long
start
=
rtc_time
();
unsigned
long
end
=
start
+
usecs
*
sn_rtc_cycles_per_second
/
1000000
;
while
(
time_before
((
unsigned
long
)
rtc_time
(),
end
))
cpu_relax
();
}
void
__init
sn_timer_init
(
void
)
{
sn2_interpolator
.
frequency
=
sn_rtc_cycles_per_second
;
sn2_interpolator
.
addr
=
RTC_COUNTER_ADDR
;
register_time_interpolator
(
&
sn2_interpolator
);
ia64_udelay
=
&
ia64_sn_udelay
;
}
arch/ia64/sn/kernel/sn2/timer_interrupt.c
View file @
759b650f
/*
*
*
* Copyright (c) 2005 Silicon Graphics, Inc. All Rights Reserved.
* Copyright (c) 2005
, 2006
Silicon Graphics, Inc. All Rights Reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of version 2 of the GNU General Public License
...
...
@@ -22,11 +22,6 @@
* License along with this program; if not, write the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
*
* Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
* Mountain View, CA 94043, or:
*
* http://www.sgi.com
*
* For further information regarding this notice, see:
*
* http://oss.sgi.com/projects/GenInfo/NoticeExplan
...
...
arch/ia64/sn/kernel/tiocx.c
View file @
759b650f
...
...
@@ -284,12 +284,10 @@ struct sn_irq_info *tiocx_irq_alloc(nasid_t nasid, int widget, int irq,
if
((
nasid
&
1
)
==
0
)
return
NULL
;
sn_irq_info
=
k
m
alloc
(
sn_irq_size
,
GFP_KERNEL
);
sn_irq_info
=
k
z
alloc
(
sn_irq_size
,
GFP_KERNEL
);
if
(
sn_irq_info
==
NULL
)
return
NULL
;
memset
(
sn_irq_info
,
0x0
,
sn_irq_size
);
status
=
tiocx_intr_alloc
(
nasid
,
widget
,
__pa
(
sn_irq_info
),
irq
,
req_nasid
,
slice
);
if
(
status
)
{
...
...
arch/ia64/sn/kernel/xpc_channel.c
View file @
759b650f
...
...
@@ -738,7 +738,9 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
/* make sure all activity has settled down first */
if
(
atomic_read
(
&
ch
->
references
)
>
0
)
{
if
(
atomic_read
(
&
ch
->
references
)
>
0
||
((
ch
->
flags
&
XPC_C_CONNECTEDCALLOUT_MADE
)
&&
!
(
ch
->
flags
&
XPC_C_DISCONNECTINGCALLOUT_MADE
)))
{
return
;
}
DBUG_ON
(
atomic_read
(
&
ch
->
kthreads_assigned
)
!=
0
);
...
...
@@ -775,7 +777,7 @@ xpc_process_disconnect(struct xpc_channel *ch, unsigned long *irq_flags)
/* both sides are disconnected now */
if
(
ch
->
flags
&
XPC_C_
CONNECTCALLOUT
)
{
if
(
ch
->
flags
&
XPC_C_
DISCONNECTINGCALLOUT_MADE
)
{
spin_unlock_irqrestore
(
&
ch
->
lock
,
*
irq_flags
);
xpc_disconnect_callout
(
ch
,
xpcDisconnected
);
spin_lock_irqsave
(
&
ch
->
lock
,
*
irq_flags
);
...
...
@@ -1300,7 +1302,7 @@ xpc_process_msg_IPI(struct xpc_partition *part, int ch_number)
"delivered=%d, partid=%d, channel=%d
\n
"
,
nmsgs_sent
,
ch
->
partid
,
ch
->
number
);
if
(
ch
->
flags
&
XPC_C_CONNECT
CALLOUT
)
{
if
(
ch
->
flags
&
XPC_C_CONNECT
EDCALLOUT_MADE
)
{
xpc_activate_kthreads
(
ch
,
nmsgs_sent
);
}
}
...
...
arch/ia64/sn/kernel/xpc_main.c
View file @
759b650f
...
...
@@ -750,12 +750,16 @@ xpc_daemonize_kthread(void *args)
/* let registerer know that connection has been established */
spin_lock_irqsave
(
&
ch
->
lock
,
irq_flags
);
if
(
!
(
ch
->
flags
&
XPC_C_CONNECTCALLOUT
))
{
ch
->
flags
|=
XPC_C_CONNECTCALLOUT
;
if
(
!
(
ch
->
flags
&
XPC_C_CONNECT
ED
CALLOUT
))
{
ch
->
flags
|=
XPC_C_CONNECT
ED
CALLOUT
;
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
xpc_connected_callout
(
ch
);
spin_lock_irqsave
(
&
ch
->
lock
,
irq_flags
);
ch
->
flags
|=
XPC_C_CONNECTEDCALLOUT_MADE
;
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
/*
* It is possible that while the callout was being
* made that the remote partition sent some messages.
...
...
@@ -777,15 +781,17 @@ xpc_daemonize_kthread(void *args)
if
(
atomic_dec_return
(
&
ch
->
kthreads_assigned
)
==
0
)
{
spin_lock_irqsave
(
&
ch
->
lock
,
irq_flags
);
if
((
ch
->
flags
&
XPC_C_CONNECT
CALLOUT
)
&&
!
(
ch
->
flags
&
XPC_C_DISCONNECTCALLOUT
))
{
ch
->
flags
|=
XPC_C_DISCONNECTCALLOUT
;
if
((
ch
->
flags
&
XPC_C_CONNECT
EDCALLOUT_MADE
)
&&
!
(
ch
->
flags
&
XPC_C_DISCONNECT
ING
CALLOUT
))
{
ch
->
flags
|=
XPC_C_DISCONNECT
ING
CALLOUT
;
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
xpc_disconnect_callout
(
ch
,
xpcDisconnecting
);
}
else
{
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
spin_lock_irqsave
(
&
ch
->
lock
,
irq_flags
);
ch
->
flags
|=
XPC_C_DISCONNECTINGCALLOUT_MADE
;
}
spin_unlock_irqrestore
(
&
ch
->
lock
,
irq_flags
);
if
(
atomic_dec_return
(
&
part
->
nchannels_engaged
)
==
0
)
{
xpc_mark_partition_disengaged
(
part
);
xpc_IPI_send_disengage
(
part
);
...
...
arch/ia64/sn/pci/pci_dma.c
View file @
759b650f
...
...
@@ -335,10 +335,10 @@ int sn_pci_legacy_read(struct pci_bus *bus, u16 port, u32 *val, u8 size)
*/
SAL_CALL
(
isrv
,
SN_SAL_IOIF_PCI_SAFE
,
pci_domain_nr
(
bus
),
bus
->
number
,
0
,
/* io */
0
,
/* read */
port
,
size
,
__pa
(
val
));
pci_domain_nr
(
bus
),
bus
->
number
,
0
,
/* io */
0
,
/* read */
port
,
size
,
__pa
(
val
));
if
(
isrv
.
status
==
0
)
return
size
;
...
...
@@ -381,10 +381,10 @@ int sn_pci_legacy_write(struct pci_bus *bus, u16 port, u32 val, u8 size)
*/
SAL_CALL
(
isrv
,
SN_SAL_IOIF_PCI_SAFE
,
pci_domain_nr
(
bus
),
bus
->
number
,
0
,
/* io */
1
,
/* write */
port
,
size
,
__pa
(
&
val
));
pci_domain_nr
(
bus
),
bus
->
number
,
0
,
/* io */
1
,
/* write */
port
,
size
,
__pa
(
&
val
));
if
(
isrv
.
status
==
0
)
return
size
;
...
...
arch/ia64/sn/pci/pcibr/pcibr_ate.c
View file @
759b650f
...
...
@@ -3,7 +3,7 @@
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
* Copyright (C) 2001-200
4
Silicon Graphics, Inc. All rights reserved.
* Copyright (C) 2001-200
6
Silicon Graphics, Inc. All rights reserved.
*/
#include <linux/types.h>
...
...
@@ -12,7 +12,7 @@
#include <asm/sn/pcibus_provider_defs.h>
#include <asm/sn/pcidev.h>
int
pcibr_invalidate_ate
=
0
;
/* by default don't invalidate ATE on free */
int
pcibr_invalidate_ate
;
/* by default don't invalidate ATE on free */
/*
* mark_ate: Mark the ate as either free or inuse.
...
...
@@ -20,14 +20,12 @@ int pcibr_invalidate_ate = 0; /* by default don't invalidate ATE on free */
static
void
mark_ate
(
struct
ate_resource
*
ate_resource
,
int
start
,
int
number
,
u64
value
)
{
u64
*
ate
=
ate_resource
->
ate
;
int
index
;
int
length
=
0
;
for
(
index
=
start
;
length
<
number
;
index
++
,
length
++
)
ate
[
index
]
=
value
;
}
/*
...
...
@@ -37,7 +35,6 @@ static void mark_ate(struct ate_resource *ate_resource, int start, int number,
static
int
find_free_ate
(
struct
ate_resource
*
ate_resource
,
int
start
,
int
count
)
{
u64
*
ate
=
ate_resource
->
ate
;
int
index
;
int
start_free
;
...
...
@@ -70,12 +67,10 @@ static int find_free_ate(struct ate_resource *ate_resource, int start,
static
inline
void
free_ate_resource
(
struct
ate_resource
*
ate_resource
,
int
start
)
{
mark_ate
(
ate_resource
,
start
,
ate_resource
->
ate
[
start
],
0
);
if
((
ate_resource
->
lowest_free_index
>
start
)
||
(
ate_resource
->
lowest_free_index
<
0
))
ate_resource
->
lowest_free_index
=
start
;
}
/*
...
...
@@ -84,7 +79,6 @@ static inline void free_ate_resource(struct ate_resource *ate_resource,
static
inline
int
alloc_ate_resource
(
struct
ate_resource
*
ate_resource
,
int
ate_needed
)
{
int
start_index
;
/*
...
...
@@ -118,19 +112,12 @@ static inline int alloc_ate_resource(struct ate_resource *ate_resource,
*/
int
pcibr_ate_alloc
(
struct
pcibus_info
*
pcibus_info
,
int
count
)
{
int
status
=
0
;
u
64
flag
;
int
status
;
u
nsigned
long
flags
;
flag
=
pcibr_lock
(
pcibus_info
);
spin_lock_irqsave
(
&
pcibus_info
->
pbi_lock
,
flags
);
status
=
alloc_ate_resource
(
&
pcibus_info
->
pbi_int_ate_resource
,
count
);
if
(
status
<
0
)
{
/* Failed to allocate */
pcibr_unlock
(
pcibus_info
,
flag
);
return
-
1
;
}
pcibr_unlock
(
pcibus_info
,
flag
);
spin_unlock_irqrestore
(
&
pcibus_info
->
pbi_lock
,
flags
);
return
status
;
}
...
...
@@ -182,7 +169,7 @@ void pcibr_ate_free(struct pcibus_info *pcibus_info, int index)
ate_write
(
pcibus_info
,
index
,
count
,
(
ate
&
~
PCI32_ATE_V
));
}
flags
=
pcibr_lock
(
pcibus_info
);
spin_lock_irqsave
(
&
pcibus_info
->
pbi_lock
,
flags
);
free_ate_resource
(
&
pcibus_info
->
pbi_int_ate_resource
,
index
);
pcibr_unlock
(
pcibus_info
,
flags
);
spin_unlock_irqrestore
(
&
pcibus_info
->
pbi_lock
,
flags
);
}
arch/ia64/sn/pci/pcibr/pcibr_dma.c
View file @
759b650f
...
...
@@ -137,14 +137,12 @@ pcibr_dmatrans_direct64(struct pcidev_info * info, u64 paddr,
pci_addr
|=
PCI64_ATTR_VIRTUAL
;
return
pci_addr
;
}
static
dma_addr_t
pcibr_dmatrans_direct32
(
struct
pcidev_info
*
info
,
u64
paddr
,
size_t
req_size
,
u64
flags
)
{
struct
pcidev_info
*
pcidev_info
=
info
->
pdi_host_pcidev_info
;
struct
pcibus_info
*
pcibus_info
=
(
struct
pcibus_info
*
)
pcidev_info
->
pdi_pcibus_info
;
...
...
@@ -171,7 +169,6 @@ pcibr_dmatrans_direct32(struct pcidev_info * info,
}
return
PCI32_DIRECT_BASE
|
offset
;
}
/*
...
...
@@ -218,9 +215,8 @@ void sn_dma_flush(u64 addr)
u64
flags
;
u64
itte
;
struct
hubdev_info
*
hubinfo
;
volatile
struct
sn_flush_device_kernel
*
p
;
volatile
struct
sn_flush_device_common
*
common
;
struct
sn_flush_device_kernel
*
p
;
struct
sn_flush_device_common
*
common
;
struct
sn_flush_nasid_entry
*
flush_nasid_list
;
if
(
!
sn_ioif_inited
)
...
...
@@ -310,8 +306,7 @@ void sn_dma_flush(u64 addr)
(
common
->
sfdl_slot
-
1
));
}
}
else
{
spin_lock_irqsave
((
spinlock_t
*
)
&
p
->
sfdl_flush_lock
,
flags
);
spin_lock_irqsave
(
&
p
->
sfdl_flush_lock
,
flags
);
*
common
->
sfdl_flush_addr
=
0
;
/* force an interrupt. */
...
...
@@ -322,8 +317,7 @@ void sn_dma_flush(u64 addr)
cpu_relax
();
/* okay, everything is synched up. */
spin_unlock_irqrestore
((
spinlock_t
*
)
&
p
->
sfdl_flush_lock
,
flags
);
spin_unlock_irqrestore
(
&
p
->
sfdl_flush_lock
,
flags
);
}
return
;
}
...
...
arch/ia64/sn/pci/pcibr/pcibr_provider.c
View file @
759b650f
...
...
@@ -163,9 +163,12 @@ pcibr_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
/* Setup the PMU ATE map */
soft
->
pbi_int_ate_resource
.
lowest_free_index
=
0
;
soft
->
pbi_int_ate_resource
.
ate
=
kmalloc
(
soft
->
pbi_int_ate_size
*
sizeof
(
u64
),
GFP_KERNEL
);
memset
(
soft
->
pbi_int_ate_resource
.
ate
,
0
,
(
soft
->
pbi_int_ate_size
*
sizeof
(
u64
)));
kzalloc
(
soft
->
pbi_int_ate_size
*
sizeof
(
u64
),
GFP_KERNEL
);
if
(
!
soft
->
pbi_int_ate_resource
.
ate
)
{
kfree
(
soft
);
return
NULL
;
}
if
(
prom_bussoft
->
bs_asic_type
==
PCIIO_ASIC_TYPE_TIOCP
)
{
/* TIO PCI Bridge: find nearest node with CPUs */
...
...
drivers/ide/pci/sgiioc4.c
View file @
759b650f
...
...
@@ -13,11 +13,6 @@
* License along with this program; if not, write the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
*
* Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
* Mountain View, CA 94043, or:
*
* http://www.sgi.com
*
* For further information regarding this notice, see:
*
* http://oss.sgi.com/projects/GenInfo/NoticeExplan
...
...
include/asm-ia64/acpi.h
View file @
759b650f
...
...
@@ -106,6 +106,8 @@ extern unsigned int can_cpei_retarget(void);
extern
unsigned
int
is_cpu_cpei_target
(
unsigned
int
cpu
);
extern
void
set_cpei_target_cpu
(
unsigned
int
cpu
);
extern
unsigned
int
get_cpei_target_cpu
(
void
);
extern
void
prefill_possible_map
(
void
);
extern
int
additional_cpus
;
#ifdef CONFIG_ACPI_NUMA
/* Proximity bitmap length; _PXM is at most 255 (8 bit)*/
...
...
include/asm-ia64/machvec_sn2.h
View file @
759b650f
/*
* Copyright (c) 2002-2003 Silicon Graphics, Inc. All Rights Reserved.
* Copyright (c) 2002-2003
, 2006
Silicon Graphics, Inc. All Rights Reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of version 2 of the GNU General Public License
...
...
@@ -20,11 +20,6 @@
* License along with this program; if not, write the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
*
* Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
* Mountain View, CA 94043, or:
*
* http://www.sgi.com
*
* For further information regarding this notice, see:
*
* http://oss.sgi.com/projects/GenInfo/NoticeExplan
...
...
include/asm-ia64/sn/arch.h
View file @
759b650f
...
...
@@ -70,7 +70,7 @@ DECLARE_PER_CPU(struct sn_hub_info_s, __sn_hub_info);
* Compact node ID to nasid mappings kept in the per-cpu data areas of each
* cpu.
*/
DECLARE_PER_CPU
(
short
,
__sn_cnodeid_to_nasid
[
MAX_
NUM
NODES
]);
DECLARE_PER_CPU
(
short
,
__sn_cnodeid_to_nasid
[
MAX_
COMPACT_
NODES
]);
#define sn_cnodeid_to_nasid (&__get_cpu_var(__sn_cnodeid_to_nasid[0]))
...
...
include/asm-ia64/sn/bte.h
View file @
759b650f
...
...
@@ -46,7 +46,7 @@
#define BTES_PER_NODE (is_shub2() ? 4 : 2)
#define MAX_BTES_PER_NODE 4
#define BTE2OFF_CTRL
(0)
#define BTE2OFF_CTRL
0
#define BTE2OFF_SRC (SH2_BT_ENG_SRC_ADDR_0 - SH2_BT_ENG_CSR_0)
#define BTE2OFF_DEST (SH2_BT_ENG_DEST_ADDR_0 - SH2_BT_ENG_CSR_0)
#define BTE2OFF_NOTIFY (SH2_BT_ENG_NOTIF_ADDR_0 - SH2_BT_ENG_CSR_0)
...
...
@@ -75,11 +75,11 @@
: base + (BTEOFF_NOTIFY/8))
/* Define hardware modes */
#define BTE_NOTIFY
(IBCT_NOTIFY)
#define BTE_NOTIFY
IBCT_NOTIFY
#define BTE_NORMAL BTE_NOTIFY
#define BTE_ZERO_FILL (BTE_NOTIFY | IBCT_ZFIL_MODE)
/* Use a reserved bit to let the caller specify a wait for any BTE */
#define BTE_WACQUIRE
(0x4000)
#define BTE_WACQUIRE
0x4000
/* Use the BTE on the node with the destination memory */
#define BTE_USE_DEST (BTE_WACQUIRE << 1)
/* Use any available BTE interface on any node for the transfer */
...
...
include/asm-ia64/sn/pcibr_provider.h
View file @
759b650f
...
...
@@ -3,7 +3,7 @@
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
* Copyright (C) 1992-1997,2000-200
4
Silicon Graphics, Inc. All rights reserved.
* Copyright (C) 1992-1997,2000-200
6
Silicon Graphics, Inc. All rights reserved.
*/
#ifndef _ASM_IA64_SN_PCI_PCIBR_PROVIDER_H
#define _ASM_IA64_SN_PCI_PCIBR_PROVIDER_H
...
...
@@ -115,18 +115,6 @@ struct pcibus_info {
spinlock_t
pbi_lock
;
};
/*
* pcibus_info structure locking macros
*/
inline
static
unsigned
long
pcibr_lock
(
struct
pcibus_info
*
pcibus_info
)
{
unsigned
long
flag
;
spin_lock_irqsave
(
&
pcibus_info
->
pbi_lock
,
flag
);
return
(
flag
);
}
#define pcibr_unlock(pcibus_info, flag) spin_unlock_irqrestore(&pcibus_info->pbi_lock, flag)
extern
int
pcibr_init_provider
(
void
);
extern
void
*
pcibr_bus_fixup
(
struct
pcibus_bussoft
*
,
struct
pci_controller
*
);
extern
dma_addr_t
pcibr_dma_map
(
struct
pci_dev
*
,
unsigned
long
,
size_t
);
...
...
include/asm-ia64/sn/sn_feature_sets.h
View file @
759b650f
...
...
@@ -12,9 +12,6 @@
*/
#include <asm/types.h>
#include <asm/bitops.h>
/* --------------------- PROM Features -----------------------------*/
extern
int
sn_prom_feature_available
(
int
id
);
...
...
include/asm-ia64/sn/xpc.h
View file @
759b650f
...
...
@@ -508,19 +508,24 @@ struct xpc_channel {
#define XPC_C_OPENREQUEST 0x00000010
/* local open channel request */
#define XPC_C_SETUP 0x00000020
/* channel's msgqueues are alloc'd */
#define XPC_C_CONNECTCALLOUT 0x00000040
/* channel connected callout made */
#define XPC_C_CONNECTED 0x00000080
/* local channel is connected */
#define XPC_C_CONNECTING 0x00000100
/* channel is being connected */
#define XPC_C_RCLOSEREPLY 0x00000200
/* remote close channel reply */
#define XPC_C_CLOSEREPLY 0x00000400
/* local close channel reply */
#define XPC_C_RCLOSEREQUEST 0x00000800
/* remote close channel request */
#define XPC_C_CLOSEREQUEST 0x00001000
/* local close channel request */
#define XPC_C_DISCONNECTED 0x00002000
/* channel is disconnected */
#define XPC_C_DISCONNECTING 0x00004000
/* channel is being disconnected */
#define XPC_C_DISCONNECTCALLOUT 0x00008000
/* chan disconnected callout made */
#define XPC_C_WDISCONNECT 0x00010000
/* waiting for channel disconnect */
#define XPC_C_CONNECTEDCALLOUT 0x00000040
/* connected callout initiated */
#define XPC_C_CONNECTEDCALLOUT_MADE \
0x00000080
/* connected callout completed */
#define XPC_C_CONNECTED 0x00000100
/* local channel is connected */
#define XPC_C_CONNECTING 0x00000200
/* channel is being connected */
#define XPC_C_RCLOSEREPLY 0x00000400
/* remote close channel reply */
#define XPC_C_CLOSEREPLY 0x00000800
/* local close channel reply */
#define XPC_C_RCLOSEREQUEST 0x00001000
/* remote close channel request */
#define XPC_C_CLOSEREQUEST 0x00002000
/* local close channel request */
#define XPC_C_DISCONNECTED 0x00004000
/* channel is disconnected */
#define XPC_C_DISCONNECTING 0x00008000
/* channel is being disconnected */
#define XPC_C_DISCONNECTINGCALLOUT \
0x00010000
/* disconnecting callout initiated */
#define XPC_C_DISCONNECTINGCALLOUT_MADE \
0x00020000
/* disconnecting callout completed */
#define XPC_C_WDISCONNECT 0x00040000
/* waiting for channel disconnect */
...
...
include/asm-ia64/timex.h
View file @
759b650f
...
...
@@ -15,6 +15,8 @@
typedef
unsigned
long
cycles_t
;
extern
void
(
*
ia64_udelay
)(
unsigned
long
usecs
);
/*
* For performance reasons, we don't want to define CLOCK_TICK_TRATE as
* local_cpu_data->itc_rate. Fortunately, we don't have to, either: according to George
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment