diff options
-rw-r--r-- | arch/mips/include/asm/pci.h | 5 | ||||
-rw-r--r-- | arch/mips/pci/pci.c | 24 | ||||
-rw-r--r-- | arch/um/drivers/mconsole_kern.c | 4 | ||||
-rw-r--r-- | drivers/block/pktcdvd.c | 2 | ||||
-rw-r--r-- | drivers/firewire/fw-ohci.c | 11 | ||||
-rw-r--r-- | drivers/firewire/fw-transaction.c | 3 | ||||
-rw-r--r-- | drivers/firewire/fw-transaction.h | 2 | ||||
-rw-r--r-- | drivers/ieee1394/nodemgr.c | 2 | ||||
-rw-r--r-- | drivers/rtc/rtc-ds1672.c | 6 | ||||
-rw-r--r-- | drivers/rtc/rtc-max6900.c | 6 | ||||
-rw-r--r-- | drivers/rtc/rtc-twl4030.c | 2 | ||||
-rw-r--r-- | drivers/serial/s3c2440.c | 2 | ||||
-rw-r--r-- | drivers/video/console/fbcon.c | 6 | ||||
-rw-r--r-- | drivers/video/mb862xx/mb862xxfb.c | 4 | ||||
-rw-r--r-- | fs/ext4/balloc.c | 4 | ||||
-rw-r--r-- | fs/inotify.c | 2 | ||||
-rw-r--r-- | fs/proc/base.c | 2 | ||||
-rw-r--r-- | fs/proc/task_mmu.c | 4 | ||||
-rw-r--r-- | include/asm-generic/atomic.h | 2 | ||||
-rw-r--r-- | include/linux/ftrace.h | 3 | ||||
-rw-r--r-- | kernel/latencytop.c | 2 | ||||
-rw-r--r-- | kernel/relay.c | 7 | ||||
-rw-r--r-- | lib/percpu_counter.c | 7 | ||||
-rw-r--r-- | mm/backing-dev.c | 2 | ||||
-rw-r--r-- | mm/migrate.c | 59 | ||||
-rw-r--r-- | mm/page_cgroup.c | 3 | ||||
-rw-r--r-- | mm/slub.c | 2 | ||||
-rw-r--r-- | mm/swap.c | 13 | ||||
-rw-r--r-- | mm/vmalloc.c | 2 |
29 files changed, 136 insertions, 57 deletions
diff --git a/arch/mips/include/asm/pci.h b/arch/mips/include/asm/pci.h index 5510c53b7feb..053e4634acee 100644 --- a/arch/mips/include/asm/pci.h +++ b/arch/mips/include/asm/pci.h | |||
@@ -79,6 +79,11 @@ static inline void pcibios_penalize_isa_irq(int irq, int active) | |||
79 | /* We don't do dynamic PCI IRQ allocation */ | 79 | /* We don't do dynamic PCI IRQ allocation */ |
80 | } | 80 | } |
81 | 81 | ||
82 | #define HAVE_PCI_MMAP | ||
83 | |||
84 | extern int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, | ||
85 | enum pci_mmap_state mmap_state, int write_combine); | ||
86 | |||
82 | /* | 87 | /* |
83 | * Dynamic DMA mapping stuff. | 88 | * Dynamic DMA mapping stuff. |
84 | * MIPS has everything mapped statically. | 89 | * MIPS has everything mapped statically. |
diff --git a/arch/mips/pci/pci.c b/arch/mips/pci/pci.c index a377e9d2d029..62cae740e250 100644 --- a/arch/mips/pci/pci.c +++ b/arch/mips/pci/pci.c | |||
@@ -354,6 +354,30 @@ EXPORT_SYMBOL(PCIBIOS_MIN_IO); | |||
354 | EXPORT_SYMBOL(PCIBIOS_MIN_MEM); | 354 | EXPORT_SYMBOL(PCIBIOS_MIN_MEM); |
355 | #endif | 355 | #endif |
356 | 356 | ||
357 | int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, | ||
358 | enum pci_mmap_state mmap_state, int write_combine) | ||
359 | { | ||
360 | unsigned long prot; | ||
361 | |||
362 | /* | ||
363 | * I/O space can be accessed via normal processor loads and stores on | ||
364 | * this platform but for now we elect not to do this and portable | ||
365 | * drivers should not do this anyway. | ||
366 | */ | ||
367 | if (mmap_state == pci_mmap_io) | ||
368 | return -EINVAL; | ||
369 | |||
370 | /* | ||
371 | * Ignore write-combine; for now only return uncached mappings. | ||
372 | */ | ||
373 | prot = pgprot_val(vma->vm_page_prot); | ||
374 | prot = (prot & ~_CACHE_MASK) | _CACHE_UNCACHED; | ||
375 | vma->vm_page_prot = __pgprot(prot); | ||
376 | |||
377 | return remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, | ||
378 | vma->vm_end - vma->vm_start, vma->vm_page_prot); | ||
379 | } | ||
380 | |||
357 | char * (*pcibios_plat_setup)(char *str) __devinitdata; | 381 | char * (*pcibios_plat_setup)(char *str) __devinitdata; |
358 | 382 | ||
359 | char *__devinit pcibios_setup(char *str) | 383 | char *__devinit pcibios_setup(char *str) |
diff --git a/arch/um/drivers/mconsole_kern.c b/arch/um/drivers/mconsole_kern.c index 19d579d74d27..8f44ebb0dec8 100644 --- a/arch/um/drivers/mconsole_kern.c +++ b/arch/um/drivers/mconsole_kern.c | |||
@@ -16,6 +16,8 @@ | |||
16 | #include <linux/slab.h> | 16 | #include <linux/slab.h> |
17 | #include <linux/syscalls.h> | 17 | #include <linux/syscalls.h> |
18 | #include <linux/utsname.h> | 18 | #include <linux/utsname.h> |
19 | #include <linux/socket.h> | ||
20 | #include <linux/un.h> | ||
19 | #include <linux/workqueue.h> | 21 | #include <linux/workqueue.h> |
20 | #include <linux/mutex.h> | 22 | #include <linux/mutex.h> |
21 | #include <asm/uaccess.h> | 23 | #include <asm/uaccess.h> |
@@ -785,7 +787,7 @@ static int __init mconsole_init(void) | |||
785 | /* long to avoid size mismatch warnings from gcc */ | 787 | /* long to avoid size mismatch warnings from gcc */ |
786 | long sock; | 788 | long sock; |
787 | int err; | 789 | int err; |
788 | char file[256]; | 790 | char file[UNIX_PATH_MAX]; |
789 | 791 | ||
790 | if (umid_file_name("mconsole", file, sizeof(file))) | 792 | if (umid_file_name("mconsole", file, sizeof(file))) |
791 | return -1; | 793 | return -1; |
diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c index edda7b6b077b..dc7a8c352da2 100644 --- a/drivers/block/pktcdvd.c +++ b/drivers/block/pktcdvd.c | |||
@@ -302,7 +302,7 @@ static struct kobj_type kobj_pkt_type_wqueue = { | |||
302 | static void pkt_sysfs_dev_new(struct pktcdvd_device *pd) | 302 | static void pkt_sysfs_dev_new(struct pktcdvd_device *pd) |
303 | { | 303 | { |
304 | if (class_pktcdvd) { | 304 | if (class_pktcdvd) { |
305 | pd->dev = device_create(class_pktcdvd, NULL, pd->pkt_dev, NULL, | 305 | pd->dev = device_create(class_pktcdvd, NULL, MKDEV(0, 0), NULL, |
306 | "%s", pd->name); | 306 | "%s", pd->name); |
307 | if (IS_ERR(pd->dev)) | 307 | if (IS_ERR(pd->dev)) |
308 | pd->dev = NULL; | 308 | pd->dev = NULL; |
diff --git a/drivers/firewire/fw-ohci.c b/drivers/firewire/fw-ohci.c index 46610b090415..ab9c01e462ef 100644 --- a/drivers/firewire/fw-ohci.c +++ b/drivers/firewire/fw-ohci.c | |||
@@ -974,6 +974,7 @@ at_context_queue_packet(struct context *ctx, struct fw_packet *packet) | |||
974 | packet->ack = RCODE_SEND_ERROR; | 974 | packet->ack = RCODE_SEND_ERROR; |
975 | return -1; | 975 | return -1; |
976 | } | 976 | } |
977 | packet->payload_bus = payload_bus; | ||
977 | 978 | ||
978 | d[2].req_count = cpu_to_le16(packet->payload_length); | 979 | d[2].req_count = cpu_to_le16(packet->payload_length); |
979 | d[2].data_address = cpu_to_le32(payload_bus); | 980 | d[2].data_address = cpu_to_le32(payload_bus); |
@@ -1025,7 +1026,6 @@ static int handle_at_packet(struct context *context, | |||
1025 | struct driver_data *driver_data; | 1026 | struct driver_data *driver_data; |
1026 | struct fw_packet *packet; | 1027 | struct fw_packet *packet; |
1027 | struct fw_ohci *ohci = context->ohci; | 1028 | struct fw_ohci *ohci = context->ohci; |
1028 | dma_addr_t payload_bus; | ||
1029 | int evt; | 1029 | int evt; |
1030 | 1030 | ||
1031 | if (last->transfer_status == 0) | 1031 | if (last->transfer_status == 0) |
@@ -1038,9 +1038,8 @@ static int handle_at_packet(struct context *context, | |||
1038 | /* This packet was cancelled, just continue. */ | 1038 | /* This packet was cancelled, just continue. */ |
1039 | return 1; | 1039 | return 1; |
1040 | 1040 | ||
1041 | payload_bus = le32_to_cpu(last->data_address); | 1041 | if (packet->payload_bus) |
1042 | if (payload_bus != 0) | 1042 | dma_unmap_single(ohci->card.device, packet->payload_bus, |
1043 | dma_unmap_single(ohci->card.device, payload_bus, | ||
1044 | packet->payload_length, DMA_TO_DEVICE); | 1043 | packet->payload_length, DMA_TO_DEVICE); |
1045 | 1044 | ||
1046 | evt = le16_to_cpu(last->transfer_status) & 0x1f; | 1045 | evt = le16_to_cpu(last->transfer_status) & 0x1f; |
@@ -1697,6 +1696,10 @@ static int ohci_cancel_packet(struct fw_card *card, struct fw_packet *packet) | |||
1697 | if (packet->ack != 0) | 1696 | if (packet->ack != 0) |
1698 | goto out; | 1697 | goto out; |
1699 | 1698 | ||
1699 | if (packet->payload_bus) | ||
1700 | dma_unmap_single(ohci->card.device, packet->payload_bus, | ||
1701 | packet->payload_length, DMA_TO_DEVICE); | ||
1702 | |||
1700 | log_ar_at_event('T', packet->speed, packet->header, 0x20); | 1703 | log_ar_at_event('T', packet->speed, packet->header, 0x20); |
1701 | driver_data->packet = NULL; | 1704 | driver_data->packet = NULL; |
1702 | packet->ack = RCODE_CANCELLED; | 1705 | packet->ack = RCODE_CANCELLED; |
diff --git a/drivers/firewire/fw-transaction.c b/drivers/firewire/fw-transaction.c index 022ac4fabb67..2884f876397b 100644 --- a/drivers/firewire/fw-transaction.c +++ b/drivers/firewire/fw-transaction.c | |||
@@ -207,6 +207,7 @@ fw_fill_request(struct fw_packet *packet, int tcode, int tlabel, | |||
207 | packet->speed = speed; | 207 | packet->speed = speed; |
208 | packet->generation = generation; | 208 | packet->generation = generation; |
209 | packet->ack = 0; | 209 | packet->ack = 0; |
210 | packet->payload_bus = 0; | ||
210 | } | 211 | } |
211 | 212 | ||
212 | /** | 213 | /** |
@@ -581,6 +582,8 @@ fw_fill_response(struct fw_packet *response, u32 *request_header, | |||
581 | BUG(); | 582 | BUG(); |
582 | return; | 583 | return; |
583 | } | 584 | } |
585 | |||
586 | response->payload_bus = 0; | ||
584 | } | 587 | } |
585 | EXPORT_SYMBOL(fw_fill_response); | 588 | EXPORT_SYMBOL(fw_fill_response); |
586 | 589 | ||
diff --git a/drivers/firewire/fw-transaction.h b/drivers/firewire/fw-transaction.h index aed7dbb17cda..839466f0a795 100644 --- a/drivers/firewire/fw-transaction.h +++ b/drivers/firewire/fw-transaction.h | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <linux/list.h> | 27 | #include <linux/list.h> |
28 | #include <linux/spinlock_types.h> | 28 | #include <linux/spinlock_types.h> |
29 | #include <linux/timer.h> | 29 | #include <linux/timer.h> |
30 | #include <linux/types.h> | ||
30 | #include <linux/workqueue.h> | 31 | #include <linux/workqueue.h> |
31 | 32 | ||
32 | #define TCODE_IS_READ_REQUEST(tcode) (((tcode) & ~1) == 4) | 33 | #define TCODE_IS_READ_REQUEST(tcode) (((tcode) & ~1) == 4) |
@@ -153,6 +154,7 @@ struct fw_packet { | |||
153 | size_t header_length; | 154 | size_t header_length; |
154 | void *payload; | 155 | void *payload; |
155 | size_t payload_length; | 156 | size_t payload_length; |
157 | dma_addr_t payload_bus; | ||
156 | u32 timestamp; | 158 | u32 timestamp; |
157 | 159 | ||
158 | /* | 160 | /* |
diff --git a/drivers/ieee1394/nodemgr.c b/drivers/ieee1394/nodemgr.c index 9e39f73282ee..d333ae22459c 100644 --- a/drivers/ieee1394/nodemgr.c +++ b/drivers/ieee1394/nodemgr.c | |||
@@ -1685,6 +1685,7 @@ static int nodemgr_host_thread(void *data) | |||
1685 | g = get_hpsb_generation(host); | 1685 | g = get_hpsb_generation(host); |
1686 | for (i = 0; i < 4 ; i++) { | 1686 | for (i = 0; i < 4 ; i++) { |
1687 | msleep_interruptible(63); | 1687 | msleep_interruptible(63); |
1688 | try_to_freeze(); | ||
1688 | if (kthread_should_stop()) | 1689 | if (kthread_should_stop()) |
1689 | goto exit; | 1690 | goto exit; |
1690 | 1691 | ||
@@ -1725,6 +1726,7 @@ static int nodemgr_host_thread(void *data) | |||
1725 | /* Sleep 3 seconds */ | 1726 | /* Sleep 3 seconds */ |
1726 | for (i = 3000/200; i; i--) { | 1727 | for (i = 3000/200; i; i--) { |
1727 | msleep_interruptible(200); | 1728 | msleep_interruptible(200); |
1729 | try_to_freeze(); | ||
1728 | if (kthread_should_stop()) | 1730 | if (kthread_should_stop()) |
1729 | goto exit; | 1731 | goto exit; |
1730 | 1732 | ||
diff --git a/drivers/rtc/rtc-ds1672.c b/drivers/rtc/rtc-ds1672.c index 341d7a5b45a2..4e91419e8911 100644 --- a/drivers/rtc/rtc-ds1672.c +++ b/drivers/rtc/rtc-ds1672.c | |||
@@ -209,12 +209,18 @@ static int ds1672_probe(struct i2c_client *client, | |||
209 | return err; | 209 | return err; |
210 | } | 210 | } |
211 | 211 | ||
212 | static struct i2c_device_id ds1672_id[] = { | ||
213 | { "ds1672", 0 }, | ||
214 | { } | ||
215 | }; | ||
216 | |||
212 | static struct i2c_driver ds1672_driver = { | 217 | static struct i2c_driver ds1672_driver = { |
213 | .driver = { | 218 | .driver = { |
214 | .name = "rtc-ds1672", | 219 | .name = "rtc-ds1672", |
215 | }, | 220 | }, |
216 | .probe = &ds1672_probe, | 221 | .probe = &ds1672_probe, |
217 | .remove = &ds1672_remove, | 222 | .remove = &ds1672_remove, |
223 | .id_table = ds1672_id, | ||
218 | }; | 224 | }; |
219 | 225 | ||
220 | static int __init ds1672_init(void) | 226 | static int __init ds1672_init(void) |
diff --git a/drivers/rtc/rtc-max6900.c b/drivers/rtc/rtc-max6900.c index 80782798763f..a4f6665ab3c5 100644 --- a/drivers/rtc/rtc-max6900.c +++ b/drivers/rtc/rtc-max6900.c | |||
@@ -247,12 +247,18 @@ max6900_probe(struct i2c_client *client, const struct i2c_device_id *id) | |||
247 | return 0; | 247 | return 0; |
248 | } | 248 | } |
249 | 249 | ||
250 | static struct i2c_device_id max6900_id[] = { | ||
251 | { "max6900", 0 }, | ||
252 | { } | ||
253 | }; | ||
254 | |||
250 | static struct i2c_driver max6900_driver = { | 255 | static struct i2c_driver max6900_driver = { |
251 | .driver = { | 256 | .driver = { |
252 | .name = "rtc-max6900", | 257 | .name = "rtc-max6900", |
253 | }, | 258 | }, |
254 | .probe = max6900_probe, | 259 | .probe = max6900_probe, |
255 | .remove = max6900_remove, | 260 | .remove = max6900_remove, |
261 | .id_table = max6900_id, | ||
256 | }; | 262 | }; |
257 | 263 | ||
258 | static int __init max6900_init(void) | 264 | static int __init max6900_init(void) |
diff --git a/drivers/rtc/rtc-twl4030.c b/drivers/rtc/rtc-twl4030.c index abe87a4d2665..01d8da9afdc8 100644 --- a/drivers/rtc/rtc-twl4030.c +++ b/drivers/rtc/rtc-twl4030.c | |||
@@ -337,7 +337,7 @@ static int twl4030_rtc_ioctl(struct device *dev, unsigned int cmd, | |||
337 | } | 337 | } |
338 | 338 | ||
339 | #else | 339 | #else |
340 | #define omap_rtc_ioctl NULL | 340 | #define twl4030_rtc_ioctl NULL |
341 | #endif | 341 | #endif |
342 | 342 | ||
343 | static irqreturn_t twl4030_rtc_interrupt(int irq, void *rtc) | 343 | static irqreturn_t twl4030_rtc_interrupt(int irq, void *rtc) |
diff --git a/drivers/serial/s3c2440.c b/drivers/serial/s3c2440.c index 317d239ab740..29cbb0afef8e 100644 --- a/drivers/serial/s3c2440.c +++ b/drivers/serial/s3c2440.c | |||
@@ -177,5 +177,5 @@ module_exit(s3c2440_serial_exit); | |||
177 | 177 | ||
178 | MODULE_DESCRIPTION("Samsung S3C2440,S3C2442 SoC Serial port driver"); | 178 | MODULE_DESCRIPTION("Samsung S3C2440,S3C2442 SoC Serial port driver"); |
179 | MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>"); | 179 | MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>"); |
180 | MODULE_LICENSE("GPLi v2"); | 180 | MODULE_LICENSE("GPL v2"); |
181 | MODULE_ALIAS("platform:s3c2440-uart"); | 181 | MODULE_ALIAS("platform:s3c2440-uart"); |
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index 67ff370d80af..0b2adefe9e3d 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c | |||
@@ -3531,12 +3531,18 @@ static void fbcon_exit(void) | |||
3531 | softback_buf = 0UL; | 3531 | softback_buf = 0UL; |
3532 | 3532 | ||
3533 | for (i = 0; i < FB_MAX; i++) { | 3533 | for (i = 0; i < FB_MAX; i++) { |
3534 | int pending; | ||
3535 | |||
3534 | mapped = 0; | 3536 | mapped = 0; |
3535 | info = registered_fb[i]; | 3537 | info = registered_fb[i]; |
3536 | 3538 | ||
3537 | if (info == NULL) | 3539 | if (info == NULL) |
3538 | continue; | 3540 | continue; |
3539 | 3541 | ||
3542 | pending = cancel_work_sync(&info->queue); | ||
3543 | DPRINTK("fbcon: %s pending work\n", (pending ? "canceled" : | ||
3544 | "no")); | ||
3545 | |||
3540 | for (j = first_fb_vc; j <= last_fb_vc; j++) { | 3546 | for (j = first_fb_vc; j <= last_fb_vc; j++) { |
3541 | if (con2fb_map[j] == i) | 3547 | if (con2fb_map[j] == i) |
3542 | mapped = 1; | 3548 | mapped = 1; |
diff --git a/drivers/video/mb862xx/mb862xxfb.c b/drivers/video/mb862xx/mb862xxfb.c index 38718d95fbb9..fb64234a3825 100644 --- a/drivers/video/mb862xx/mb862xxfb.c +++ b/drivers/video/mb862xx/mb862xxfb.c | |||
@@ -927,9 +927,9 @@ static int __devinit mb862xx_pci_probe(struct pci_dev *pdev, | |||
927 | } | 927 | } |
928 | 928 | ||
929 | dev_dbg(dev, "fb phys 0x%llx 0x%lx\n", | 929 | dev_dbg(dev, "fb phys 0x%llx 0x%lx\n", |
930 | (u64)par->fb_base_phys, (ulong)par->mapped_vram); | 930 | (unsigned long long)par->fb_base_phys, (ulong)par->mapped_vram); |
931 | dev_dbg(dev, "mmio phys 0x%llx 0x%lx\n", | 931 | dev_dbg(dev, "mmio phys 0x%llx 0x%lx\n", |
932 | (u64)par->mmio_base_phys, (ulong)par->mmio_len); | 932 | (unsigned long long)par->mmio_base_phys, (ulong)par->mmio_len); |
933 | 933 | ||
934 | if (mb862xx_pci_gdc_init(par)) | 934 | if (mb862xx_pci_gdc_init(par)) |
935 | goto io_unmap; | 935 | goto io_unmap; |
diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c index d2003cdc36aa..db35cfdb3c8b 100644 --- a/fs/ext4/balloc.c +++ b/fs/ext4/balloc.c | |||
@@ -609,8 +609,8 @@ int ext4_has_free_blocks(struct ext4_sb_info *sbi, s64 nblocks) | |||
609 | 609 | ||
610 | if (free_blocks - (nblocks + root_blocks + dirty_blocks) < | 610 | if (free_blocks - (nblocks + root_blocks + dirty_blocks) < |
611 | EXT4_FREEBLOCKS_WATERMARK) { | 611 | EXT4_FREEBLOCKS_WATERMARK) { |
612 | free_blocks = percpu_counter_sum(fbc); | 612 | free_blocks = percpu_counter_sum_positive(fbc); |
613 | dirty_blocks = percpu_counter_sum(dbc); | 613 | dirty_blocks = percpu_counter_sum_positive(dbc); |
614 | if (dirty_blocks < 0) { | 614 | if (dirty_blocks < 0) { |
615 | printk(KERN_CRIT "Dirty block accounting " | 615 | printk(KERN_CRIT "Dirty block accounting " |
616 | "went wrong %lld\n", | 616 | "went wrong %lld\n", |
diff --git a/fs/inotify.c b/fs/inotify.c index 7bbed1b89825..dae3f28f30d4 100644 --- a/fs/inotify.c +++ b/fs/inotify.c | |||
@@ -428,11 +428,13 @@ void inotify_unmount_inodes(struct list_head *list) | |||
428 | watches = &inode->inotify_watches; | 428 | watches = &inode->inotify_watches; |
429 | list_for_each_entry_safe(watch, next_w, watches, i_list) { | 429 | list_for_each_entry_safe(watch, next_w, watches, i_list) { |
430 | struct inotify_handle *ih= watch->ih; | 430 | struct inotify_handle *ih= watch->ih; |
431 | get_inotify_watch(watch); | ||
431 | mutex_lock(&ih->mutex); | 432 | mutex_lock(&ih->mutex); |
432 | ih->in_ops->handle_event(watch, watch->wd, IN_UNMOUNT, 0, | 433 | ih->in_ops->handle_event(watch, watch->wd, IN_UNMOUNT, 0, |
433 | NULL, NULL); | 434 | NULL, NULL); |
434 | inotify_remove_watch_locked(ih, watch); | 435 | inotify_remove_watch_locked(ih, watch); |
435 | mutex_unlock(&ih->mutex); | 436 | mutex_unlock(&ih->mutex); |
437 | put_inotify_watch(watch); | ||
436 | } | 438 | } |
437 | mutex_unlock(&inode->inotify_mutex); | 439 | mutex_unlock(&inode->inotify_mutex); |
438 | iput(inode); | 440 | iput(inode); |
diff --git a/fs/proc/base.c b/fs/proc/base.c index 486cf3fe7139..d4677603c889 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c | |||
@@ -371,7 +371,7 @@ static int lstats_show_proc(struct seq_file *m, void *v) | |||
371 | task->latency_record[i].time, | 371 | task->latency_record[i].time, |
372 | task->latency_record[i].max); | 372 | task->latency_record[i].max); |
373 | for (q = 0; q < LT_BACKTRACEDEPTH; q++) { | 373 | for (q = 0; q < LT_BACKTRACEDEPTH; q++) { |
374 | char sym[KSYM_NAME_LEN]; | 374 | char sym[KSYM_SYMBOL_LEN]; |
375 | char *c; | 375 | char *c; |
376 | if (!task->latency_record[i].backtrace[q]) | 376 | if (!task->latency_record[i].backtrace[q]) |
377 | break; | 377 | break; |
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index b770c095e45c..3a8bdd7f5756 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c | |||
@@ -557,9 +557,9 @@ static u64 swap_pte_to_pagemap_entry(pte_t pte) | |||
557 | return swp_type(e) | (swp_offset(e) << MAX_SWAPFILES_SHIFT); | 557 | return swp_type(e) | (swp_offset(e) << MAX_SWAPFILES_SHIFT); |
558 | } | 558 | } |
559 | 559 | ||
560 | static unsigned long pte_to_pagemap_entry(pte_t pte) | 560 | static u64 pte_to_pagemap_entry(pte_t pte) |
561 | { | 561 | { |
562 | unsigned long pme = 0; | 562 | u64 pme = 0; |
563 | if (is_swap_pte(pte)) | 563 | if (is_swap_pte(pte)) |
564 | pme = PM_PFRAME(swap_pte_to_pagemap_entry(pte)) | 564 | pme = PM_PFRAME(swap_pte_to_pagemap_entry(pte)) |
565 | | PM_PSHIFT(PAGE_SHIFT) | PM_SWAP; | 565 | | PM_PSHIFT(PAGE_SHIFT) | PM_SWAP; |
diff --git a/include/asm-generic/atomic.h b/include/asm-generic/atomic.h index 4ec0a296bdec..7abdaa91ccd3 100644 --- a/include/asm-generic/atomic.h +++ b/include/asm-generic/atomic.h | |||
@@ -251,7 +251,7 @@ static inline long atomic_long_add_unless(atomic_long_t *l, long a, long u) | |||
251 | #define atomic_long_cmpxchg(l, old, new) \ | 251 | #define atomic_long_cmpxchg(l, old, new) \ |
252 | (atomic_cmpxchg((atomic_t *)(l), (old), (new))) | 252 | (atomic_cmpxchg((atomic_t *)(l), (old), (new))) |
253 | #define atomic_long_xchg(v, new) \ | 253 | #define atomic_long_xchg(v, new) \ |
254 | (atomic_xchg((atomic_t *)(l), (new))) | 254 | (atomic_xchg((atomic_t *)(v), (new))) |
255 | 255 | ||
256 | #endif /* BITS_PER_LONG == 64 */ | 256 | #endif /* BITS_PER_LONG == 64 */ |
257 | 257 | ||
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h index 703eb53cfa2b..9c5bc6be2b09 100644 --- a/include/linux/ftrace.h +++ b/include/linux/ftrace.h | |||
@@ -6,6 +6,7 @@ | |||
6 | #include <linux/ktime.h> | 6 | #include <linux/ktime.h> |
7 | #include <linux/init.h> | 7 | #include <linux/init.h> |
8 | #include <linux/types.h> | 8 | #include <linux/types.h> |
9 | #include <linux/module.h> | ||
9 | #include <linux/kallsyms.h> | 10 | #include <linux/kallsyms.h> |
10 | 11 | ||
11 | #ifdef CONFIG_FUNCTION_TRACER | 12 | #ifdef CONFIG_FUNCTION_TRACER |
@@ -231,7 +232,7 @@ ftrace_init_module(unsigned long *start, unsigned long *end) { } | |||
231 | 232 | ||
232 | struct boot_trace { | 233 | struct boot_trace { |
233 | pid_t caller; | 234 | pid_t caller; |
234 | char func[KSYM_NAME_LEN]; | 235 | char func[KSYM_SYMBOL_LEN]; |
235 | int result; | 236 | int result; |
236 | unsigned long long duration; /* usecs */ | 237 | unsigned long long duration; /* usecs */ |
237 | ktime_t calltime; | 238 | ktime_t calltime; |
diff --git a/kernel/latencytop.c b/kernel/latencytop.c index 5e7b45c56923..449db466bdbc 100644 --- a/kernel/latencytop.c +++ b/kernel/latencytop.c | |||
@@ -191,7 +191,7 @@ static int lstats_show(struct seq_file *m, void *v) | |||
191 | latency_record[i].time, | 191 | latency_record[i].time, |
192 | latency_record[i].max); | 192 | latency_record[i].max); |
193 | for (q = 0; q < LT_BACKTRACEDEPTH; q++) { | 193 | for (q = 0; q < LT_BACKTRACEDEPTH; q++) { |
194 | char sym[KSYM_NAME_LEN]; | 194 | char sym[KSYM_SYMBOL_LEN]; |
195 | char *c; | 195 | char *c; |
196 | if (!latency_record[i].backtrace[q]) | 196 | if (!latency_record[i].backtrace[q]) |
197 | break; | 197 | break; |
diff --git a/kernel/relay.c b/kernel/relay.c index 32b0befdcb6a..09ac2008f77b 100644 --- a/kernel/relay.c +++ b/kernel/relay.c | |||
@@ -1317,12 +1317,9 @@ static ssize_t relay_file_splice_read(struct file *in, | |||
1317 | if (ret < 0) | 1317 | if (ret < 0) |
1318 | break; | 1318 | break; |
1319 | else if (!ret) { | 1319 | else if (!ret) { |
1320 | if (spliced) | 1320 | if (flags & SPLICE_F_NONBLOCK) |
1321 | break; | ||
1322 | if (flags & SPLICE_F_NONBLOCK) { | ||
1323 | ret = -EAGAIN; | 1321 | ret = -EAGAIN; |
1324 | break; | 1322 | break; |
1325 | } | ||
1326 | } | 1323 | } |
1327 | 1324 | ||
1328 | *ppos += ret; | 1325 | *ppos += ret; |
diff --git a/lib/percpu_counter.c b/lib/percpu_counter.c index a8663890a88c..b255b939bc1b 100644 --- a/lib/percpu_counter.c +++ b/lib/percpu_counter.c | |||
@@ -62,10 +62,7 @@ s64 __percpu_counter_sum(struct percpu_counter *fbc) | |||
62 | for_each_online_cpu(cpu) { | 62 | for_each_online_cpu(cpu) { |
63 | s32 *pcount = per_cpu_ptr(fbc->counters, cpu); | 63 | s32 *pcount = per_cpu_ptr(fbc->counters, cpu); |
64 | ret += *pcount; | 64 | ret += *pcount; |
65 | *pcount = 0; | ||
66 | } | 65 | } |
67 | fbc->count = ret; | ||
68 | |||
69 | spin_unlock(&fbc->lock); | 66 | spin_unlock(&fbc->lock); |
70 | return ret; | 67 | return ret; |
71 | } | 68 | } |
@@ -104,13 +101,13 @@ void percpu_counter_destroy(struct percpu_counter *fbc) | |||
104 | if (!fbc->counters) | 101 | if (!fbc->counters) |
105 | return; | 102 | return; |
106 | 103 | ||
107 | free_percpu(fbc->counters); | ||
108 | fbc->counters = NULL; | ||
109 | #ifdef CONFIG_HOTPLUG_CPU | 104 | #ifdef CONFIG_HOTPLUG_CPU |
110 | mutex_lock(&percpu_counters_lock); | 105 | mutex_lock(&percpu_counters_lock); |
111 | list_del(&fbc->list); | 106 | list_del(&fbc->list); |
112 | mutex_unlock(&percpu_counters_lock); | 107 | mutex_unlock(&percpu_counters_lock); |
113 | #endif | 108 | #endif |
109 | free_percpu(fbc->counters); | ||
110 | fbc->counters = NULL; | ||
114 | } | 111 | } |
115 | EXPORT_SYMBOL(percpu_counter_destroy); | 112 | EXPORT_SYMBOL(percpu_counter_destroy); |
116 | 113 | ||
diff --git a/mm/backing-dev.c b/mm/backing-dev.c index 2a56124dbc28..801c08b046e6 100644 --- a/mm/backing-dev.c +++ b/mm/backing-dev.c | |||
@@ -176,7 +176,7 @@ int bdi_register(struct backing_dev_info *bdi, struct device *parent, | |||
176 | int ret = 0; | 176 | int ret = 0; |
177 | struct device *dev; | 177 | struct device *dev; |
178 | 178 | ||
179 | if (WARN_ON(bdi->dev)) | 179 | if (bdi->dev) /* The driver needs to use separate queues per device */ |
180 | goto exit; | 180 | goto exit; |
181 | 181 | ||
182 | va_start(args, fmt); | 182 | va_start(args, fmt); |
diff --git a/mm/migrate.c b/mm/migrate.c index 1e0d6b237f44..d8f07667fc80 100644 --- a/mm/migrate.c +++ b/mm/migrate.c | |||
@@ -987,25 +987,18 @@ out: | |||
987 | /* | 987 | /* |
988 | * Determine the nodes of an array of pages and store it in an array of status. | 988 | * Determine the nodes of an array of pages and store it in an array of status. |
989 | */ | 989 | */ |
990 | static int do_pages_stat(struct mm_struct *mm, unsigned long nr_pages, | 990 | static void do_pages_stat_array(struct mm_struct *mm, unsigned long nr_pages, |
991 | const void __user * __user *pages, | 991 | const void __user **pages, int *status) |
992 | int __user *status) | ||
993 | { | 992 | { |
994 | unsigned long i; | 993 | unsigned long i; |
995 | int err; | ||
996 | 994 | ||
997 | down_read(&mm->mmap_sem); | 995 | down_read(&mm->mmap_sem); |
998 | 996 | ||
999 | for (i = 0; i < nr_pages; i++) { | 997 | for (i = 0; i < nr_pages; i++) { |
1000 | const void __user *p; | 998 | unsigned long addr = (unsigned long)(*pages); |
1001 | unsigned long addr; | ||
1002 | struct vm_area_struct *vma; | 999 | struct vm_area_struct *vma; |
1003 | struct page *page; | 1000 | struct page *page; |
1004 | 1001 | int err; | |
1005 | err = -EFAULT; | ||
1006 | if (get_user(p, pages+i)) | ||
1007 | goto out; | ||
1008 | addr = (unsigned long) p; | ||
1009 | 1002 | ||
1010 | vma = find_vma(mm, addr); | 1003 | vma = find_vma(mm, addr); |
1011 | if (!vma) | 1004 | if (!vma) |
@@ -1024,12 +1017,52 @@ static int do_pages_stat(struct mm_struct *mm, unsigned long nr_pages, | |||
1024 | 1017 | ||
1025 | err = page_to_nid(page); | 1018 | err = page_to_nid(page); |
1026 | set_status: | 1019 | set_status: |
1027 | put_user(err, status+i); | 1020 | *status = err; |
1021 | |||
1022 | pages++; | ||
1023 | status++; | ||
1024 | } | ||
1025 | |||
1026 | up_read(&mm->mmap_sem); | ||
1027 | } | ||
1028 | |||
1029 | /* | ||
1030 | * Determine the nodes of a user array of pages and store it in | ||
1031 | * a user array of status. | ||
1032 | */ | ||
1033 | static int do_pages_stat(struct mm_struct *mm, unsigned long nr_pages, | ||
1034 | const void __user * __user *pages, | ||
1035 | int __user *status) | ||
1036 | { | ||
1037 | #define DO_PAGES_STAT_CHUNK_NR 16 | ||
1038 | const void __user *chunk_pages[DO_PAGES_STAT_CHUNK_NR]; | ||
1039 | int chunk_status[DO_PAGES_STAT_CHUNK_NR]; | ||
1040 | unsigned long i, chunk_nr = DO_PAGES_STAT_CHUNK_NR; | ||
1041 | int err; | ||
1042 | |||
1043 | for (i = 0; i < nr_pages; i += chunk_nr) { | ||
1044 | if (chunk_nr + i > nr_pages) | ||
1045 | chunk_nr = nr_pages - i; | ||
1046 | |||
1047 | err = copy_from_user(chunk_pages, &pages[i], | ||
1048 | chunk_nr * sizeof(*chunk_pages)); | ||
1049 | if (err) { | ||
1050 | err = -EFAULT; | ||
1051 | goto out; | ||
1052 | } | ||
1053 | |||
1054 | do_pages_stat_array(mm, chunk_nr, chunk_pages, chunk_status); | ||
1055 | |||
1056 | err = copy_to_user(&status[i], chunk_status, | ||
1057 | chunk_nr * sizeof(*chunk_status)); | ||
1058 | if (err) { | ||
1059 | err = -EFAULT; | ||
1060 | goto out; | ||
1061 | } | ||
1028 | } | 1062 | } |
1029 | err = 0; | 1063 | err = 0; |
1030 | 1064 | ||
1031 | out: | 1065 | out: |
1032 | up_read(&mm->mmap_sem); | ||
1033 | return err; | 1066 | return err; |
1034 | } | 1067 | } |
1035 | 1068 | ||
diff --git a/mm/page_cgroup.c b/mm/page_cgroup.c index 0b3cbf090a67..ab27ff750519 100644 --- a/mm/page_cgroup.c +++ b/mm/page_cgroup.c | |||
@@ -49,6 +49,9 @@ static int __init alloc_node_page_cgroup(int nid) | |||
49 | start_pfn = NODE_DATA(nid)->node_start_pfn; | 49 | start_pfn = NODE_DATA(nid)->node_start_pfn; |
50 | nr_pages = NODE_DATA(nid)->node_spanned_pages; | 50 | nr_pages = NODE_DATA(nid)->node_spanned_pages; |
51 | 51 | ||
52 | if (!nr_pages) | ||
53 | return 0; | ||
54 | |||
52 | table_size = sizeof(struct page_cgroup) * nr_pages; | 55 | table_size = sizeof(struct page_cgroup) * nr_pages; |
53 | 56 | ||
54 | base = __alloc_bootmem_node_nopanic(NODE_DATA(nid), | 57 | base = __alloc_bootmem_node_nopanic(NODE_DATA(nid), |
@@ -3597,7 +3597,7 @@ static int list_locations(struct kmem_cache *s, char *buf, | |||
3597 | for (i = 0; i < t.count; i++) { | 3597 | for (i = 0; i < t.count; i++) { |
3598 | struct location *l = &t.loc[i]; | 3598 | struct location *l = &t.loc[i]; |
3599 | 3599 | ||
3600 | if (len > PAGE_SIZE - 100) | 3600 | if (len > PAGE_SIZE - KSYM_SYMBOL_LEN - 100) |
3601 | break; | 3601 | break; |
3602 | len += sprintf(buf + len, "%7ld ", l->count); | 3602 | len += sprintf(buf + len, "%7ld ", l->count); |
3603 | 3603 | ||
@@ -299,7 +299,6 @@ void lru_add_drain(void) | |||
299 | put_cpu(); | 299 | put_cpu(); |
300 | } | 300 | } |
301 | 301 | ||
302 | #if defined(CONFIG_NUMA) || defined(CONFIG_UNEVICTABLE_LRU) | ||
303 | static void lru_add_drain_per_cpu(struct work_struct *dummy) | 302 | static void lru_add_drain_per_cpu(struct work_struct *dummy) |
304 | { | 303 | { |
305 | lru_add_drain(); | 304 | lru_add_drain(); |
@@ -313,18 +312,6 @@ int lru_add_drain_all(void) | |||
313 | return schedule_on_each_cpu(lru_add_drain_per_cpu); | 312 | return schedule_on_each_cpu(lru_add_drain_per_cpu); |
314 | } | 313 | } |
315 | 314 | ||
316 | #else | ||
317 | |||
318 | /* | ||
319 | * Returns 0 for success | ||
320 | */ | ||
321 | int lru_add_drain_all(void) | ||
322 | { | ||
323 | lru_add_drain(); | ||
324 | return 0; | ||
325 | } | ||
326 | #endif | ||
327 | |||
328 | /* | 315 | /* |
329 | * Batched page_cache_release(). Decrement the reference count on all the | 316 | * Batched page_cache_release(). Decrement the reference count on all the |
330 | * passed pages. If it fell to zero then remove the page from the LRU and | 317 | * passed pages. If it fell to zero then remove the page from the LRU and |
diff --git a/mm/vmalloc.c b/mm/vmalloc.c index f3f6e0758562..1ddb77ba3995 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c | |||
@@ -1717,7 +1717,7 @@ static int s_show(struct seq_file *m, void *p) | |||
1717 | v->addr, v->addr + v->size, v->size); | 1717 | v->addr, v->addr + v->size, v->size); |
1718 | 1718 | ||
1719 | if (v->caller) { | 1719 | if (v->caller) { |
1720 | char buff[2 * KSYM_NAME_LEN]; | 1720 | char buff[KSYM_SYMBOL_LEN]; |
1721 | 1721 | ||
1722 | seq_putc(m, ' '); | 1722 | seq_putc(m, ' '); |
1723 | sprint_symbol(buff, (unsigned long)v->caller); | 1723 | sprint_symbol(buff, (unsigned long)v->caller); |