diff options
| author | H. Peter Anvin <hpa@zytor.com> | 2008-08-26 01:45:37 -0400 |
|---|---|---|
| committer | H. Peter Anvin <hpa@zytor.com> | 2008-08-26 01:45:37 -0400 |
| commit | 94d4ac2f4a58c6e37876827c6688c61cef21290c (patch) | |
| tree | 732f4e4794f3c116041242f69754637f75c0dd57 /arch/powerpc/kernel | |
| parent | ed21763e7b0b3fb50e4efd9d4bc17ef5b035d304 (diff) | |
| parent | 08970fc4e0385790a7b093adfaa4165a189f9eb0 (diff) | |
Merge branch 'x86/urgent' into x86/cleanups
Diffstat (limited to 'arch/powerpc/kernel')
| -rw-r--r-- | arch/powerpc/kernel/crash_dump.c | 31 | ||||
| -rw-r--r-- | arch/powerpc/kernel/ibmebus.c | 12 | ||||
| -rw-r--r-- | arch/powerpc/kernel/vio.c | 2 |
3 files changed, 23 insertions, 22 deletions
diff --git a/arch/powerpc/kernel/crash_dump.c b/arch/powerpc/kernel/crash_dump.c index e0debcca0bfa..a323c9b32ee1 100644 --- a/arch/powerpc/kernel/crash_dump.c +++ b/arch/powerpc/kernel/crash_dump.c | |||
| @@ -86,6 +86,19 @@ static int __init parse_savemaxmem(char *p) | |||
| 86 | } | 86 | } |
| 87 | __setup("savemaxmem=", parse_savemaxmem); | 87 | __setup("savemaxmem=", parse_savemaxmem); |
| 88 | 88 | ||
| 89 | |||
| 90 | static size_t copy_oldmem_vaddr(void *vaddr, char *buf, size_t csize, | ||
| 91 | unsigned long offset, int userbuf) | ||
| 92 | { | ||
| 93 | if (userbuf) { | ||
| 94 | if (copy_to_user((char __user *)buf, (vaddr + offset), csize)) | ||
| 95 | return -EFAULT; | ||
| 96 | } else | ||
| 97 | memcpy(buf, (vaddr + offset), csize); | ||
| 98 | |||
| 99 | return csize; | ||
| 100 | } | ||
| 101 | |||
| 89 | /** | 102 | /** |
| 90 | * copy_oldmem_page - copy one page from "oldmem" | 103 | * copy_oldmem_page - copy one page from "oldmem" |
| 91 | * @pfn: page frame number to be copied | 104 | * @pfn: page frame number to be copied |
| @@ -107,16 +120,16 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf, | |||
| 107 | if (!csize) | 120 | if (!csize) |
| 108 | return 0; | 121 | return 0; |
| 109 | 122 | ||
| 110 | vaddr = __ioremap(pfn << PAGE_SHIFT, PAGE_SIZE, 0); | 123 | csize = min(csize, PAGE_SIZE); |
| 111 | 124 | ||
| 112 | if (userbuf) { | 125 | if (pfn < max_pfn) { |
| 113 | if (copy_to_user((char __user *)buf, (vaddr + offset), csize)) { | 126 | vaddr = __va(pfn << PAGE_SHIFT); |
| 114 | iounmap(vaddr); | 127 | csize = copy_oldmem_vaddr(vaddr, buf, csize, offset, userbuf); |
| 115 | return -EFAULT; | 128 | } else { |
| 116 | } | 129 | vaddr = __ioremap(pfn << PAGE_SHIFT, PAGE_SIZE, 0); |
| 117 | } else | 130 | csize = copy_oldmem_vaddr(vaddr, buf, csize, offset, userbuf); |
| 118 | memcpy(buf, (vaddr + offset), csize); | 131 | iounmap(vaddr); |
| 132 | } | ||
| 119 | 133 | ||
| 120 | iounmap(vaddr); | ||
| 121 | return csize; | 134 | return csize; |
| 122 | } | 135 | } |
diff --git a/arch/powerpc/kernel/ibmebus.c b/arch/powerpc/kernel/ibmebus.c index 9d42eb57aea3..a06362223f8d 100644 --- a/arch/powerpc/kernel/ibmebus.c +++ b/arch/powerpc/kernel/ibmebus.c | |||
| @@ -233,17 +233,6 @@ void ibmebus_free_irq(u32 ist, void *dev_id) | |||
| 233 | } | 233 | } |
| 234 | EXPORT_SYMBOL(ibmebus_free_irq); | 234 | EXPORT_SYMBOL(ibmebus_free_irq); |
| 235 | 235 | ||
| 236 | static ssize_t name_show(struct device *dev, | ||
| 237 | struct device_attribute *attr, char *buf) | ||
| 238 | { | ||
| 239 | return sprintf(buf, "%s\n", to_of_device(dev)->node->name); | ||
| 240 | } | ||
| 241 | |||
| 242 | static struct device_attribute ibmebus_dev_attrs[] = { | ||
| 243 | __ATTR_RO(name), | ||
| 244 | __ATTR_NULL | ||
| 245 | }; | ||
| 246 | |||
| 247 | static char *ibmebus_chomp(const char *in, size_t count) | 236 | static char *ibmebus_chomp(const char *in, size_t count) |
| 248 | { | 237 | { |
| 249 | char *out = kmalloc(count + 1, GFP_KERNEL); | 238 | char *out = kmalloc(count + 1, GFP_KERNEL); |
| @@ -327,7 +316,6 @@ static struct bus_attribute ibmebus_bus_attrs[] = { | |||
| 327 | 316 | ||
| 328 | struct bus_type ibmebus_bus_type = { | 317 | struct bus_type ibmebus_bus_type = { |
| 329 | .uevent = of_device_uevent, | 318 | .uevent = of_device_uevent, |
| 330 | .dev_attrs = ibmebus_dev_attrs, | ||
| 331 | .bus_attrs = ibmebus_bus_attrs | 319 | .bus_attrs = ibmebus_bus_attrs |
| 332 | }; | 320 | }; |
| 333 | EXPORT_SYMBOL(ibmebus_bus_type); | 321 | EXPORT_SYMBOL(ibmebus_bus_type); |
diff --git a/arch/powerpc/kernel/vio.c b/arch/powerpc/kernel/vio.c index 22a3c33fd751..2750fbab1975 100644 --- a/arch/powerpc/kernel/vio.c +++ b/arch/powerpc/kernel/vio.c | |||
| @@ -1113,7 +1113,7 @@ static int vio_bus_probe(struct device *dev) | |||
| 1113 | return error; | 1113 | return error; |
| 1114 | } | 1114 | } |
| 1115 | error = viodrv->probe(viodev, id); | 1115 | error = viodrv->probe(viodev, id); |
| 1116 | if (error) | 1116 | if (error && firmware_has_feature(FW_FEATURE_CMO)) |
| 1117 | vio_cmo_bus_remove(viodev); | 1117 | vio_cmo_bus_remove(viodev); |
| 1118 | } | 1118 | } |
| 1119 | 1119 | ||
