aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/pci-common.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/kernel/pci-common.c')
-rw-r--r--arch/powerpc/kernel/pci-common.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
index da5a3855a0c4..0f4181272311 100644
--- a/arch/powerpc/kernel/pci-common.c
+++ b/arch/powerpc/kernel/pci-common.c
@@ -16,8 +16,6 @@
16 * 2 of the License, or (at your option) any later version. 16 * 2 of the License, or (at your option) any later version.
17 */ 17 */
18 18
19#define DEBUG
20
21#include <linux/kernel.h> 19#include <linux/kernel.h>
22#include <linux/pci.h> 20#include <linux/pci.h>
23#include <linux/string.h> 21#include <linux/string.h>
@@ -258,7 +256,8 @@ int pci_read_irq_line(struct pci_dev *pci_dev)
258 } else { 256 } else {
259 pr_debug(" Got one, spec %d cells (0x%08x 0x%08x...) on %s\n", 257 pr_debug(" Got one, spec %d cells (0x%08x 0x%08x...) on %s\n",
260 oirq.size, oirq.specifier[0], oirq.specifier[1], 258 oirq.size, oirq.specifier[0], oirq.specifier[1],
261 oirq.controller->full_name); 259 oirq.controller ? oirq.controller->full_name :
260 "<default>");
262 261
263 virq = irq_create_of_mapping(oirq.controller, oirq.specifier, 262 virq = irq_create_of_mapping(oirq.controller, oirq.specifier,
264 oirq.size); 263 oirq.size);
@@ -562,8 +561,21 @@ int pci_mmap_legacy_page_range(struct pci_bus *bus,
562 (unsigned long long)(offset + size - 1)); 561 (unsigned long long)(offset + size - 1));
563 562
564 if (mmap_state == pci_mmap_mem) { 563 if (mmap_state == pci_mmap_mem) {
565 if ((offset + size) > hose->isa_mem_size) 564 /* Hack alert !
566 return -ENXIO; 565 *
566 * Because X is lame and can fail starting if it gets an error trying
567 * to mmap legacy_mem (instead of just moving on without legacy memory
568 * access) we fake it here by giving it anonymous memory, effectively
569 * behaving just like /dev/zero
570 */
571 if ((offset + size) > hose->isa_mem_size) {
572 printk(KERN_DEBUG
573 "Process %s (pid:%d) mapped non-existing PCI legacy memory for 0%04x:%02x\n",
574 current->comm, current->pid, pci_domain_nr(bus), bus->number);
575 if (vma->vm_flags & VM_SHARED)
576 return shmem_zero_setup(vma);
577 return 0;
578 }
567 offset += hose->isa_mem_phys; 579 offset += hose->isa_mem_phys;
568 } else { 580 } else {
569 unsigned long io_offset = (unsigned long)hose->io_base_virt - _IO_BASE; 581 unsigned long io_offset = (unsigned long)hose->io_base_virt - _IO_BASE;