diff options
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/arm/mach-at91rm9200/devices.c | 12 | ||||
| -rw-r--r-- | arch/arm/mach-s3c2410/common-smdk.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-s3c2410/s3c2440-clock.c | 2 | ||||
| -rw-r--r-- | arch/i386/kernel/Makefile | 2 | ||||
| -rw-r--r-- | arch/i386/kernel/dmi_scan.c | 358 | ||||
| -rw-r--r-- | arch/i386/kernel/syscall_table.S | 1 | ||||
| -rw-r--r-- | arch/i386/pci/irq.c | 3 | ||||
| -rw-r--r-- | arch/ia64/kernel/Makefile | 3 | ||||
| -rw-r--r-- | arch/ia64/kernel/entry.S | 1 | ||||
| -rw-r--r-- | arch/ia64/kernel/mca.c | 10 | ||||
| -rw-r--r-- | arch/ia64/mm/discontig.c | 66 | ||||
| -rw-r--r-- | arch/powerpc/kernel/systbl.S | 1 | ||||
| -rw-r--r-- | arch/sparc/kernel/systbls.S | 2 | ||||
| -rw-r--r-- | arch/sparc64/kernel/pci.c | 1 | ||||
| -rw-r--r-- | arch/sparc64/kernel/sys32.S | 1 | ||||
| -rw-r--r-- | arch/sparc64/kernel/systbls.S | 4 | ||||
| -rw-r--r-- | arch/x86_64/kernel/Makefile | 4 |
17 files changed, 97 insertions, 376 deletions
diff --git a/arch/arm/mach-at91rm9200/devices.c b/arch/arm/mach-at91rm9200/devices.c index 1781b8f342c4..bfe47bd6e50c 100644 --- a/arch/arm/mach-at91rm9200/devices.c +++ b/arch/arm/mach-at91rm9200/devices.c | |||
| @@ -194,13 +194,23 @@ void __init at91_add_device_eth(struct at91_eth_data *data) {} | |||
| 194 | #if defined(CONFIG_AT91_CF) || defined(CONFIG_AT91_CF_MODULE) | 194 | #if defined(CONFIG_AT91_CF) || defined(CONFIG_AT91_CF_MODULE) |
| 195 | static struct at91_cf_data cf_data; | 195 | static struct at91_cf_data cf_data; |
| 196 | 196 | ||
| 197 | static struct resource at91_cf_resources[] = { | ||
| 198 | [0] = { | ||
| 199 | .start = AT91_CF_BASE, | ||
| 200 | /* ties up CS4, CS5, and CS6 */ | ||
| 201 | .end = AT91_CF_BASE + (0x30000000 - 1), | ||
| 202 | .flags = IORESOURCE_MEM | IORESOURCE_MEM_8AND16BIT, | ||
| 203 | }, | ||
| 204 | }; | ||
| 205 | |||
| 197 | static struct platform_device at91rm9200_cf_device = { | 206 | static struct platform_device at91rm9200_cf_device = { |
| 198 | .name = "at91_cf", | 207 | .name = "at91_cf", |
| 199 | .id = -1, | 208 | .id = -1, |
| 200 | .dev = { | 209 | .dev = { |
| 201 | .platform_data = &cf_data, | 210 | .platform_data = &cf_data, |
| 202 | }, | 211 | }, |
| 203 | .num_resources = 0, | 212 | .resource = at91_cf_resources, |
| 213 | .num_resources = ARRAY_SIZE(at91_cf_resources), | ||
| 204 | }; | 214 | }; |
| 205 | 215 | ||
| 206 | void __init at91_add_device_cf(struct at91_cf_data *data) | 216 | void __init at91_add_device_cf(struct at91_cf_data *data) |
diff --git a/arch/arm/mach-s3c2410/common-smdk.c b/arch/arm/mach-s3c2410/common-smdk.c index f372fbda124e..c940890f621f 100644 --- a/arch/arm/mach-s3c2410/common-smdk.c +++ b/arch/arm/mach-s3c2410/common-smdk.c | |||
| @@ -50,7 +50,7 @@ static struct mtd_partition smdk_default_nand_part[] = { | |||
| 50 | .offset = 0, | 50 | .offset = 0, |
| 51 | }, | 51 | }, |
| 52 | [1] = { | 52 | [1] = { |
| 53 | .name = "S3C2410 flash parition 1", | 53 | .name = "S3C2410 flash partition 1", |
| 54 | .offset = 0, | 54 | .offset = 0, |
| 55 | .size = SZ_2M, | 55 | .size = SZ_2M, |
| 56 | }, | 56 | }, |
diff --git a/arch/arm/mach-s3c2410/s3c2440-clock.c b/arch/arm/mach-s3c2410/s3c2440-clock.c index 57a15974d4b5..d7a30ed6c327 100644 --- a/arch/arm/mach-s3c2410/s3c2440-clock.c +++ b/arch/arm/mach-s3c2410/s3c2440-clock.c | |||
| @@ -139,7 +139,7 @@ static int s3c2440_clk_add(struct sys_device *sysdev) | |||
| 139 | 139 | ||
| 140 | clkdivn = __raw_readl(S3C2410_CLKDIVN); | 140 | clkdivn = __raw_readl(S3C2410_CLKDIVN); |
| 141 | clkdivn |= S3C2440_CLKDIVN_UCLK; | 141 | clkdivn |= S3C2440_CLKDIVN_UCLK; |
| 142 | __raw_writel(camdivn, S3C2410_CLKDIVN); | 142 | __raw_writel(clkdivn, S3C2410_CLKDIVN); |
| 143 | 143 | ||
| 144 | mutex_unlock(&clocks_mutex); | 144 | mutex_unlock(&clocks_mutex); |
| 145 | } | 145 | } |
diff --git a/arch/i386/kernel/Makefile b/arch/i386/kernel/Makefile index 5b9ed21216cf..96fb8a020af2 100644 --- a/arch/i386/kernel/Makefile +++ b/arch/i386/kernel/Makefile | |||
| @@ -6,7 +6,7 @@ extra-y := head.o init_task.o vmlinux.lds | |||
| 6 | 6 | ||
| 7 | obj-y := process.o semaphore.o signal.o entry.o traps.o irq.o \ | 7 | obj-y := process.o semaphore.o signal.o entry.o traps.o irq.o \ |
| 8 | ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_i386.o \ | 8 | ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_i386.o \ |
| 9 | pci-dma.o i386_ksyms.o i387.o dmi_scan.o bootflag.o \ | 9 | pci-dma.o i386_ksyms.o i387.o bootflag.o \ |
| 10 | quirks.o i8237.o topology.o alternative.o | 10 | quirks.o i8237.o topology.o alternative.o |
| 11 | 11 | ||
| 12 | obj-y += cpu/ | 12 | obj-y += cpu/ |
diff --git a/arch/i386/kernel/dmi_scan.c b/arch/i386/kernel/dmi_scan.c deleted file mode 100644 index 5efceebc48dc..000000000000 --- a/arch/i386/kernel/dmi_scan.c +++ /dev/null | |||
| @@ -1,358 +0,0 @@ | |||
| 1 | #include <linux/types.h> | ||
| 2 | #include <linux/string.h> | ||
| 3 | #include <linux/init.h> | ||
| 4 | #include <linux/module.h> | ||
| 5 | #include <linux/dmi.h> | ||
| 6 | #include <linux/efi.h> | ||
| 7 | #include <linux/bootmem.h> | ||
| 8 | #include <linux/slab.h> | ||
| 9 | #include <asm/dmi.h> | ||
| 10 | |||
| 11 | static char * __init dmi_string(struct dmi_header *dm, u8 s) | ||
| 12 | { | ||
| 13 | u8 *bp = ((u8 *) dm) + dm->length; | ||
| 14 | char *str = ""; | ||
| 15 | |||
| 16 | if (s) { | ||
| 17 | s--; | ||
| 18 | while (s > 0 && *bp) { | ||
| 19 | bp += strlen(bp) + 1; | ||
| 20 | s--; | ||
| 21 | } | ||
| 22 | |||
| 23 | if (*bp != 0) { | ||
| 24 | str = dmi_alloc(strlen(bp) + 1); | ||
| 25 | if (str != NULL) | ||
| 26 | strcpy(str, bp); | ||
| 27 | else | ||
| 28 | printk(KERN_ERR "dmi_string: out of memory.\n"); | ||
| 29 | } | ||
| 30 | } | ||
| 31 | |||
| 32 | return str; | ||
| 33 | } | ||
| 34 | |||
| 35 | /* | ||
| 36 | * We have to be cautious here. We have seen BIOSes with DMI pointers | ||
| 37 | * pointing to completely the wrong place for example | ||
| 38 | */ | ||
| 39 | static int __init dmi_table(u32 base, int len, int num, | ||
| 40 | void (*decode)(struct dmi_header *)) | ||
| 41 | { | ||
| 42 | u8 *buf, *data; | ||
| 43 | int i = 0; | ||
| 44 | |||
| 45 | buf = dmi_ioremap(base, len); | ||
| 46 | if (buf == NULL) | ||
| 47 | return -1; | ||
| 48 | |||
| 49 | data = buf; | ||
| 50 | |||
| 51 | /* | ||
| 52 | * Stop when we see all the items the table claimed to have | ||
| 53 | * OR we run off the end of the table (also happens) | ||
| 54 | */ | ||
| 55 | while ((i < num) && (data - buf + sizeof(struct dmi_header)) <= len) { | ||
| 56 | struct dmi_header *dm = (struct dmi_header *)data; | ||
| 57 | /* | ||
| 58 | * We want to know the total length (formated area and strings) | ||
| 59 | * before decoding to make sure we won't run off the table in | ||
| 60 | * dmi_decode or dmi_string | ||
| 61 | */ | ||
| 62 | data += dm->length; | ||
| 63 | while ((data - buf < len - 1) && (data[0] || data[1])) | ||
| 64 | data++; | ||
| 65 | if (data - buf < len - 1) | ||
| 66 | decode(dm); | ||
| 67 | data += 2; | ||
| 68 | i++; | ||
| 69 | } | ||
| 70 | dmi_iounmap(buf, len); | ||
| 71 | return 0; | ||
| 72 | } | ||
| 73 | |||
| 74 | static int __init dmi_checksum(u8 *buf) | ||
| 75 | { | ||
| 76 | u8 sum = 0; | ||
| 77 | int a; | ||
| 78 | |||
| 79 | for (a = 0; a < 15; a++) | ||
| 80 | sum += buf[a]; | ||
| 81 | |||
| 82 | return sum == 0; | ||
| 83 | } | ||
| 84 | |||
| 85 | static char *dmi_ident[DMI_STRING_MAX]; | ||
| 86 | static LIST_HEAD(dmi_devices); | ||
| 87 | |||
| 88 | /* | ||
| 89 | * Save a DMI string | ||
| 90 | */ | ||
| 91 | static void __init dmi_save_ident(struct dmi_header *dm, int slot, int string) | ||
| 92 | { | ||
| 93 | char *p, *d = (char*) dm; | ||
| 94 | |||
| 95 | if (dmi_ident[slot]) | ||
| 96 | return; | ||
| 97 | |||
| 98 | p = dmi_string(dm, d[string]); | ||
| 99 | if (p == NULL) | ||
| 100 | return; | ||
| 101 | |||
| 102 | dmi_ident[slot] = p; | ||
| 103 | } | ||
| 104 | |||
| 105 | static void __init dmi_save_devices(struct dmi_header *dm) | ||
| 106 | { | ||
| 107 | int i, count = (dm->length - sizeof(struct dmi_header)) / 2; | ||
| 108 | struct dmi_device *dev; | ||
| 109 | |||
| 110 | for (i = 0; i < count; i++) { | ||
| 111 | char *d = (char *)(dm + 1) + (i * 2); | ||
| 112 | |||
| 113 | /* Skip disabled device */ | ||
| 114 | if ((*d & 0x80) == 0) | ||
| 115 | continue; | ||
| 116 | |||
| 117 | dev = dmi_alloc(sizeof(*dev)); | ||
| 118 | if (!dev) { | ||
| 119 | printk(KERN_ERR "dmi_save_devices: out of memory.\n"); | ||
| 120 | break; | ||
| 121 | } | ||
| 122 | |||
| 123 | dev->type = *d++ & 0x7f; | ||
| 124 | dev->name = dmi_string(dm, *d); | ||
| 125 | dev->device_data = NULL; | ||
| 126 | |||
| 127 | list_add(&dev->list, &dmi_devices); | ||
| 128 | } | ||
| 129 | } | ||
| 130 | |||
| 131 | static void __init dmi_save_ipmi_device(struct dmi_header *dm) | ||
| 132 | { | ||
| 133 | struct dmi_device *dev; | ||
| 134 | void * data; | ||
| 135 | |||
| 136 | data = dmi_alloc(dm->length); | ||
| 137 | if (data == NULL) { | ||
| 138 | printk(KERN_ERR "dmi_save_ipmi_device: out of memory.\n"); | ||
| 139 | return; | ||
| 140 | } | ||
| 141 | |||
| 142 | memcpy(data, dm, dm->length); | ||
| 143 | |||
| 144 | dev = dmi_alloc(sizeof(*dev)); | ||
| 145 | if (!dev) { | ||
| 146 | printk(KERN_ERR "dmi_save_ipmi_device: out of memory.\n"); | ||
| 147 | return; | ||
| 148 | } | ||
| 149 | |||
| 150 | dev->type = DMI_DEV_TYPE_IPMI; | ||
| 151 | dev->name = "IPMI controller"; | ||
| 152 | dev->device_data = data; | ||
| 153 | |||
| 154 | list_add(&dev->list, &dmi_devices); | ||
| 155 | } | ||
| 156 | |||
| 157 | /* | ||
| 158 | * Process a DMI table entry. Right now all we care about are the BIOS | ||
| 159 | * and machine entries. For 2.5 we should pull the smbus controller info | ||
| 160 | * out of here. | ||
| 161 | */ | ||
| 162 | static void __init dmi_decode(struct dmi_header *dm) | ||
| 163 | { | ||
| 164 | switch(dm->type) { | ||
| 165 | case 0: /* BIOS Information */ | ||
| 166 | dmi_save_ident(dm, DMI_BIOS_VENDOR, 4); | ||
| 167 | dmi_save_ident(dm, DMI_BIOS_VERSION, 5); | ||
| 168 | dmi_save_ident(dm, DMI_BIOS_DATE, 8); | ||
| 169 | break; | ||
| 170 | case 1: /* System Information */ | ||
| 171 | dmi_save_ident(dm, DMI_SYS_VENDOR, 4); | ||
| 172 | dmi_save_ident(dm, DMI_PRODUCT_NAME, 5); | ||
| 173 | dmi_save_ident(dm, DMI_PRODUCT_VERSION, 6); | ||
| 174 | dmi_save_ident(dm, DMI_PRODUCT_SERIAL, 7); | ||
| 175 | break; | ||
| 176 | case 2: /* Base Board Information */ | ||
| 177 | dmi_save_ident(dm, DMI_BOARD_VENDOR, 4); | ||
| 178 | dmi_save_ident(dm, DMI_BOARD_NAME, 5); | ||
| 179 | dmi_save_ident(dm, DMI_BOARD_VERSION, 6); | ||
| 180 | break; | ||
| 181 | case 10: /* Onboard Devices Information */ | ||
| 182 | dmi_save_devices(dm); | ||
| 183 | break; | ||
| 184 | case 38: /* IPMI Device Information */ | ||
| 185 | dmi_save_ipmi_device(dm); | ||
| 186 | } | ||
| 187 | } | ||
| 188 | |||
| 189 | static int __init dmi_present(char __iomem *p) | ||
| 190 | { | ||
| 191 | u8 buf[15]; | ||
| 192 | memcpy_fromio(buf, p, 15); | ||
| 193 | if ((memcmp(buf, "_DMI_", 5) == 0) && dmi_checksum(buf)) { | ||
| 194 | u16 num = (buf[13] << 8) | buf[12]; | ||
| 195 | u16 len = (buf[7] << 8) | buf[6]; | ||
| 196 | u32 base = (buf[11] << 24) | (buf[10] << 16) | | ||
| 197 | (buf[9] << 8) | buf[8]; | ||
| 198 | |||
| 199 | /* | ||
| 200 | * DMI version 0.0 means that the real version is taken from | ||
| 201 | * the SMBIOS version, which we don't know at this point. | ||
| 202 | */ | ||
| 203 | if (buf[14] != 0) | ||
| 204 | printk(KERN_INFO "DMI %d.%d present.\n", | ||
| 205 | buf[14] >> 4, buf[14] & 0xF); | ||
| 206 | else | ||
| 207 | printk(KERN_INFO "DMI present.\n"); | ||
| 208 | if (dmi_table(base,len, num, dmi_decode) == 0) | ||
| 209 | return 0; | ||
| 210 | } | ||
| 211 | return 1; | ||
| 212 | } | ||
| 213 | |||
| 214 | void __init dmi_scan_machine(void) | ||
| 215 | { | ||
| 216 | char __iomem *p, *q; | ||
| 217 | int rc; | ||
| 218 | |||
| 219 | if (efi_enabled) { | ||
| 220 | if (efi.smbios == EFI_INVALID_TABLE_ADDR) | ||
| 221 | goto out; | ||
| 222 | |||
| 223 | /* This is called as a core_initcall() because it isn't | ||
| 224 | * needed during early boot. This also means we can | ||
| 225 | * iounmap the space when we're done with it. | ||
| 226 | */ | ||
| 227 | p = dmi_ioremap(efi.smbios, 32); | ||
| 228 | if (p == NULL) | ||
| 229 | goto out; | ||
| 230 | |||
| 231 | rc = dmi_present(p + 0x10); /* offset of _DMI_ string */ | ||
| 232 | dmi_iounmap(p, 32); | ||
| 233 | if (!rc) | ||
| 234 | return; | ||
| 235 | } | ||
| 236 | else { | ||
| 237 | /* | ||
| 238 | * no iounmap() for that ioremap(); it would be a no-op, but | ||
| 239 | * it's so early in setup that sucker gets confused into doing | ||
| 240 | * what it shouldn't if we actually call it. | ||
| 241 | */ | ||
| 242 | p = dmi_ioremap(0xF0000, 0x10000); | ||
| 243 | if (p == NULL) | ||
| 244 | goto out; | ||
| 245 | |||
| 246 | for (q = p; q < p + 0x10000; q += 16) { | ||
| 247 | rc = dmi_present(q); | ||
| 248 | if (!rc) | ||
| 249 | return; | ||
| 250 | } | ||
| 251 | } | ||
| 252 | out: printk(KERN_INFO "DMI not present or invalid.\n"); | ||
| 253 | } | ||
| 254 | |||
| 255 | /** | ||
| 256 | * dmi_check_system - check system DMI data | ||
| 257 | * @list: array of dmi_system_id structures to match against | ||
| 258 | * | ||
| 259 | * Walk the blacklist table running matching functions until someone | ||
| 260 | * returns non zero or we hit the end. Callback function is called for | ||
| 261 | * each successfull match. Returns the number of matches. | ||
| 262 | */ | ||
| 263 | int dmi_check_system(struct dmi_system_id *list) | ||
| 264 | { | ||
| 265 | int i, count = 0; | ||
| 266 | struct dmi_system_id *d = list; | ||
| 267 | |||
| 268 | while (d->ident) { | ||
| 269 | for (i = 0; i < ARRAY_SIZE(d->matches); i++) { | ||
| 270 | int s = d->matches[i].slot; | ||
| 271 | if (s == DMI_NONE) | ||
| 272 | continue; | ||
| 273 | if (dmi_ident[s] && strstr(dmi_ident[s], d->matches[i].substr)) | ||
| 274 | continue; | ||
| 275 | /* No match */ | ||
| 276 | goto fail; | ||
| 277 | } | ||
| 278 | count++; | ||
| 279 | if (d->callback && d->callback(d)) | ||
| 280 | break; | ||
| 281 | fail: d++; | ||
| 282 | } | ||
| 283 | |||
| 284 | return count; | ||
| 285 | } | ||
| 286 | EXPORT_SYMBOL(dmi_check_system); | ||
| 287 | |||
| 288 | /** | ||
| 289 | * dmi_get_system_info - return DMI data value | ||
| 290 | * @field: data index (see enum dmi_filed) | ||
| 291 | * | ||
| 292 | * Returns one DMI data value, can be used to perform | ||
| 293 | * complex DMI data checks. | ||
| 294 | */ | ||
| 295 | char *dmi_get_system_info(int field) | ||
| 296 | { | ||
| 297 | return dmi_ident[field]; | ||
| 298 | } | ||
| 299 | EXPORT_SYMBOL(dmi_get_system_info); | ||
| 300 | |||
| 301 | /** | ||
| 302 | * dmi_find_device - find onboard device by type/name | ||
| 303 | * @type: device type or %DMI_DEV_TYPE_ANY to match all device types | ||
| 304 | * @desc: device name string or %NULL to match all | ||
| 305 | * @from: previous device found in search, or %NULL for new search. | ||
| 306 | * | ||
| 307 | * Iterates through the list of known onboard devices. If a device is | ||
| 308 | * found with a matching @vendor and @device, a pointer to its device | ||
| 309 | * structure is returned. Otherwise, %NULL is returned. | ||
| 310 | * A new search is initiated by passing %NULL to the @from argument. | ||
| 311 | * If @from is not %NULL, searches continue from next device. | ||
| 312 | */ | ||
| 313 | struct dmi_device * dmi_find_device(int type, const char *name, | ||
| 314 | struct dmi_device *from) | ||
| 315 | { | ||
| 316 | struct list_head *d, *head = from ? &from->list : &dmi_devices; | ||
| 317 | |||
| 318 | for(d = head->next; d != &dmi_devices; d = d->next) { | ||
| 319 | struct dmi_device *dev = list_entry(d, struct dmi_device, list); | ||
| 320 | |||
| 321 | if (((type == DMI_DEV_TYPE_ANY) || (dev->type == type)) && | ||
| 322 | ((name == NULL) || (strcmp(dev->name, name) == 0))) | ||
| 323 | return dev; | ||
| 324 | } | ||
| 325 | |||
| 326 | return NULL; | ||
| 327 | } | ||
| 328 | EXPORT_SYMBOL(dmi_find_device); | ||
| 329 | |||
| 330 | /** | ||
| 331 | * dmi_get_year - Return year of a DMI date | ||
| 332 | * @field: data index (like dmi_get_system_info) | ||
| 333 | * | ||
| 334 | * Returns -1 when the field doesn't exist. 0 when it is broken. | ||
| 335 | */ | ||
| 336 | int dmi_get_year(int field) | ||
| 337 | { | ||
| 338 | int year; | ||
| 339 | char *s = dmi_get_system_info(field); | ||
| 340 | |||
| 341 | if (!s) | ||
| 342 | return -1; | ||
| 343 | if (*s == '\0') | ||
| 344 | return 0; | ||
| 345 | s = strrchr(s, '/'); | ||
| 346 | if (!s) | ||
| 347 | return 0; | ||
| 348 | |||
| 349 | s += 1; | ||
| 350 | year = simple_strtoul(s, NULL, 0); | ||
| 351 | if (year && year < 100) { /* 2-digit year */ | ||
| 352 | year += 1900; | ||
| 353 | if (year < 1996) /* no dates < spec 1.0 */ | ||
| 354 | year += 100; | ||
| 355 | } | ||
| 356 | |||
| 357 | return year; | ||
| 358 | } | ||
diff --git a/arch/i386/kernel/syscall_table.S b/arch/i386/kernel/syscall_table.S index 4f58b9c0efe3..f48bef15b4f0 100644 --- a/arch/i386/kernel/syscall_table.S +++ b/arch/i386/kernel/syscall_table.S | |||
| @@ -314,3 +314,4 @@ ENTRY(sys_call_table) | |||
| 314 | .long sys_get_robust_list | 314 | .long sys_get_robust_list |
| 315 | .long sys_splice | 315 | .long sys_splice |
| 316 | .long sys_sync_file_range | 316 | .long sys_sync_file_range |
| 317 | .long sys_tee /* 315 */ | ||
diff --git a/arch/i386/pci/irq.c b/arch/i386/pci/irq.c index 3ca59cad05f3..73235443fda7 100644 --- a/arch/i386/pci/irq.c +++ b/arch/i386/pci/irq.c | |||
| @@ -588,7 +588,10 @@ static __init int via_router_probe(struct irq_router *r, | |||
| 588 | case PCI_DEVICE_ID_VIA_82C596: | 588 | case PCI_DEVICE_ID_VIA_82C596: |
| 589 | case PCI_DEVICE_ID_VIA_82C686: | 589 | case PCI_DEVICE_ID_VIA_82C686: |
| 590 | case PCI_DEVICE_ID_VIA_8231: | 590 | case PCI_DEVICE_ID_VIA_8231: |
| 591 | case PCI_DEVICE_ID_VIA_8233A: | ||
| 591 | case PCI_DEVICE_ID_VIA_8235: | 592 | case PCI_DEVICE_ID_VIA_8235: |
| 593 | case PCI_DEVICE_ID_VIA_8237: | ||
| 594 | case PCI_DEVICE_ID_VIA_8237_SATA: | ||
| 592 | /* FIXME: add new ones for 8233/5 */ | 595 | /* FIXME: add new ones for 8233/5 */ |
| 593 | r->name = "VIA"; | 596 | r->name = "VIA"; |
| 594 | r->get = pirq_via_get; | 597 | r->get = pirq_via_get; |
diff --git a/arch/ia64/kernel/Makefile b/arch/ia64/kernel/Makefile index 59e871dae742..09a0dbc17fb6 100644 --- a/arch/ia64/kernel/Makefile +++ b/arch/ia64/kernel/Makefile | |||
| @@ -7,7 +7,7 @@ extra-y := head.o init_task.o vmlinux.lds | |||
| 7 | obj-y := acpi.o entry.o efi.o efi_stub.o gate-data.o fsys.o ia64_ksyms.o irq.o irq_ia64.o \ | 7 | obj-y := acpi.o entry.o efi.o efi_stub.o gate-data.o fsys.o ia64_ksyms.o irq.o irq_ia64.o \ |
| 8 | irq_lsapic.o ivt.o machvec.o pal.o patch.o process.o perfmon.o ptrace.o sal.o \ | 8 | irq_lsapic.o ivt.o machvec.o pal.o patch.o process.o perfmon.o ptrace.o sal.o \ |
| 9 | salinfo.o semaphore.o setup.o signal.o sys_ia64.o time.o traps.o unaligned.o \ | 9 | salinfo.o semaphore.o setup.o signal.o sys_ia64.o time.o traps.o unaligned.o \ |
| 10 | unwind.o mca.o mca_asm.o topology.o dmi_scan.o | 10 | unwind.o mca.o mca_asm.o topology.o |
| 11 | 11 | ||
| 12 | obj-$(CONFIG_IA64_BRL_EMU) += brl_emu.o | 12 | obj-$(CONFIG_IA64_BRL_EMU) += brl_emu.o |
| 13 | obj-$(CONFIG_IA64_GENERIC) += acpi-ext.o | 13 | obj-$(CONFIG_IA64_GENERIC) += acpi-ext.o |
| @@ -30,7 +30,6 @@ obj-$(CONFIG_IA64_MCA_RECOVERY) += mca_recovery.o | |||
| 30 | obj-$(CONFIG_KPROBES) += kprobes.o jprobes.o | 30 | obj-$(CONFIG_KPROBES) += kprobes.o jprobes.o |
| 31 | obj-$(CONFIG_IA64_UNCACHED_ALLOCATOR) += uncached.o | 31 | obj-$(CONFIG_IA64_UNCACHED_ALLOCATOR) += uncached.o |
| 32 | mca_recovery-y += mca_drv.o mca_drv_asm.o | 32 | mca_recovery-y += mca_drv.o mca_drv_asm.o |
| 33 | dmi_scan-y += ../../i386/kernel/dmi_scan.o | ||
| 34 | 33 | ||
| 35 | # The gate DSO image is built using a special linker script. | 34 | # The gate DSO image is built using a special linker script. |
| 36 | targets += gate.so gate-syms.o | 35 | targets += gate.so gate-syms.o |
diff --git a/arch/ia64/kernel/entry.S b/arch/ia64/kernel/entry.S index 6e16f6b35bd3..e30798811216 100644 --- a/arch/ia64/kernel/entry.S +++ b/arch/ia64/kernel/entry.S | |||
| @@ -1609,5 +1609,6 @@ sys_call_table: | |||
| 1609 | data8 sys_set_robust_list | 1609 | data8 sys_set_robust_list |
| 1610 | data8 sys_get_robust_list | 1610 | data8 sys_get_robust_list |
| 1611 | data8 sys_sync_file_range // 1300 | 1611 | data8 sys_sync_file_range // 1300 |
| 1612 | data8 sys_tee | ||
| 1612 | 1613 | ||
| 1613 | .org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls | 1614 | .org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls |
diff --git a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c index 5e6fdbe78bcd..6a0880639bc9 100644 --- a/arch/ia64/kernel/mca.c +++ b/arch/ia64/kernel/mca.c | |||
| @@ -963,7 +963,7 @@ no_mod: | |||
| 963 | */ | 963 | */ |
| 964 | 964 | ||
| 965 | static void | 965 | static void |
| 966 | ia64_wait_for_slaves(int monarch) | 966 | ia64_wait_for_slaves(int monarch, const char *type) |
| 967 | { | 967 | { |
| 968 | int c, wait = 0, missing = 0; | 968 | int c, wait = 0, missing = 0; |
| 969 | for_each_online_cpu(c) { | 969 | for_each_online_cpu(c) { |
| @@ -989,7 +989,7 @@ ia64_wait_for_slaves(int monarch) | |||
| 989 | } | 989 | } |
| 990 | if (!missing) | 990 | if (!missing) |
| 991 | goto all_in; | 991 | goto all_in; |
| 992 | printk(KERN_INFO "OS MCA slave did not rendezvous on cpu"); | 992 | printk(KERN_INFO "OS %s slave did not rendezvous on cpu", type); |
| 993 | for_each_online_cpu(c) { | 993 | for_each_online_cpu(c) { |
| 994 | if (c == monarch) | 994 | if (c == monarch) |
| 995 | continue; | 995 | continue; |
| @@ -1000,7 +1000,7 @@ ia64_wait_for_slaves(int monarch) | |||
| 1000 | return; | 1000 | return; |
| 1001 | 1001 | ||
| 1002 | all_in: | 1002 | all_in: |
| 1003 | printk(KERN_INFO "All OS MCA slaves have reached rendezvous\n"); | 1003 | printk(KERN_INFO "All OS %s slaves have reached rendezvous\n", type); |
| 1004 | return; | 1004 | return; |
| 1005 | } | 1005 | } |
| 1006 | 1006 | ||
| @@ -1038,7 +1038,7 @@ ia64_mca_handler(struct pt_regs *regs, struct switch_stack *sw, | |||
| 1038 | if (notify_die(DIE_MCA_MONARCH_ENTER, "MCA", regs, (long)&nd, 0, 0) | 1038 | if (notify_die(DIE_MCA_MONARCH_ENTER, "MCA", regs, (long)&nd, 0, 0) |
| 1039 | == NOTIFY_STOP) | 1039 | == NOTIFY_STOP) |
| 1040 | ia64_mca_spin(__FUNCTION__); | 1040 | ia64_mca_spin(__FUNCTION__); |
| 1041 | ia64_wait_for_slaves(cpu); | 1041 | ia64_wait_for_slaves(cpu, "MCA"); |
| 1042 | 1042 | ||
| 1043 | /* Wakeup all the processors which are spinning in the rendezvous loop. | 1043 | /* Wakeup all the processors which are spinning in the rendezvous loop. |
| 1044 | * They will leave SAL, then spin in the OS with interrupts disabled | 1044 | * They will leave SAL, then spin in the OS with interrupts disabled |
| @@ -1429,7 +1429,7 @@ ia64_init_handler(struct pt_regs *regs, struct switch_stack *sw, | |||
| 1429 | */ | 1429 | */ |
| 1430 | printk("Delaying for 5 seconds...\n"); | 1430 | printk("Delaying for 5 seconds...\n"); |
| 1431 | udelay(5*1000000); | 1431 | udelay(5*1000000); |
| 1432 | ia64_wait_for_slaves(cpu); | 1432 | ia64_wait_for_slaves(cpu, "INIT"); |
| 1433 | /* If nobody intercepts DIE_INIT_MONARCH_PROCESS then we drop through | 1433 | /* If nobody intercepts DIE_INIT_MONARCH_PROCESS then we drop through |
| 1434 | * to default_monarch_init_process() above and just print all the | 1434 | * to default_monarch_init_process() above and just print all the |
| 1435 | * tasks. | 1435 | * tasks. |
diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c index ec9eeb89975d..b6bcc9fa3603 100644 --- a/arch/ia64/mm/discontig.c +++ b/arch/ia64/mm/discontig.c | |||
| @@ -519,6 +519,68 @@ void __cpuinit *per_cpu_init(void) | |||
| 519 | } | 519 | } |
| 520 | #endif /* CONFIG_SMP */ | 520 | #endif /* CONFIG_SMP */ |
| 521 | 521 | ||
| 522 | #ifdef CONFIG_VIRTUAL_MEM_MAP | ||
| 523 | static inline int find_next_valid_pfn_for_pgdat(pg_data_t *pgdat, int i) | ||
| 524 | { | ||
| 525 | unsigned long end_address, hole_next_pfn; | ||
| 526 | unsigned long stop_address; | ||
| 527 | |||
| 528 | end_address = (unsigned long) &vmem_map[pgdat->node_start_pfn + i]; | ||
| 529 | end_address = PAGE_ALIGN(end_address); | ||
| 530 | |||
| 531 | stop_address = (unsigned long) &vmem_map[ | ||
| 532 | pgdat->node_start_pfn + pgdat->node_spanned_pages]; | ||
| 533 | |||
| 534 | do { | ||
| 535 | pgd_t *pgd; | ||
| 536 | pud_t *pud; | ||
| 537 | pmd_t *pmd; | ||
| 538 | pte_t *pte; | ||
| 539 | |||
| 540 | pgd = pgd_offset_k(end_address); | ||
| 541 | if (pgd_none(*pgd)) { | ||
| 542 | end_address += PGDIR_SIZE; | ||
| 543 | continue; | ||
| 544 | } | ||
| 545 | |||
| 546 | pud = pud_offset(pgd, end_address); | ||
| 547 | if (pud_none(*pud)) { | ||
| 548 | end_address += PUD_SIZE; | ||
| 549 | continue; | ||
| 550 | } | ||
| 551 | |||
| 552 | pmd = pmd_offset(pud, end_address); | ||
| 553 | if (pmd_none(*pmd)) { | ||
| 554 | end_address += PMD_SIZE; | ||
| 555 | continue; | ||
| 556 | } | ||
| 557 | |||
| 558 | pte = pte_offset_kernel(pmd, end_address); | ||
| 559 | retry_pte: | ||
| 560 | if (pte_none(*pte)) { | ||
| 561 | end_address += PAGE_SIZE; | ||
| 562 | pte++; | ||
| 563 | if ((end_address < stop_address) && | ||
| 564 | (end_address != ALIGN(end_address, 1UL << PMD_SHIFT))) | ||
| 565 | goto retry_pte; | ||
| 566 | continue; | ||
| 567 | } | ||
| 568 | /* Found next valid vmem_map page */ | ||
| 569 | break; | ||
| 570 | } while (end_address < stop_address); | ||
| 571 | |||
| 572 | end_address = min(end_address, stop_address); | ||
| 573 | end_address = end_address - (unsigned long) vmem_map + sizeof(struct page) - 1; | ||
| 574 | hole_next_pfn = end_address / sizeof(struct page); | ||
| 575 | return hole_next_pfn - pgdat->node_start_pfn; | ||
| 576 | } | ||
| 577 | #else | ||
| 578 | static inline int find_next_valid_pfn_for_pgdat(pg_data_t *pgdat, int i) | ||
| 579 | { | ||
| 580 | return i + 1; | ||
| 581 | } | ||
| 582 | #endif | ||
| 583 | |||
| 522 | /** | 584 | /** |
| 523 | * show_mem - give short summary of memory stats | 585 | * show_mem - give short summary of memory stats |
| 524 | * | 586 | * |
| @@ -547,8 +609,10 @@ void show_mem(void) | |||
| 547 | struct page *page; | 609 | struct page *page; |
| 548 | if (pfn_valid(pgdat->node_start_pfn + i)) | 610 | if (pfn_valid(pgdat->node_start_pfn + i)) |
| 549 | page = pfn_to_page(pgdat->node_start_pfn + i); | 611 | page = pfn_to_page(pgdat->node_start_pfn + i); |
| 550 | else | 612 | else { |
| 613 | i = find_next_valid_pfn_for_pgdat(pgdat, i) - 1; | ||
| 551 | continue; | 614 | continue; |
| 615 | } | ||
| 552 | if (PageReserved(page)) | 616 | if (PageReserved(page)) |
| 553 | reserved++; | 617 | reserved++; |
| 554 | else if (PageSwapCache(page)) | 618 | else if (PageSwapCache(page)) |
diff --git a/arch/powerpc/kernel/systbl.S b/arch/powerpc/kernel/systbl.S index 1424eab450ee..a14c96403840 100644 --- a/arch/powerpc/kernel/systbl.S +++ b/arch/powerpc/kernel/systbl.S | |||
| @@ -323,3 +323,4 @@ COMPAT_SYS(pselect6) | |||
| 323 | COMPAT_SYS(ppoll) | 323 | COMPAT_SYS(ppoll) |
| 324 | SYSCALL(unshare) | 324 | SYSCALL(unshare) |
| 325 | SYSCALL(splice) | 325 | SYSCALL(splice) |
| 326 | SYSCALL(tee) | ||
diff --git a/arch/sparc/kernel/systbls.S b/arch/sparc/kernel/systbls.S index fbbec5e761c6..db8faa75f94d 100644 --- a/arch/sparc/kernel/systbls.S +++ b/arch/sparc/kernel/systbls.S | |||
| @@ -75,7 +75,7 @@ sys_call_table: | |||
| 75 | /*265*/ .long sys_timer_delete, sys_timer_create, sys_nis_syscall, sys_io_setup, sys_io_destroy | 75 | /*265*/ .long sys_timer_delete, sys_timer_create, sys_nis_syscall, sys_io_setup, sys_io_destroy |
| 76 | /*270*/ .long sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink | 76 | /*270*/ .long sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink |
| 77 | /*275*/ .long sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid | 77 | /*275*/ .long sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid |
| 78 | /*280*/ .long sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat | 78 | /*280*/ .long sys_tee, sys_add_key, sys_request_key, sys_keyctl, sys_openat |
| 79 | /*285*/ .long sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64 | 79 | /*285*/ .long sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64 |
| 80 | /*290*/ .long sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat | 80 | /*290*/ .long sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat |
| 81 | /*295*/ .long sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare | 81 | /*295*/ .long sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare |
diff --git a/arch/sparc64/kernel/pci.c b/arch/sparc64/kernel/pci.c index dfccff29e182..f97ddeb105ac 100644 --- a/arch/sparc64/kernel/pci.c +++ b/arch/sparc64/kernel/pci.c | |||
| @@ -419,6 +419,7 @@ void pcibios_resource_to_bus(struct pci_dev *pdev, struct pci_bus_region *region | |||
| 419 | region->start = res->start - zero_res.start; | 419 | region->start = res->start - zero_res.start; |
| 420 | region->end = res->end - zero_res.start; | 420 | region->end = res->end - zero_res.start; |
| 421 | } | 421 | } |
| 422 | EXPORT_SYMBOL(pcibios_resource_to_bus); | ||
| 422 | 423 | ||
| 423 | void pcibios_bus_to_resource(struct pci_dev *pdev, struct resource *res, | 424 | void pcibios_bus_to_resource(struct pci_dev *pdev, struct resource *res, |
| 424 | struct pci_bus_region *region) | 425 | struct pci_bus_region *region) |
diff --git a/arch/sparc64/kernel/sys32.S b/arch/sparc64/kernel/sys32.S index 86dd5cb81e09..f9b75760163c 100644 --- a/arch/sparc64/kernel/sys32.S +++ b/arch/sparc64/kernel/sys32.S | |||
| @@ -138,6 +138,7 @@ SIGN2(sys32_ioprio_get, sys_ioprio_get, %o0, %o1) | |||
| 138 | SIGN3(sys32_ioprio_set, sys_ioprio_set, %o0, %o1, %o2) | 138 | SIGN3(sys32_ioprio_set, sys_ioprio_set, %o0, %o1, %o2) |
| 139 | SIGN2(sys32_splice, sys_splice, %o0, %o1) | 139 | SIGN2(sys32_splice, sys_splice, %o0, %o1) |
| 140 | SIGN2(sys32_sync_file_range, compat_sync_file_range, %o0, %o5) | 140 | SIGN2(sys32_sync_file_range, compat_sync_file_range, %o0, %o5) |
| 141 | SIGN2(sys32_tee, sys_tee, %o0, %o1) | ||
| 141 | 142 | ||
| 142 | .globl sys32_mmap2 | 143 | .globl sys32_mmap2 |
| 143 | sys32_mmap2: | 144 | sys32_mmap2: |
diff --git a/arch/sparc64/kernel/systbls.S b/arch/sparc64/kernel/systbls.S index 857b82c82875..62672cd92eca 100644 --- a/arch/sparc64/kernel/systbls.S +++ b/arch/sparc64/kernel/systbls.S | |||
| @@ -76,7 +76,7 @@ sys_call_table32: | |||
| 76 | .word sys_timer_delete, compat_sys_timer_create, sys_ni_syscall, compat_sys_io_setup, sys_io_destroy | 76 | .word sys_timer_delete, compat_sys_timer_create, sys_ni_syscall, compat_sys_io_setup, sys_io_destroy |
| 77 | /*270*/ .word sys32_io_submit, sys_io_cancel, compat_sys_io_getevents, sys32_mq_open, sys_mq_unlink | 77 | /*270*/ .word sys32_io_submit, sys_io_cancel, compat_sys_io_getevents, sys32_mq_open, sys_mq_unlink |
| 78 | .word compat_sys_mq_timedsend, compat_sys_mq_timedreceive, compat_sys_mq_notify, compat_sys_mq_getsetattr, compat_sys_waitid | 78 | .word compat_sys_mq_timedsend, compat_sys_mq_timedreceive, compat_sys_mq_notify, compat_sys_mq_getsetattr, compat_sys_waitid |
| 79 | /*280*/ .word sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, compat_sys_openat | 79 | /*280*/ .word sys32_tee, sys_add_key, sys_request_key, sys_keyctl, compat_sys_openat |
| 80 | .word sys_mkdirat, sys_mknodat, sys_fchownat, compat_sys_futimesat, compat_sys_fstatat64 | 80 | .word sys_mkdirat, sys_mknodat, sys_fchownat, compat_sys_futimesat, compat_sys_fstatat64 |
| 81 | /*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat | 81 | /*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat |
| 82 | .word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll, sys_unshare | 82 | .word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll, sys_unshare |
| @@ -145,7 +145,7 @@ sys_call_table: | |||
| 145 | .word sys_timer_delete, sys_timer_create, sys_ni_syscall, sys_io_setup, sys_io_destroy | 145 | .word sys_timer_delete, sys_timer_create, sys_ni_syscall, sys_io_setup, sys_io_destroy |
| 146 | /*270*/ .word sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink | 146 | /*270*/ .word sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink |
| 147 | .word sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid | 147 | .word sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid |
| 148 | /*280*/ .word sys_nis_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat | 148 | /*280*/ .word sys_tee, sys_add_key, sys_request_key, sys_keyctl, sys_openat |
| 149 | .word sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64 | 149 | .word sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64 |
| 150 | /*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat | 150 | /*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat |
| 151 | .word sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare | 151 | .word sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare |
diff --git a/arch/x86_64/kernel/Makefile b/arch/x86_64/kernel/Makefile index a098a11e7755..059c88313f4e 100644 --- a/arch/x86_64/kernel/Makefile +++ b/arch/x86_64/kernel/Makefile | |||
| @@ -8,7 +8,7 @@ obj-y := process.o signal.o entry.o traps.o irq.o \ | |||
| 8 | ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_x86_64.o \ | 8 | ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_x86_64.o \ |
| 9 | x8664_ksyms.o i387.o syscall.o vsyscall.o \ | 9 | x8664_ksyms.o i387.o syscall.o vsyscall.o \ |
| 10 | setup64.o bootflag.o e820.o reboot.o quirks.o i8237.o \ | 10 | setup64.o bootflag.o e820.o reboot.o quirks.o i8237.o \ |
| 11 | dmi_scan.o pci-dma.o pci-nommu.o | 11 | pci-dma.o pci-nommu.o |
| 12 | 12 | ||
| 13 | obj-$(CONFIG_X86_MCE) += mce.o | 13 | obj-$(CONFIG_X86_MCE) += mce.o |
| 14 | obj-$(CONFIG_X86_MCE_INTEL) += mce_intel.o | 14 | obj-$(CONFIG_X86_MCE_INTEL) += mce_intel.o |
| @@ -49,5 +49,3 @@ intel_cacheinfo-y += ../../i386/kernel/cpu/intel_cacheinfo.o | |||
| 49 | quirks-y += ../../i386/kernel/quirks.o | 49 | quirks-y += ../../i386/kernel/quirks.o |
| 50 | i8237-y += ../../i386/kernel/i8237.o | 50 | i8237-y += ../../i386/kernel/i8237.o |
| 51 | msr-$(subst m,y,$(CONFIG_X86_MSR)) += ../../i386/kernel/msr.o | 51 | msr-$(subst m,y,$(CONFIG_X86_MSR)) += ../../i386/kernel/msr.o |
| 52 | dmi_scan-y += ../../i386/kernel/dmi_scan.o | ||
| 53 | |||
