diff options
Diffstat (limited to 'arch/x86')
| -rw-r--r-- | arch/x86/.gitignore | 3 | ||||
| -rw-r--r-- | arch/x86/boot/compressed/mkpiggy.c | 2 | ||||
| -rw-r--r-- | arch/x86/boot/compressed/vmlinux.lds.S | 4 | ||||
| -rw-r--r-- | arch/x86/include/asm/cache.h | 2 | ||||
| -rw-r--r-- | arch/x86/include/asm/pci_x86.h | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/acpi/wakeup_32.S | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/amd_iommu.c | 16 | ||||
| -rw-r--r-- | arch/x86/kernel/amd_iommu_init.c | 20 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/mcheck/mce.c | 10 | ||||
| -rw-r--r-- | arch/x86/kernel/cpu/perf_event.c | 22 | ||||
| -rw-r--r-- | arch/x86/kernel/init_task.c | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/setup_percpu.c | 8 | ||||
| -rw-r--r-- | arch/x86/kernel/smpboot.c | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/vmlinux.lds.S | 4 | ||||
| -rw-r--r-- | arch/x86/mm/numa.c | 6 | ||||
| -rw-r--r-- | arch/x86/pci/legacy.c | 42 | ||||
| -rw-r--r-- | arch/x86/xen/suspend.c | 4 |
17 files changed, 100 insertions, 51 deletions
diff --git a/arch/x86/.gitignore b/arch/x86/.gitignore new file mode 100644 index 000000000000..028079065af6 --- /dev/null +++ b/arch/x86/.gitignore | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | boot/compressed/vmlinux | ||
| 2 | tools/test_get_len | ||
| 3 | |||
diff --git a/arch/x86/boot/compressed/mkpiggy.c b/arch/x86/boot/compressed/mkpiggy.c index bcbd36c41432..5c228129d175 100644 --- a/arch/x86/boot/compressed/mkpiggy.c +++ b/arch/x86/boot/compressed/mkpiggy.c | |||
| @@ -77,7 +77,7 @@ int main(int argc, char *argv[]) | |||
| 77 | offs += 32*1024 + 18; /* Add 32K + 18 bytes slack */ | 77 | offs += 32*1024 + 18; /* Add 32K + 18 bytes slack */ |
| 78 | offs = (offs+4095) & ~4095; /* Round to a 4K boundary */ | 78 | offs = (offs+4095) & ~4095; /* Round to a 4K boundary */ |
| 79 | 79 | ||
| 80 | printf(".section \".rodata.compressed\",\"a\",@progbits\n"); | 80 | printf(".section \".rodata..compressed\",\"a\",@progbits\n"); |
| 81 | printf(".globl z_input_len\n"); | 81 | printf(".globl z_input_len\n"); |
| 82 | printf("z_input_len = %lu\n", ilen); | 82 | printf("z_input_len = %lu\n", ilen); |
| 83 | printf(".globl z_output_len\n"); | 83 | printf(".globl z_output_len\n"); |
diff --git a/arch/x86/boot/compressed/vmlinux.lds.S b/arch/x86/boot/compressed/vmlinux.lds.S index a6f1a59a5b0c..5ddabceee124 100644 --- a/arch/x86/boot/compressed/vmlinux.lds.S +++ b/arch/x86/boot/compressed/vmlinux.lds.S | |||
| @@ -26,8 +26,8 @@ SECTIONS | |||
| 26 | HEAD_TEXT | 26 | HEAD_TEXT |
| 27 | _ehead = . ; | 27 | _ehead = . ; |
| 28 | } | 28 | } |
| 29 | .rodata.compressed : { | 29 | .rodata..compressed : { |
| 30 | *(.rodata.compressed) | 30 | *(.rodata..compressed) |
| 31 | } | 31 | } |
| 32 | .text : { | 32 | .text : { |
| 33 | _text = .; /* Text */ | 33 | _text = .; /* Text */ |
diff --git a/arch/x86/include/asm/cache.h b/arch/x86/include/asm/cache.h index 2f9047cfaaca..48f99f15452e 100644 --- a/arch/x86/include/asm/cache.h +++ b/arch/x86/include/asm/cache.h | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | #define L1_CACHE_SHIFT (CONFIG_X86_L1_CACHE_SHIFT) | 7 | #define L1_CACHE_SHIFT (CONFIG_X86_L1_CACHE_SHIFT) |
| 8 | #define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) | 8 | #define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) |
| 9 | 9 | ||
| 10 | #define __read_mostly __attribute__((__section__(".data.read_mostly"))) | 10 | #define __read_mostly __attribute__((__section__(".data..read_mostly"))) |
| 11 | 11 | ||
| 12 | #define INTERNODE_CACHE_SHIFT CONFIG_X86_INTERNODE_CACHE_SHIFT | 12 | #define INTERNODE_CACHE_SHIFT CONFIG_X86_INTERNODE_CACHE_SHIFT |
| 13 | #define INTERNODE_CACHE_BYTES (1 << INTERNODE_CACHE_SHIFT) | 13 | #define INTERNODE_CACHE_BYTES (1 << INTERNODE_CACHE_SHIFT) |
diff --git a/arch/x86/include/asm/pci_x86.h b/arch/x86/include/asm/pci_x86.h index 8d8797eae5d7..cd2a31dc5fb8 100644 --- a/arch/x86/include/asm/pci_x86.h +++ b/arch/x86/include/asm/pci_x86.h | |||
| @@ -53,6 +53,8 @@ extern int pcibios_last_bus; | |||
| 53 | extern struct pci_bus *pci_root_bus; | 53 | extern struct pci_bus *pci_root_bus; |
| 54 | extern struct pci_ops pci_root_ops; | 54 | extern struct pci_ops pci_root_ops; |
| 55 | 55 | ||
| 56 | void pcibios_scan_specific_bus(int busn); | ||
| 57 | |||
| 56 | /* pci-irq.c */ | 58 | /* pci-irq.c */ |
| 57 | 59 | ||
| 58 | struct irq_info { | 60 | struct irq_info { |
diff --git a/arch/x86/kernel/acpi/wakeup_32.S b/arch/x86/kernel/acpi/wakeup_32.S index 8ded418b0593..13ab720573e3 100644 --- a/arch/x86/kernel/acpi/wakeup_32.S +++ b/arch/x86/kernel/acpi/wakeup_32.S | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | .section .text.page_aligned | 1 | .section .text..page_aligned |
| 2 | #include <linux/linkage.h> | 2 | #include <linux/linkage.h> |
| 3 | #include <asm/segment.h> | 3 | #include <asm/segment.h> |
| 4 | #include <asm/page_types.h> | 4 | #include <asm/page_types.h> |
diff --git a/arch/x86/kernel/amd_iommu.c b/arch/x86/kernel/amd_iommu.c index fa5a1474cd18..0d20286d78c6 100644 --- a/arch/x86/kernel/amd_iommu.c +++ b/arch/x86/kernel/amd_iommu.c | |||
| @@ -1487,6 +1487,7 @@ static int __attach_device(struct device *dev, | |||
| 1487 | struct protection_domain *domain) | 1487 | struct protection_domain *domain) |
| 1488 | { | 1488 | { |
| 1489 | struct iommu_dev_data *dev_data, *alias_data; | 1489 | struct iommu_dev_data *dev_data, *alias_data; |
| 1490 | int ret; | ||
| 1490 | 1491 | ||
| 1491 | dev_data = get_dev_data(dev); | 1492 | dev_data = get_dev_data(dev); |
| 1492 | alias_data = get_dev_data(dev_data->alias); | 1493 | alias_data = get_dev_data(dev_data->alias); |
| @@ -1498,13 +1499,14 @@ static int __attach_device(struct device *dev, | |||
| 1498 | spin_lock(&domain->lock); | 1499 | spin_lock(&domain->lock); |
| 1499 | 1500 | ||
| 1500 | /* Some sanity checks */ | 1501 | /* Some sanity checks */ |
| 1502 | ret = -EBUSY; | ||
| 1501 | if (alias_data->domain != NULL && | 1503 | if (alias_data->domain != NULL && |
| 1502 | alias_data->domain != domain) | 1504 | alias_data->domain != domain) |
| 1503 | return -EBUSY; | 1505 | goto out_unlock; |
| 1504 | 1506 | ||
| 1505 | if (dev_data->domain != NULL && | 1507 | if (dev_data->domain != NULL && |
| 1506 | dev_data->domain != domain) | 1508 | dev_data->domain != domain) |
| 1507 | return -EBUSY; | 1509 | goto out_unlock; |
| 1508 | 1510 | ||
| 1509 | /* Do real assignment */ | 1511 | /* Do real assignment */ |
| 1510 | if (dev_data->alias != dev) { | 1512 | if (dev_data->alias != dev) { |
| @@ -1520,10 +1522,14 @@ static int __attach_device(struct device *dev, | |||
| 1520 | 1522 | ||
| 1521 | atomic_inc(&dev_data->bind); | 1523 | atomic_inc(&dev_data->bind); |
| 1522 | 1524 | ||
| 1525 | ret = 0; | ||
| 1526 | |||
| 1527 | out_unlock: | ||
| 1528 | |||
| 1523 | /* ready */ | 1529 | /* ready */ |
| 1524 | spin_unlock(&domain->lock); | 1530 | spin_unlock(&domain->lock); |
| 1525 | 1531 | ||
| 1526 | return 0; | 1532 | return ret; |
| 1527 | } | 1533 | } |
| 1528 | 1534 | ||
| 1529 | /* | 1535 | /* |
| @@ -2324,10 +2330,6 @@ int __init amd_iommu_init_dma_ops(void) | |||
| 2324 | 2330 | ||
| 2325 | iommu_detected = 1; | 2331 | iommu_detected = 1; |
| 2326 | swiotlb = 0; | 2332 | swiotlb = 0; |
| 2327 | #ifdef CONFIG_GART_IOMMU | ||
| 2328 | gart_iommu_aperture_disabled = 1; | ||
| 2329 | gart_iommu_aperture = 0; | ||
| 2330 | #endif | ||
| 2331 | 2333 | ||
| 2332 | /* Make the driver finally visible to the drivers */ | 2334 | /* Make the driver finally visible to the drivers */ |
| 2333 | dma_ops = &amd_iommu_dma_ops; | 2335 | dma_ops = &amd_iommu_dma_ops; |
diff --git a/arch/x86/kernel/amd_iommu_init.c b/arch/x86/kernel/amd_iommu_init.c index 3bacb4d0844c..3cc63e2b8dd4 100644 --- a/arch/x86/kernel/amd_iommu_init.c +++ b/arch/x86/kernel/amd_iommu_init.c | |||
| @@ -287,8 +287,12 @@ static u8 * __init iommu_map_mmio_space(u64 address) | |||
| 287 | { | 287 | { |
| 288 | u8 *ret; | 288 | u8 *ret; |
| 289 | 289 | ||
| 290 | if (!request_mem_region(address, MMIO_REGION_LENGTH, "amd_iommu")) | 290 | if (!request_mem_region(address, MMIO_REGION_LENGTH, "amd_iommu")) { |
| 291 | pr_err("AMD-Vi: Can not reserve memory region %llx for mmio\n", | ||
| 292 | address); | ||
| 293 | pr_err("AMD-Vi: This is a BIOS bug. Please contact your hardware vendor\n"); | ||
| 291 | return NULL; | 294 | return NULL; |
| 295 | } | ||
| 292 | 296 | ||
| 293 | ret = ioremap_nocache(address, MMIO_REGION_LENGTH); | 297 | ret = ioremap_nocache(address, MMIO_REGION_LENGTH); |
| 294 | if (ret != NULL) | 298 | if (ret != NULL) |
| @@ -1314,7 +1318,7 @@ static int __init amd_iommu_init(void) | |||
| 1314 | ret = amd_iommu_init_dma_ops(); | 1318 | ret = amd_iommu_init_dma_ops(); |
| 1315 | 1319 | ||
| 1316 | if (ret) | 1320 | if (ret) |
| 1317 | goto free; | 1321 | goto free_disable; |
| 1318 | 1322 | ||
| 1319 | amd_iommu_init_api(); | 1323 | amd_iommu_init_api(); |
| 1320 | 1324 | ||
| @@ -1332,9 +1336,10 @@ static int __init amd_iommu_init(void) | |||
| 1332 | out: | 1336 | out: |
| 1333 | return ret; | 1337 | return ret; |
| 1334 | 1338 | ||
| 1335 | free: | 1339 | free_disable: |
| 1336 | disable_iommus(); | 1340 | disable_iommus(); |
| 1337 | 1341 | ||
| 1342 | free: | ||
| 1338 | amd_iommu_uninit_devices(); | 1343 | amd_iommu_uninit_devices(); |
| 1339 | 1344 | ||
| 1340 | free_pages((unsigned long)amd_iommu_pd_alloc_bitmap, | 1345 | free_pages((unsigned long)amd_iommu_pd_alloc_bitmap, |
| @@ -1353,6 +1358,15 @@ free: | |||
| 1353 | 1358 | ||
| 1354 | free_unity_maps(); | 1359 | free_unity_maps(); |
| 1355 | 1360 | ||
| 1361 | #ifdef CONFIG_GART_IOMMU | ||
| 1362 | /* | ||
| 1363 | * We failed to initialize the AMD IOMMU - try fallback to GART | ||
| 1364 | * if possible. | ||
| 1365 | */ | ||
| 1366 | gart_iommu_init(); | ||
| 1367 | |||
| 1368 | #endif | ||
| 1369 | |||
| 1356 | goto out; | 1370 | goto out; |
| 1357 | } | 1371 | } |
| 1358 | 1372 | ||
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c index 707165dbc203..18cc42562250 100644 --- a/arch/x86/kernel/cpu/mcheck/mce.c +++ b/arch/x86/kernel/cpu/mcheck/mce.c | |||
| @@ -36,6 +36,7 @@ | |||
| 36 | #include <linux/fs.h> | 36 | #include <linux/fs.h> |
| 37 | #include <linux/mm.h> | 37 | #include <linux/mm.h> |
| 38 | #include <linux/debugfs.h> | 38 | #include <linux/debugfs.h> |
| 39 | #include <linux/edac_mce.h> | ||
| 39 | 40 | ||
| 40 | #include <asm/processor.h> | 41 | #include <asm/processor.h> |
| 41 | #include <asm/hw_irq.h> | 42 | #include <asm/hw_irq.h> |
| @@ -169,6 +170,15 @@ void mce_log(struct mce *mce) | |||
| 169 | entry = rcu_dereference_check_mce(mcelog.next); | 170 | entry = rcu_dereference_check_mce(mcelog.next); |
| 170 | for (;;) { | 171 | for (;;) { |
| 171 | /* | 172 | /* |
| 173 | * If edac_mce is enabled, it will check the error type | ||
| 174 | * and will process it, if it is a known error. | ||
| 175 | * Otherwise, the error will be sent through mcelog | ||
| 176 | * interface | ||
| 177 | */ | ||
| 178 | if (edac_mce_parse(mce)) | ||
| 179 | return; | ||
| 180 | |||
| 181 | /* | ||
| 172 | * When the buffer fills up discard new entries. | 182 | * When the buffer fills up discard new entries. |
| 173 | * Assume that the earlier errors are the more | 183 | * Assume that the earlier errors are the more |
| 174 | * interesting ones: | 184 | * interesting ones: |
diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c index c77586061bcb..5db5b7d65a18 100644 --- a/arch/x86/kernel/cpu/perf_event.c +++ b/arch/x86/kernel/cpu/perf_event.c | |||
| @@ -106,6 +106,7 @@ struct cpu_hw_events { | |||
| 106 | 106 | ||
| 107 | int n_events; | 107 | int n_events; |
| 108 | int n_added; | 108 | int n_added; |
| 109 | int n_txn; | ||
| 109 | int assign[X86_PMC_IDX_MAX]; /* event to counter assignment */ | 110 | int assign[X86_PMC_IDX_MAX]; /* event to counter assignment */ |
| 110 | u64 tags[X86_PMC_IDX_MAX]; | 111 | u64 tags[X86_PMC_IDX_MAX]; |
| 111 | struct perf_event *event_list[X86_PMC_IDX_MAX]; /* in enabled order */ | 112 | struct perf_event *event_list[X86_PMC_IDX_MAX]; /* in enabled order */ |
| @@ -983,6 +984,7 @@ static int x86_pmu_enable(struct perf_event *event) | |||
| 983 | out: | 984 | out: |
| 984 | cpuc->n_events = n; | 985 | cpuc->n_events = n; |
| 985 | cpuc->n_added += n - n0; | 986 | cpuc->n_added += n - n0; |
| 987 | cpuc->n_txn += n - n0; | ||
| 986 | 988 | ||
| 987 | return 0; | 989 | return 0; |
| 988 | } | 990 | } |
| @@ -1089,6 +1091,14 @@ static void x86_pmu_disable(struct perf_event *event) | |||
| 1089 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); | 1091 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); |
| 1090 | int i; | 1092 | int i; |
| 1091 | 1093 | ||
| 1094 | /* | ||
| 1095 | * If we're called during a txn, we don't need to do anything. | ||
| 1096 | * The events never got scheduled and ->cancel_txn will truncate | ||
| 1097 | * the event_list. | ||
| 1098 | */ | ||
| 1099 | if (cpuc->group_flag & PERF_EVENT_TXN_STARTED) | ||
| 1100 | return; | ||
| 1101 | |||
| 1092 | x86_pmu_stop(event); | 1102 | x86_pmu_stop(event); |
| 1093 | 1103 | ||
| 1094 | for (i = 0; i < cpuc->n_events; i++) { | 1104 | for (i = 0; i < cpuc->n_events; i++) { |
| @@ -1379,6 +1389,7 @@ static void x86_pmu_start_txn(const struct pmu *pmu) | |||
| 1379 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); | 1389 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); |
| 1380 | 1390 | ||
| 1381 | cpuc->group_flag |= PERF_EVENT_TXN_STARTED; | 1391 | cpuc->group_flag |= PERF_EVENT_TXN_STARTED; |
| 1392 | cpuc->n_txn = 0; | ||
| 1382 | } | 1393 | } |
| 1383 | 1394 | ||
| 1384 | /* | 1395 | /* |
| @@ -1391,6 +1402,11 @@ static void x86_pmu_cancel_txn(const struct pmu *pmu) | |||
| 1391 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); | 1402 | struct cpu_hw_events *cpuc = &__get_cpu_var(cpu_hw_events); |
| 1392 | 1403 | ||
| 1393 | cpuc->group_flag &= ~PERF_EVENT_TXN_STARTED; | 1404 | cpuc->group_flag &= ~PERF_EVENT_TXN_STARTED; |
| 1405 | /* | ||
| 1406 | * Truncate the collected events. | ||
| 1407 | */ | ||
| 1408 | cpuc->n_added -= cpuc->n_txn; | ||
| 1409 | cpuc->n_events -= cpuc->n_txn; | ||
| 1394 | } | 1410 | } |
| 1395 | 1411 | ||
| 1396 | /* | 1412 | /* |
| @@ -1419,6 +1435,12 @@ static int x86_pmu_commit_txn(const struct pmu *pmu) | |||
| 1419 | */ | 1435 | */ |
| 1420 | memcpy(cpuc->assign, assign, n*sizeof(int)); | 1436 | memcpy(cpuc->assign, assign, n*sizeof(int)); |
| 1421 | 1437 | ||
| 1438 | /* | ||
| 1439 | * Clear out the txn count so that ->cancel_txn() which gets | ||
| 1440 | * run after ->commit_txn() doesn't undo things. | ||
| 1441 | */ | ||
| 1442 | cpuc->n_txn = 0; | ||
| 1443 | |||
| 1422 | return 0; | 1444 | return 0; |
| 1423 | } | 1445 | } |
| 1424 | 1446 | ||
diff --git a/arch/x86/kernel/init_task.c b/arch/x86/kernel/init_task.c index 3a54dcb9cd0e..43e9ccf44947 100644 --- a/arch/x86/kernel/init_task.c +++ b/arch/x86/kernel/init_task.c | |||
| @@ -34,7 +34,7 @@ EXPORT_SYMBOL(init_task); | |||
| 34 | /* | 34 | /* |
| 35 | * per-CPU TSS segments. Threads are completely 'soft' on Linux, | 35 | * per-CPU TSS segments. Threads are completely 'soft' on Linux, |
| 36 | * no more per-task TSS's. The TSS size is kept cacheline-aligned | 36 | * no more per-task TSS's. The TSS size is kept cacheline-aligned |
| 37 | * so they are allowed to end up in the .data.cacheline_aligned | 37 | * so they are allowed to end up in the .data..cacheline_aligned |
| 38 | * section. Since TSS's are completely CPU-local, we want them | 38 | * section. Since TSS's are completely CPU-local, we want them |
| 39 | * on exact cacheline boundaries, to eliminate cacheline ping-pong. | 39 | * on exact cacheline boundaries, to eliminate cacheline ping-pong. |
| 40 | */ | 40 | */ |
diff --git a/arch/x86/kernel/setup_percpu.c b/arch/x86/kernel/setup_percpu.c index a867940a6dfc..de3b63ae3da2 100644 --- a/arch/x86/kernel/setup_percpu.c +++ b/arch/x86/kernel/setup_percpu.c | |||
| @@ -21,12 +21,6 @@ | |||
| 21 | #include <asm/cpu.h> | 21 | #include <asm/cpu.h> |
| 22 | #include <asm/stackprotector.h> | 22 | #include <asm/stackprotector.h> |
| 23 | 23 | ||
| 24 | #ifdef CONFIG_DEBUG_PER_CPU_MAPS | ||
| 25 | # define DBG(fmt, ...) pr_dbg(fmt, ##__VA_ARGS__) | ||
| 26 | #else | ||
| 27 | # define DBG(fmt, ...) do { if (0) pr_dbg(fmt, ##__VA_ARGS__); } while (0) | ||
| 28 | #endif | ||
| 29 | |||
| 30 | DEFINE_PER_CPU(int, cpu_number); | 24 | DEFINE_PER_CPU(int, cpu_number); |
| 31 | EXPORT_PER_CPU_SYMBOL(cpu_number); | 25 | EXPORT_PER_CPU_SYMBOL(cpu_number); |
| 32 | 26 | ||
| @@ -247,7 +241,7 @@ void __init setup_per_cpu_areas(void) | |||
| 247 | #endif | 241 | #endif |
| 248 | #endif | 242 | #endif |
| 249 | /* | 243 | /* |
| 250 | * Up to this point, the boot CPU has been using .data.init | 244 | * Up to this point, the boot CPU has been using .init.data |
| 251 | * area. Reload any changed state for the boot CPU. | 245 | * area. Reload any changed state for the boot CPU. |
| 252 | */ | 246 | */ |
| 253 | if (cpu == boot_cpu_id) | 247 | if (cpu == boot_cpu_id) |
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 37462f1ddba5..c4f33b2e77d6 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c | |||
| @@ -686,7 +686,7 @@ static void __cpuinit do_fork_idle(struct work_struct *work) | |||
| 686 | static void __cpuinit announce_cpu(int cpu, int apicid) | 686 | static void __cpuinit announce_cpu(int cpu, int apicid) |
| 687 | { | 687 | { |
| 688 | static int current_node = -1; | 688 | static int current_node = -1; |
| 689 | int node = cpu_to_node(cpu); | 689 | int node = early_cpu_to_node(cpu); |
| 690 | 690 | ||
| 691 | if (system_state == SYSTEM_BOOTING) { | 691 | if (system_state == SYSTEM_BOOTING) { |
| 692 | if (node != current_node) { | 692 | if (node != current_node) { |
diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S index 2cc249718c46..d0bb52296fa3 100644 --- a/arch/x86/kernel/vmlinux.lds.S +++ b/arch/x86/kernel/vmlinux.lds.S | |||
| @@ -97,7 +97,7 @@ SECTIONS | |||
| 97 | HEAD_TEXT | 97 | HEAD_TEXT |
| 98 | #ifdef CONFIG_X86_32 | 98 | #ifdef CONFIG_X86_32 |
| 99 | . = ALIGN(PAGE_SIZE); | 99 | . = ALIGN(PAGE_SIZE); |
| 100 | *(.text.page_aligned) | 100 | *(.text..page_aligned) |
| 101 | #endif | 101 | #endif |
| 102 | . = ALIGN(8); | 102 | . = ALIGN(8); |
| 103 | _stext = .; | 103 | _stext = .; |
| @@ -305,7 +305,7 @@ SECTIONS | |||
| 305 | . = ALIGN(PAGE_SIZE); | 305 | . = ALIGN(PAGE_SIZE); |
| 306 | .bss : AT(ADDR(.bss) - LOAD_OFFSET) { | 306 | .bss : AT(ADDR(.bss) - LOAD_OFFSET) { |
| 307 | __bss_start = .; | 307 | __bss_start = .; |
| 308 | *(.bss.page_aligned) | 308 | *(.bss..page_aligned) |
| 309 | *(.bss) | 309 | *(.bss) |
| 310 | . = ALIGN(4); | 310 | . = ALIGN(4); |
| 311 | __bss_stop = .; | 311 | __bss_stop = .; |
diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c index 550df481accd..787c52ca49c3 100644 --- a/arch/x86/mm/numa.c +++ b/arch/x86/mm/numa.c | |||
| @@ -3,12 +3,6 @@ | |||
| 3 | #include <linux/module.h> | 3 | #include <linux/module.h> |
| 4 | #include <linux/bootmem.h> | 4 | #include <linux/bootmem.h> |
| 5 | 5 | ||
| 6 | #ifdef CONFIG_DEBUG_PER_CPU_MAPS | ||
| 7 | # define DBG(x...) printk(KERN_DEBUG x) | ||
| 8 | #else | ||
| 9 | # define DBG(x...) | ||
| 10 | #endif | ||
| 11 | |||
| 12 | /* | 6 | /* |
| 13 | * Which logical CPUs are on which nodes | 7 | * Which logical CPUs are on which nodes |
| 14 | */ | 8 | */ |
diff --git a/arch/x86/pci/legacy.c b/arch/x86/pci/legacy.c index 0db5eaf54560..8d460eaf524f 100644 --- a/arch/x86/pci/legacy.c +++ b/arch/x86/pci/legacy.c | |||
| @@ -11,28 +11,14 @@ | |||
| 11 | */ | 11 | */ |
| 12 | static void __devinit pcibios_fixup_peer_bridges(void) | 12 | static void __devinit pcibios_fixup_peer_bridges(void) |
| 13 | { | 13 | { |
| 14 | int n, devfn; | 14 | int n; |
| 15 | long node; | ||
| 16 | 15 | ||
| 17 | if (pcibios_last_bus <= 0 || pcibios_last_bus > 0xff) | 16 | if (pcibios_last_bus <= 0 || pcibios_last_bus > 0xff) |
| 18 | return; | 17 | return; |
| 19 | DBG("PCI: Peer bridge fixup\n"); | 18 | DBG("PCI: Peer bridge fixup\n"); |
| 20 | 19 | ||
| 21 | for (n=0; n <= pcibios_last_bus; n++) { | 20 | for (n=0; n <= pcibios_last_bus; n++) |
| 22 | u32 l; | 21 | pcibios_scan_specific_bus(n); |
| 23 | if (pci_find_bus(0, n)) | ||
| 24 | continue; | ||
| 25 | node = get_mp_bus_to_node(n); | ||
| 26 | for (devfn = 0; devfn < 256; devfn += 8) { | ||
| 27 | if (!raw_pci_read(0, n, devfn, PCI_VENDOR_ID, 2, &l) && | ||
| 28 | l != 0x0000 && l != 0xffff) { | ||
| 29 | DBG("Found device at %02x:%02x [%04x]\n", n, devfn, l); | ||
| 30 | printk(KERN_INFO "PCI: Discovered peer bus %02x\n", n); | ||
| 31 | pci_scan_bus_on_node(n, &pci_root_ops, node); | ||
| 32 | break; | ||
| 33 | } | ||
| 34 | } | ||
| 35 | } | ||
| 36 | } | 22 | } |
| 37 | 23 | ||
| 38 | int __init pci_legacy_init(void) | 24 | int __init pci_legacy_init(void) |
| @@ -50,6 +36,28 @@ int __init pci_legacy_init(void) | |||
| 50 | return 0; | 36 | return 0; |
| 51 | } | 37 | } |
| 52 | 38 | ||
| 39 | void pcibios_scan_specific_bus(int busn) | ||
| 40 | { | ||
| 41 | int devfn; | ||
| 42 | long node; | ||
| 43 | u32 l; | ||
| 44 | |||
| 45 | if (pci_find_bus(0, busn)) | ||
| 46 | return; | ||
| 47 | |||
| 48 | node = get_mp_bus_to_node(busn); | ||
| 49 | for (devfn = 0; devfn < 256; devfn += 8) { | ||
| 50 | if (!raw_pci_read(0, busn, devfn, PCI_VENDOR_ID, 2, &l) && | ||
| 51 | l != 0x0000 && l != 0xffff) { | ||
| 52 | DBG("Found device at %02x:%02x [%04x]\n", busn, devfn, l); | ||
| 53 | printk(KERN_INFO "PCI: Discovered peer bus %02x\n", busn); | ||
| 54 | pci_scan_bus_on_node(busn, &pci_root_ops, node); | ||
| 55 | return; | ||
| 56 | } | ||
| 57 | } | ||
| 58 | } | ||
| 59 | EXPORT_SYMBOL_GPL(pcibios_scan_specific_bus); | ||
| 60 | |||
| 53 | int __init pci_subsys_init(void) | 61 | int __init pci_subsys_init(void) |
| 54 | { | 62 | { |
| 55 | /* | 63 | /* |
diff --git a/arch/x86/xen/suspend.c b/arch/x86/xen/suspend.c index 987267f79bf5..a9c661108034 100644 --- a/arch/x86/xen/suspend.c +++ b/arch/x86/xen/suspend.c | |||
| @@ -60,6 +60,6 @@ static void xen_vcpu_notify_restore(void *data) | |||
| 60 | 60 | ||
| 61 | void xen_arch_resume(void) | 61 | void xen_arch_resume(void) |
| 62 | { | 62 | { |
| 63 | smp_call_function(xen_vcpu_notify_restore, | 63 | on_each_cpu(xen_vcpu_notify_restore, |
| 64 | (void *)CLOCK_EVT_NOTIFY_RESUME, 1); | 64 | (void *)CLOCK_EVT_NOTIFY_RESUME, 1); |
| 65 | } | 65 | } |
