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
a1d7f7d6
Commit
a1d7f7d6
authored
Feb 27, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
parents
7ad0a03a
775b739a
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
71 additions
and
55 deletions
+71
-55
arch/i386/Kconfig
arch/i386/Kconfig
+5
-5
arch/i386/kernel/i386_ksyms.c
arch/i386/kernel/i386_ksyms.c
+0
-1
arch/i386/kernel/mpparse.c
arch/i386/kernel/mpparse.c
+1
-1
arch/i386/kernel/numaq.c
arch/i386/kernel/numaq.c
+2
-13
arch/i386/mm/discontig.c
arch/i386/mm/discontig.c
+39
-28
arch/i386/pci/numa.c
arch/i386/pci/numa.c
+2
-2
include/asm-generic/topology.h
include/asm-generic/topology.h
+3
-0
include/asm-i386/mach-bigsmp/mach_apic.h
include/asm-i386/mach-bigsmp/mach_apic.h
+2
-1
include/asm-i386/mach-default/mach_apic.h
include/asm-i386/mach-default/mach_apic.h
+2
-1
include/asm-i386/mach-numaq/mach_apic.h
include/asm-i386/mach-numaq/mach_apic.h
+3
-1
include/asm-i386/mach-summit/mach_apic.h
include/asm-i386/mach-summit/mach_apic.h
+2
-1
include/asm-i386/numaq.h
include/asm-i386/numaq.h
+2
-1
include/asm-i386/topology.h
include/asm-i386/topology.h
+8
-0
No files found.
arch/i386/Kconfig
View file @
a1d7f7d6
...
...
@@ -342,11 +342,6 @@ config X86_ALIGNMENT_16
depends on MWINCHIP3D || MWINCHIP2 || MWINCHIPC6 || MCYRIXIII || MELAN || MK6 || M586MMX || M586TSC || M586 || M486 || MVIAC3_2
default y
config X86_TSC
bool
depends on MWINCHIP3D || MWINCHIP2 || MCRUSOE || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MK8 || MVIAC3_2
default y
config X86_GOOD_APIC
bool
depends on MK7 || MPENTIUM4 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || MK8
...
...
@@ -500,6 +495,11 @@ config HAVE_ARCH_BOOTMEM_NODE
depends on NUMA
default y
config X86_TSC
bool
depends on (MWINCHIP3D || MWINCHIP2 || MCRUSOE || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MK8 || MVIAC3_2) && !X86_NUMAQ
default y
config X86_MCE
bool "Machine Check Exception"
---help---
...
...
arch/i386/kernel/i386_ksyms.c
View file @
a1d7f7d6
...
...
@@ -68,7 +68,6 @@ EXPORT_SYMBOL(EISA_bus);
EXPORT_SYMBOL
(
MCA_bus
);
#ifdef CONFIG_DISCONTIGMEM
EXPORT_SYMBOL
(
node_data
);
EXPORT_SYMBOL
(
pfn_to_nid
);
#endif
#ifdef CONFIG_X86_NUMAQ
EXPORT_SYMBOL
(
xquad_portio
);
...
...
arch/i386/kernel/mpparse.c
View file @
a1d7f7d6
...
...
@@ -110,7 +110,7 @@ void __init MP_processor_info (struct mpc_config_processor *m)
if
(
!
(
m
->
mpc_cpuflag
&
CPU_ENABLED
))
return
;
apicid
=
mpc_apic_id
(
m
,
translation_table
[
mpc_record
]
->
trans_quad
);
apicid
=
mpc_apic_id
(
m
,
translation_table
[
mpc_record
]);
if
(
m
->
mpc_featureflag
&
(
1
<<
0
))
Dprintk
(
" Floating point unit present.
\n
"
);
...
...
arch/i386/kernel/numaq.c
View file @
a1d7f7d6
...
...
@@ -27,6 +27,7 @@
#include <linux/mm.h>
#include <linux/bootmem.h>
#include <linux/mmzone.h>
#include <linux/module.h>
#include <asm/numaq.h>
/* These are needed before the pgdat's are created */
...
...
@@ -82,19 +83,7 @@ static void __init smp_dump_qct(void)
* physnode_map[8- ] = -1;
*/
int
physnode_map
[
MAX_ELEMENTS
]
=
{
[
0
...
(
MAX_ELEMENTS
-
1
)]
=
-
1
};
#define PFN_TO_ELEMENT(pfn) (pfn / PAGES_PER_ELEMENT)
#define PA_TO_ELEMENT(pa) (PFN_TO_ELEMENT(pa >> PAGE_SHIFT))
int
pfn_to_nid
(
unsigned
long
pfn
)
{
int
nid
=
physnode_map
[
PFN_TO_ELEMENT
(
pfn
)];
if
(
nid
==
-
1
)
BUG
();
/* address is not present */
return
nid
;
}
EXPORT_SYMBOL
(
physnode_map
);
/*
* for each node mark the regions
...
...
arch/i386/mm/discontig.c
View file @
a1d7f7d6
...
...
@@ -48,6 +48,14 @@ extern unsigned long max_low_pfn;
extern
unsigned
long
totalram_pages
;
extern
unsigned
long
totalhigh_pages
;
#define LARGE_PAGE_BYTES (PTRS_PER_PTE * PAGE_SIZE)
unsigned
long
node_remap_start_pfn
[
MAX_NUMNODES
];
unsigned
long
node_remap_size
[
MAX_NUMNODES
];
unsigned
long
node_remap_offset
[
MAX_NUMNODES
];
void
*
node_remap_start_vaddr
[
MAX_NUMNODES
];
void
set_pmd_pfn
(
unsigned
long
vaddr
,
unsigned
long
pfn
,
pgprot_t
flags
);
/*
* Find the highest page frame number we have available for the node
*/
...
...
@@ -65,12 +73,13 @@ static void __init find_max_pfn_node(int nid)
*/
static
void
__init
allocate_pgdat
(
int
nid
)
{
unsigned
long
node_datasz
;
node_datasz
=
PFN_UP
(
sizeof
(
struct
pglist_data
));
NODE_DATA
(
nid
)
=
(
pg_data_t
*
)(
__va
(
min_low_pfn
<<
PAGE_SHIFT
));
min_low_pfn
+=
node_datasz
;
memset
(
NODE_DATA
(
nid
),
0
,
sizeof
(
struct
pglist_data
));
if
(
nid
)
NODE_DATA
(
nid
)
=
(
pg_data_t
*
)
node_remap_start_vaddr
[
nid
];
else
{
NODE_DATA
(
nid
)
=
(
pg_data_t
*
)(
__va
(
min_low_pfn
<<
PAGE_SHIFT
));
min_low_pfn
+=
PFN_UP
(
sizeof
(
pg_data_t
));
memset
(
NODE_DATA
(
nid
),
0
,
sizeof
(
pg_data_t
));
}
}
/*
...
...
@@ -113,14 +122,6 @@ static void __init register_bootmem_low_pages(unsigned long system_max_low_pfn)
}
}
#define LARGE_PAGE_BYTES (PTRS_PER_PTE * PAGE_SIZE)
unsigned
long
node_remap_start_pfn
[
MAX_NUMNODES
];
unsigned
long
node_remap_size
[
MAX_NUMNODES
];
unsigned
long
node_remap_offset
[
MAX_NUMNODES
];
void
*
node_remap_start_vaddr
[
MAX_NUMNODES
];
extern
void
set_pmd_pfn
(
unsigned
long
vaddr
,
unsigned
long
pfn
,
pgprot_t
flags
);
void
__init
remap_numa_kva
(
void
)
{
void
*
vaddr
;
...
...
@@ -145,7 +146,7 @@ static unsigned long calculate_numa_remap_pages(void)
for
(
nid
=
1
;
nid
<
numnodes
;
nid
++
)
{
/* calculate the size of the mem_map needed in bytes */
size
=
(
node_end_pfn
[
nid
]
-
node_start_pfn
[
nid
]
+
1
)
*
sizeof
(
struct
page
);
*
sizeof
(
struct
page
)
+
sizeof
(
pg_data_t
)
;
/* convert size to large (pmd size) pages, rounding up */
size
=
(
size
+
LARGE_PAGE_BYTES
-
1
)
/
LARGE_PAGE_BYTES
;
/* now the roundup is correct, convert to PAGE_SIZE pages */
...
...
@@ -195,9 +196,9 @@ unsigned long __init setup_memory(void)
printk
(
"Low memory ends at vaddr %08lx
\n
"
,
(
ulong
)
pfn_to_kaddr
(
max_low_pfn
));
for
(
nid
=
0
;
nid
<
numnodes
;
nid
++
)
{
allocate_pgdat
(
nid
);
node_remap_start_vaddr
[
nid
]
=
pfn_to_kaddr
(
highstart_pfn
-
node_remap_offset
[
nid
]);
allocate_pgdat
(
nid
);
printk
(
"node %d will remap to vaddr %08lx - %08lx
\n
"
,
nid
,
(
ulong
)
node_remap_start_vaddr
[
nid
],
(
ulong
)
pfn_to_kaddr
(
highstart_pfn
...
...
@@ -251,13 +252,6 @@ unsigned long __init setup_memory(void)
*/
find_smp_config
();
/*insert other nodes into pgdat_list*/
for
(
nid
=
1
;
nid
<
numnodes
;
nid
++
){
NODE_DATA
(
nid
)
->
pgdat_next
=
pgdat_list
;
pgdat_list
=
NODE_DATA
(
nid
);
}
#ifdef CONFIG_BLK_DEV_INITRD
if
(
LOADER_TYPE
&&
INITRD_START
)
{
if
(
INITRD_START
+
INITRD_SIZE
<=
(
system_max_low_pfn
<<
PAGE_SHIFT
))
{
...
...
@@ -282,6 +276,18 @@ void __init zone_sizes_init(void)
{
int
nid
;
/*
* Insert nodes into pgdat_list backward so they appear in order.
* Clobber node 0's links and NULL out pgdat_list before starting.
*/
pgdat_list
=
NULL
;
for
(
nid
=
numnodes
-
1
;
nid
>=
0
;
nid
--
)
{
if
(
nid
)
memset
(
NODE_DATA
(
nid
),
0
,
sizeof
(
pg_data_t
));
NODE_DATA
(
nid
)
->
pgdat_next
=
pgdat_list
;
pgdat_list
=
NODE_DATA
(
nid
);
}
for
(
nid
=
0
;
nid
<
numnodes
;
nid
++
)
{
unsigned
long
zones_size
[
MAX_NR_ZONES
]
=
{
0
,
0
,
0
};
unsigned
long
*
zholes_size
;
...
...
@@ -314,13 +320,18 @@ void __init zone_sizes_init(void)
* normal bootmem allocator, but other nodes come from the
* remapped KVA area - mbligh
*/
if
(
nid
)
free_area_init_node
(
nid
,
NODE_DATA
(
nid
),
node_remap_start_vaddr
[
nid
],
zones_size
,
start
,
zholes_size
);
else
if
(
!
nid
)
free_area_init_node
(
nid
,
NODE_DATA
(
nid
),
0
,
zones_size
,
start
,
zholes_size
);
else
{
unsigned
long
lmem_map
;
lmem_map
=
(
unsigned
long
)
node_remap_start_vaddr
[
nid
];
lmem_map
+=
sizeof
(
pg_data_t
)
+
PAGE_SIZE
-
1
;
lmem_map
&=
PAGE_MASK
;
free_area_init_node
(
nid
,
NODE_DATA
(
nid
),
(
struct
page
*
)
lmem_map
,
zones_size
,
start
,
zholes_size
);
}
}
return
;
}
...
...
arch/i386/pci/numa.c
View file @
a1d7f7d6
...
...
@@ -17,7 +17,7 @@ static int __pci_conf1_mq_read (int seg, int bus, int dev, int fn, int reg, int
{
unsigned
long
flags
;
if
(
!
value
||
(
bus
>
255
)
||
(
dev
>
31
)
||
(
fn
>
7
)
||
(
reg
>
255
))
if
(
!
value
||
(
bus
>
MAX_MP_BUSSES
)
||
(
dev
>
31
)
||
(
fn
>
7
)
||
(
reg
>
255
))
return
-
EINVAL
;
spin_lock_irqsave
(
&
pci_config_lock
,
flags
);
...
...
@@ -45,7 +45,7 @@ static int __pci_conf1_mq_write (int seg, int bus, int dev, int fn, int reg, int
{
unsigned
long
flags
;
if
((
bus
>
255
)
||
(
dev
>
31
)
||
(
fn
>
7
)
||
(
reg
>
255
))
if
((
bus
>
MAX_MP_BUSSES
)
||
(
dev
>
31
)
||
(
fn
>
7
)
||
(
reg
>
255
))
return
-
EINVAL
;
spin_lock_irqsave
(
&
pci_config_lock
,
flags
);
...
...
include/asm-generic/topology.h
View file @
a1d7f7d6
...
...
@@ -47,6 +47,9 @@
#ifndef node_to_memblk
#define node_to_memblk(node) (0)
#endif
#ifndef pcibus_to_cpumask
#define pcibus_to_cpumask(bus) (cpu_online_map)
#endif
/* Cross-node load balancing interval. */
#ifndef NODE_BALANCE_RATE
...
...
include/asm-i386/mach-bigsmp/mach_apic.h
View file @
a1d7f7d6
...
...
@@ -87,7 +87,8 @@ static inline int cpu_to_logical_apicid(int cpu)
return
(
int
)
cpu_2_logical_apicid
[
cpu
];
}
static
inline
int
mpc_apic_id
(
struct
mpc_config_processor
*
m
,
int
quad
)
static
inline
int
mpc_apic_id
(
struct
mpc_config_processor
*
m
,
struct
mpc_config_translation
*
translation_record
)
{
printk
(
"Processor #%d %ld:%ld APIC version %d
\n
"
,
m
->
mpc_apicid
,
...
...
include/asm-i386/mach-default/mach_apic.h
View file @
a1d7f7d6
...
...
@@ -79,7 +79,8 @@ static inline unsigned long apicid_to_cpu_present(int phys_apicid)
return
(
1ul
<<
phys_apicid
);
}
static
inline
int
mpc_apic_id
(
struct
mpc_config_processor
*
m
,
int
quad
)
static
inline
int
mpc_apic_id
(
struct
mpc_config_processor
*
m
,
struct
mpc_config_translation
*
translation_record
)
{
printk
(
"Processor #%d %ld:%ld APIC version %d
\n
"
,
m
->
mpc_apicid
,
...
...
include/asm-i386/mach-numaq/mach_apic.h
View file @
a1d7f7d6
...
...
@@ -73,8 +73,10 @@ static inline unsigned long apicid_to_cpu_present(int logical_apicid)
return
(
(
logical_apicid
&
0xf
)
<<
(
4
*
apicid_to_node
(
logical_apicid
))
);
}
static
inline
int
mpc_apic_id
(
struct
mpc_config_processor
*
m
,
int
quad
)
static
inline
int
mpc_apic_id
(
struct
mpc_config_processor
*
m
,
struct
mpc_config_translation
*
translation_record
)
{
int
quad
=
translation_record
->
trans_quad
;
int
logical_apicid
=
generate_logical_apicid
(
quad
,
m
->
mpc_apicid
);
printk
(
"Processor #%d %ld:%ld APIC version %d (quad %d, apic %d)
\n
"
,
...
...
include/asm-i386/mach-summit/mach_apic.h
View file @
a1d7f7d6
...
...
@@ -90,7 +90,8 @@ static inline unsigned long apicid_to_cpu_present(int apicid)
return
(
1ul
<<
apicid
);
}
static
inline
int
mpc_apic_id
(
struct
mpc_config_processor
*
m
,
int
quad
)
static
inline
int
mpc_apic_id
(
struct
mpc_config_processor
*
m
,
struct
mpc_config_translation
*
translation_record
)
{
printk
(
"Processor #%d %ld:%ld APIC version %d
\n
"
,
m
->
mpc_apicid
,
...
...
include/asm-i386/numaq.h
View file @
a1d7f7d6
...
...
@@ -36,10 +36,11 @@
#define MAX_ELEMENTS 256
#define PAGES_PER_ELEMENT (16777216/256)
extern
int
physnode_map
[];
#define pfn_to_nid(pfn) ({ physnode_map[(pfn) / PAGES_PER_ELEMENT]; })
#define pfn_to_pgdat(pfn) NODE_DATA(pfn_to_nid(pfn))
#define PHYSADDR_TO_NID(pa) pfn_to_nid(pa >> PAGE_SHIFT)
#define MAX_NUMNODES 8
extern
int
pfn_to_nid
(
unsigned
long
);
extern
void
get_memcfg_numaq
(
void
);
#define get_memcfg_numa() get_memcfg_numaq()
...
...
include/asm-i386/topology.h
View file @
a1d7f7d6
...
...
@@ -29,6 +29,8 @@
#ifdef CONFIG_NUMA
#include <asm/mpspec.h>
/* Mappings between logical cpu number and node number */
extern
volatile
unsigned
long
node_2_cpu_mask
[];
extern
volatile
int
cpu_2_node
[];
...
...
@@ -61,6 +63,12 @@ static inline int node_to_first_cpu(int node)
/* Returns the number of the first MemBlk on Node 'node' */
#define node_to_memblk(node) (node)
/* Returns the number of the node containing PCI bus 'bus' */
static
inline
unsigned
long
pcibus_to_cpumask
(
int
bus
)
{
return
node_to_cpumask
(
mp_bus_id_to_node
[
bus
]);
}
/* Cross-node load balancing interval. */
#define NODE_BALANCE_RATE 100
...
...
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