Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
ea3c4b12
Commit
ea3c4b12
authored
Sep 04, 2007
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
a5229e6b
7b3166db
Changes
20
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
137 additions
and
37 deletions
+137
-37
arch/ia64/hp/sim/hpsim_console.c
arch/ia64/hp/sim/hpsim_console.c
+14
-2
arch/ia64/hp/sim/hpsim_setup.c
arch/ia64/hp/sim/hpsim_setup.c
+2
-7
arch/ia64/hp/sim/simeth.c
arch/ia64/hp/sim/simeth.c
+3
-9
arch/ia64/hp/sim/simscsi.c
arch/ia64/hp/sim/simscsi.c
+1
-2
arch/ia64/kernel/irq_ia64.c
arch/ia64/kernel/irq_ia64.c
+22
-6
arch/ia64/kernel/setup.c
arch/ia64/kernel/setup.c
+7
-6
arch/ia64/kernel/smpboot.c
arch/ia64/kernel/smpboot.c
+6
-0
arch/ia64/mm/contig.c
arch/ia64/mm/contig.c
+3
-0
arch/ia64/mm/discontig.c
arch/ia64/mm/discontig.c
+3
-0
arch/ia64/sn/kernel/huberror.c
arch/ia64/sn/kernel/huberror.c
+10
-4
arch/ia64/sn/kernel/irq.c
arch/ia64/sn/kernel/irq.c
+15
-0
arch/ia64/sn/kernel/sn2/sn2_smp.c
arch/ia64/sn/kernel/sn2/sn2_smp.c
+26
-0
arch/ia64/sn/kernel/sn2/sn_hwperf.c
arch/ia64/sn/kernel/sn2/sn_hwperf.c
+2
-1
arch/ia64/sn/pci/pcibr/pcibr_provider.c
arch/ia64/sn/pci/pcibr/pcibr_provider.c
+1
-0
arch/ia64/sn/pci/tioca_provider.c
arch/ia64/sn/pci/tioca_provider.c
+2
-0
arch/ia64/sn/pci/tioce_provider.c
arch/ia64/sn/pci/tioce_provider.c
+1
-0
include/asm-ia64/hpsim.h
include/asm-ia64/hpsim.h
+16
-0
include/asm-ia64/sn/arch.h
include/asm-ia64/sn/arch.h
+1
-0
include/asm-ia64/sn/intr.h
include/asm-ia64/sn/intr.h
+1
-0
include/asm-ia64/sn/sn_feature_sets.h
include/asm-ia64/sn/sn_feature_sets.h
+1
-0
No files found.
arch/ia64/hp/sim/hpsim_console.c
View file @
ea3c4b12
...
...
@@ -21,6 +21,7 @@
#include <asm/machvec.h>
#include <asm/pgtable.h>
#include <asm/sal.h>
#include <asm/hpsim.h>
#include "hpsim_ssc.h"
...
...
@@ -28,7 +29,7 @@ static int simcons_init (struct console *, char *);
static
void
simcons_write
(
struct
console
*
,
const
char
*
,
unsigned
);
static
struct
tty_driver
*
simcons_console_device
(
struct
console
*
,
int
*
);
struct
console
hpsim_cons
=
{
st
atic
st
ruct
console
hpsim_cons
=
{
.
name
=
"simcons"
,
.
write
=
simcons_write
,
.
device
=
simcons_console_device
,
...
...
@@ -58,7 +59,18 @@ simcons_write (struct console *cons, const char *buf, unsigned count)
static
struct
tty_driver
*
simcons_console_device
(
struct
console
*
c
,
int
*
index
)
{
extern
struct
tty_driver
*
hp_simserial_driver
;
*
index
=
c
->
index
;
return
hp_simserial_driver
;
}
int
simcons_register
(
void
)
{
if
(
!
ia64_platform_is
(
"hpsim"
))
return
1
;
if
(
hpsim_cons
.
flags
&
CON_ENABLED
)
return
1
;
register_console
(
&
hpsim_cons
);
return
0
;
}
arch/ia64/hp/sim/hpsim_setup.c
View file @
ea3c4b12
...
...
@@ -21,6 +21,7 @@
#include <asm/machvec.h>
#include <asm/pgtable.h>
#include <asm/sal.h>
#include <asm/hpsim.h>
#include "hpsim_ssc.h"
...
...
@@ -41,11 +42,5 @@ hpsim_setup (char **cmdline_p)
{
ROOT_DEV
=
Root_SDA1
;
/* default to first SCSI drive */
#ifdef CONFIG_HP_SIMSERIAL_CONSOLE
{
extern
struct
console
hpsim_cons
;
if
(
ia64_platform_is
(
"hpsim"
))
register_console
(
&
hpsim_cons
);
}
#endif
simcons_register
();
}
arch/ia64/hp/sim/simeth.c
View file @
ea3c4b12
...
...
@@ -22,6 +22,9 @@
#include <linux/bitops.h>
#include <asm/system.h>
#include <asm/irq.h>
#include <asm/hpsim.h>
#include "hpsim_ssc.h"
#define SIMETH_RECV_MAX 10
...
...
@@ -35,12 +38,6 @@
#define SIMETH_FRAME_SIZE ETH_FRAME_LEN
#define SSC_NETDEV_PROBE 100
#define SSC_NETDEV_SEND 101
#define SSC_NETDEV_RECV 102
#define SSC_NETDEV_ATTACH 103
#define SSC_NETDEV_DETACH 104
#define NETWORK_INTR 8
struct
simeth_local
{
...
...
@@ -124,9 +121,6 @@ simeth_probe (void)
return
r
;
}
extern
long
ia64_ssc
(
long
,
long
,
long
,
long
,
int
);
extern
void
ia64_ssc_connect_irq
(
long
intr
,
long
irq
);
static
inline
int
netdev_probe
(
char
*
name
,
unsigned
char
*
ether
)
{
...
...
arch/ia64/hp/sim/simscsi.c
View file @
ea3c4b12
...
...
@@ -14,6 +14,7 @@
#include <linux/kernel.h>
#include <linux/timer.h>
#include <asm/irq.h>
#include "hpsim_ssc.h"
#include <scsi/scsi.h>
#include <scsi/scsi_cmnd.h>
...
...
@@ -59,8 +60,6 @@ struct disk_stat {
unsigned
count
;
};
extern
long
ia64_ssc
(
long
arg0
,
long
arg1
,
long
arg2
,
long
arg3
,
int
nr
);
static
int
desc
[
16
]
=
{
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
};
...
...
arch/ia64/kernel/irq_ia64.c
View file @
ea3c4b12
...
...
@@ -82,7 +82,7 @@ struct irq_cfg irq_cfg[NR_IRQS] __read_mostly = {
};
DEFINE_PER_CPU
(
int
[
IA64_NUM_VECTORS
],
vector_irq
)
=
{
[
0
...
IA64_NUM_VECTORS
-
1
]
=
IA64_SPURIOUS_INT_VECTOR
[
0
...
IA64_NUM_VECTORS
-
1
]
=
-
1
};
static
cpumask_t
vector_table
[
IA64_NUM_VECTORS
]
=
{
...
...
@@ -179,7 +179,7 @@ static void __clear_irq_vector(int irq)
domain
=
cfg
->
domain
;
cpus_and
(
mask
,
cfg
->
domain
,
cpu_online_map
);
for_each_cpu_mask
(
cpu
,
mask
)
per_cpu
(
vector_irq
,
cpu
)[
vector
]
=
IA64_SPURIOUS_INT_VECTOR
;
per_cpu
(
vector_irq
,
cpu
)[
vector
]
=
-
1
;
cfg
->
vector
=
IRQ_VECTOR_UNASSIGNED
;
cfg
->
domain
=
CPU_MASK_NONE
;
irq_status
[
irq
]
=
IRQ_UNUSED
;
...
...
@@ -249,7 +249,7 @@ void __setup_vector_irq(int cpu)
/* Clear vector_irq */
for
(
vector
=
0
;
vector
<
IA64_NUM_VECTORS
;
++
vector
)
per_cpu
(
vector_irq
,
cpu
)[
vector
]
=
IA64_SPURIOUS_INT_VECTOR
;
per_cpu
(
vector_irq
,
cpu
)[
vector
]
=
-
1
;
/* Mark the inuse vectors */
for
(
irq
=
0
;
irq
<
NR_IRQS
;
++
irq
)
{
if
(
!
cpu_isset
(
cpu
,
irq_cfg
[
irq
].
domain
))
...
...
@@ -432,10 +432,18 @@ ia64_handle_irq (ia64_vector vector, struct pt_regs *regs)
}
else
if
(
unlikely
(
IS_RESCHEDULE
(
vector
)))
kstat_this_cpu
.
irqs
[
vector
]
++
;
else
{
int
irq
=
local_vector_to_irq
(
vector
);
ia64_setreg
(
_IA64_REG_CR_TPR
,
vector
);
ia64_srlz_d
();
generic_handle_irq
(
local_vector_to_irq
(
vector
));
if
(
unlikely
(
irq
<
0
))
{
printk
(
KERN_ERR
"%s: Unexpected interrupt "
"vector %d on CPU %d is not mapped "
"to any IRQ!
\n
"
,
__FUNCTION__
,
vector
,
smp_processor_id
());
}
else
generic_handle_irq
(
irq
);
/*
* Disable interrupts and send EOI:
...
...
@@ -483,6 +491,7 @@ void ia64_process_pending_intr(void)
kstat_this_cpu
.
irqs
[
vector
]
++
;
else
{
struct
pt_regs
*
old_regs
=
set_irq_regs
(
NULL
);
int
irq
=
local_vector_to_irq
(
vector
);
ia64_setreg
(
_IA64_REG_CR_TPR
,
vector
);
ia64_srlz_d
();
...
...
@@ -493,8 +502,15 @@ void ia64_process_pending_intr(void)
* it will work. I hope it works!.
* Probably could shared code.
*/
vectors_in_migration
[
local_vector_to_irq
(
vector
)]
=
0
;
generic_handle_irq
(
local_vector_to_irq
(
vector
));
if
(
unlikely
(
irq
<
0
))
{
printk
(
KERN_ERR
"%s: Unexpected interrupt "
"vector %d on CPU %d not being mapped "
"to any IRQ!!
\n
"
,
__FUNCTION__
,
vector
,
smp_processor_id
());
}
else
{
vectors_in_migration
[
irq
]
=
0
;
generic_handle_irq
(
irq
);
}
set_irq_regs
(
old_regs
);
/*
...
...
arch/ia64/kernel/setup.c
View file @
ea3c4b12
...
...
@@ -60,6 +60,7 @@
#include <asm/smp.h>
#include <asm/system.h>
#include <asm/unistd.h>
#include <asm/hpsim.h>
#if defined(CONFIG_SMP) && (IA64_CPU_SIZE > PAGE_SIZE)
# error "struct cpuinfo_ia64 too big!"
...
...
@@ -389,13 +390,8 @@ early_console_setup (char *cmdline)
if
(
!
efi_setup_pcdp_console
(
cmdline
))
earlycons
++
;
#endif
#ifdef CONFIG_HP_SIMSERIAL_CONSOLE
{
extern
struct
console
hpsim_cons
;
register_console
(
&
hpsim_cons
);
if
(
!
simcons_register
())
earlycons
++
;
}
#endif
return
(
earlycons
)
?
0
:
-
1
;
}
...
...
@@ -960,6 +956,11 @@ cpu_init (void)
/* clear TPR & XTP to enable all interrupt classes: */
ia64_setreg
(
_IA64_REG_CR_TPR
,
0
);
/* Clear any pending interrupts left by SAL/EFI */
while
(
ia64_get_ivr
()
!=
IA64_SPURIOUS_INT_VECTOR
)
ia64_eoi
();
#ifdef CONFIG_SMP
normal_xtp
();
#endif
...
...
arch/ia64/kernel/smpboot.c
View file @
ea3c4b12
...
...
@@ -58,6 +58,7 @@
#include <asm/system.h>
#include <asm/tlbflush.h>
#include <asm/unistd.h>
#include <asm/sn/arch.h>
#define SMP_DEBUG 0
...
...
@@ -730,6 +731,11 @@ int __cpu_disable(void)
return
(
-
EBUSY
);
}
if
(
ia64_platform_is
(
"sn2"
))
{
if
(
!
sn_cpu_disable_allowed
(
cpu
))
return
-
EBUSY
;
}
cpu_clear
(
cpu
,
cpu_online_map
);
if
(
migrate_platform_irqs
(
cpu
))
{
...
...
arch/ia64/mm/contig.c
View file @
ea3c4b12
...
...
@@ -17,6 +17,7 @@
#include <linux/bootmem.h>
#include <linux/efi.h>
#include <linux/mm.h>
#include <linux/nmi.h>
#include <linux/swap.h>
#include <asm/meminit.h>
...
...
@@ -56,6 +57,8 @@ void show_mem(void)
present
=
pgdat
->
node_present_pages
;
for
(
i
=
0
;
i
<
pgdat
->
node_spanned_pages
;
i
++
)
{
struct
page
*
page
;
if
(
unlikely
(
i
%
MAX_ORDER_NR_PAGES
==
0
))
touch_nmi_watchdog
();
if
(
pfn_valid
(
pgdat
->
node_start_pfn
+
i
))
page
=
pfn_to_page
(
pgdat
->
node_start_pfn
+
i
);
else
{
...
...
arch/ia64/mm/discontig.c
View file @
ea3c4b12
...
...
@@ -16,6 +16,7 @@
#include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/nmi.h>
#include <linux/swap.h>
#include <linux/bootmem.h>
#include <linux/acpi.h>
...
...
@@ -533,6 +534,8 @@ void show_mem(void)
present
=
pgdat
->
node_present_pages
;
for
(
i
=
0
;
i
<
pgdat
->
node_spanned_pages
;
i
++
)
{
struct
page
*
page
;
if
(
unlikely
(
i
%
MAX_ORDER_NR_PAGES
==
0
))
touch_nmi_watchdog
();
if
(
pfn_valid
(
pgdat
->
node_start_pfn
+
i
))
page
=
pfn_to_page
(
pgdat
->
node_start_pfn
+
i
);
else
{
...
...
arch/ia64/sn/kernel/huberror.c
View file @
ea3c4b12
...
...
@@ -185,11 +185,14 @@ void hubiio_crb_error_handler(struct hubdev_info *hubdev_info)
*/
void
hub_error_init
(
struct
hubdev_info
*
hubdev_info
)
{
if
(
request_irq
(
SGI_II_ERROR
,
hub_eint_handler
,
IRQF_SHARED
,
"SN_hub_error"
,
(
void
*
)
hubdev_info
))
"SN_hub_error"
,
(
void
*
)
hubdev_info
))
{
printk
(
"hub_error_init: Failed to request_irq for 0x%p
\n
"
,
hubdev_info
);
return
;
return
;
}
sn_set_err_irq_affinity
(
SGI_II_ERROR
);
}
...
...
@@ -202,11 +205,14 @@ void hub_error_init(struct hubdev_info *hubdev_info)
*/
void
ice_error_init
(
struct
hubdev_info
*
hubdev_info
)
{
if
(
request_irq
(
SGI_TIO_ERROR
,
(
void
*
)
hub_eint_handler
,
IRQF_SHARED
,
"SN_TIO_error"
,
(
void
*
)
hubdev_info
))
(
void
*
)
hubdev_info
))
{
printk
(
"ice_error_init: request_irq() error hubdev_info 0x%p
\n
"
,
hubdev_info
);
return
;
return
;
}
sn_set_err_irq_affinity
(
SGI_TIO_ERROR
);
}
arch/ia64/sn/kernel/irq.c
View file @
ea3c4b12
...
...
@@ -19,6 +19,7 @@
#include <asm/sn/pcidev.h>
#include <asm/sn/shub_mmr.h>
#include <asm/sn/sn_sal.h>
#include <asm/sn/sn_feature_sets.h>
static
void
force_interrupt
(
int
irq
);
static
void
register_intr_pda
(
struct
sn_irq_info
*
sn_irq_info
);
...
...
@@ -233,6 +234,20 @@ static void sn_set_affinity_irq(unsigned int irq, cpumask_t mask)
(
void
)
sn_retarget_vector
(
sn_irq_info
,
nasid
,
slice
);
}
#ifdef CONFIG_SMP
void
sn_set_err_irq_affinity
(
unsigned
int
irq
)
{
/*
* On systems which support CPU disabling (SHub2), all error interrupts
* are targetted at the boot CPU.
*/
if
(
is_shub2
()
&&
sn_prom_feature_available
(
PRF_CPU_DISABLE_SUPPORT
))
set_irq_affinity_info
(
irq
,
cpu_physical_id
(
0
),
0
);
}
#else
void
sn_set_err_irq_affinity
(
unsigned
int
irq
)
{
}
#endif
static
void
sn_mask_irq
(
unsigned
int
irq
)
{
...
...
arch/ia64/sn/kernel/sn2/sn2_smp.c
View file @
ea3c4b12
...
...
@@ -40,6 +40,7 @@
#include <asm/sn/shub_mmr.h>
#include <asm/sn/nodepda.h>
#include <asm/sn/rw_mmr.h>
#include <asm/sn/sn_feature_sets.h>
DEFINE_PER_CPU
(
struct
ptc_stats
,
ptcstats
);
DECLARE_PER_CPU
(
struct
ptc_stats
,
ptcstats
);
...
...
@@ -429,6 +430,31 @@ void sn2_send_IPI(int cpuid, int vector, int delivery_mode, int redirect)
sn_send_IPI_phys
(
nasid
,
physid
,
vector
,
delivery_mode
);
}
#ifdef CONFIG_HOTPLUG_CPU
/**
* sn_cpu_disable_allowed - Determine if a CPU can be disabled.
* @cpu - CPU that is requested to be disabled.
*
* CPU disable is only allowed on SHub2 systems running with a PROM
* that supports CPU disable. It is not permitted to disable the boot processor.
*/
bool
sn_cpu_disable_allowed
(
int
cpu
)
{
if
(
is_shub2
()
&&
sn_prom_feature_available
(
PRF_CPU_DISABLE_SUPPORT
))
{
if
(
cpu
!=
0
)
return
true
;
else
printk
(
KERN_WARNING
"Disabling the boot processor is not allowed.
\n
"
);
}
else
printk
(
KERN_WARNING
"CPU disable is not supported on this system.
\n
"
);
return
false
;
}
#endif
/* CONFIG_HOTPLUG_CPU */
#ifdef CONFIG_PROC_FS
#define PTC_BASENAME "sgi_sn/ptc_statistics"
...
...
arch/ia64/sn/kernel/sn2/sn_hwperf.c
View file @
ea3c4b12
...
...
@@ -66,7 +66,8 @@ static int sn_hwperf_enum_objects(int *nobj, struct sn_hwperf_object_info **ret)
}
sz
=
sn_hwperf_obj_cnt
*
sizeof
(
struct
sn_hwperf_object_info
);
if
((
objbuf
=
(
struct
sn_hwperf_object_info
*
)
vmalloc
(
sz
))
==
NULL
)
{
objbuf
=
vmalloc
(
sz
);
if
(
objbuf
==
NULL
)
{
printk
(
"sn_hwperf_enum_objects: vmalloc(%d) failed
\n
"
,
(
int
)
sz
);
e
=
-
ENOMEM
;
goto
out
;
...
...
arch/ia64/sn/pci/pcibr/pcibr_provider.c
View file @
ea3c4b12
...
...
@@ -145,6 +145,7 @@ pcibr_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
printk
(
KERN_WARNING
"pcibr cannot allocate interrupt for error handler
\n
"
);
}
sn_set_err_irq_affinity
(
SGI_PCIASIC_ERROR
);
/*
* Update the Bridge with the "kernel" pagesize
...
...
arch/ia64/sn/pci/tioca_provider.c
View file @
ea3c4b12
...
...
@@ -654,6 +654,8 @@ tioca_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
__FUNCTION__
,
SGI_TIOCA_ERROR
,
(
int
)
tioca_common
->
ca_common
.
bs_persist_busnum
);
sn_set_err_irq_affinity
(
SGI_TIOCA_ERROR
);
/* Setup locality information */
controller
->
node
=
tioca_kern
->
ca_closest_node
;
return
tioca_common
;
...
...
arch/ia64/sn/pci/tioce_provider.c
View file @
ea3c4b12
...
...
@@ -1034,6 +1034,7 @@ tioce_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
tioce_common
->
ce_pcibus
.
bs_persist_segment
,
tioce_common
->
ce_pcibus
.
bs_persist_busnum
);
sn_set_err_irq_affinity
(
SGI_PCIASIC_ERROR
);
return
tioce_common
;
}
...
...
include/asm-ia64/hpsim.h
0 → 100644
View file @
ea3c4b12
#ifndef _ASMIA64_HPSIM_H
#define _ASMIA64_HPSIM_H
#ifndef CONFIG_HP_SIMSERIAL_CONSOLE
static
inline
int
simcons_register
(
void
)
{
return
1
;
}
#else
int
simcons_register
(
void
);
#endif
struct
tty_driver
;
extern
struct
tty_driver
*
hp_simserial_driver
;
void
ia64_ssc_connect_irq
(
long
intr
,
long
irq
);
void
ia64_ctl_trace
(
long
on
);
#endif
include/asm-ia64/sn/arch.h
View file @
ea3c4b12
...
...
@@ -81,5 +81,6 @@ extern u8 sn_sharing_domain_size;
extern
u8
sn_region_size
;
extern
void
sn_flush_all_caches
(
long
addr
,
long
bytes
);
extern
bool
sn_cpu_disable_allowed
(
int
cpu
);
#endif
/* _ASM_IA64_SN_ARCH_H */
include/asm-ia64/sn/intr.h
View file @
ea3c4b12
...
...
@@ -60,6 +60,7 @@ extern u64 sn_intr_alloc(nasid_t, int,
int
,
nasid_t
,
int
);
extern
void
sn_intr_free
(
nasid_t
,
int
,
struct
sn_irq_info
*
);
extern
struct
sn_irq_info
*
sn_retarget_vector
(
struct
sn_irq_info
*
,
nasid_t
,
int
);
extern
void
sn_set_err_irq_affinity
(
unsigned
int
);
extern
struct
list_head
**
sn_irq_lh
;
#define CPU_VECTOR_TO_IRQ(cpuid,vector) (vector)
...
...
include/asm-ia64/sn/sn_feature_sets.h
View file @
ea3c4b12
...
...
@@ -31,6 +31,7 @@ extern int sn_prom_feature_available(int id);
#define PRF_PAL_CACHE_FLUSH_SAFE 0
#define PRF_DEVICE_FLUSH_LIST 1
#define PRF_HOTPLUG_SUPPORT 2
#define PRF_CPU_DISABLE_SUPPORT 3
/* --------------------- OS Features -------------------------------*/
...
...
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