diff options
| author | Jeff Garzik <jeff@garzik.org> | 2007-01-30 09:14:40 -0500 |
|---|---|---|
| committer | Jeff Garzik <jeff@garzik.org> | 2007-01-30 09:14:40 -0500 |
| commit | 64c9d27d6a692d2c27df14ef44cb400b4aa412b3 (patch) | |
| tree | eac635d0a418f9a337048e66b3346cb2e08b5d85 | |
| parent | 03ee5b1cdd09ed1ee2e75d0bc647fc5db66b9d07 (diff) | |
| parent | c0d4d573feed199b16094c072e7cb07afb01c598 (diff) | |
Merge branch 'master' into upstream-fixes
| -rw-r--r-- | arch/powerpc/Kconfig | 5 | ||||
| -rw-r--r-- | arch/powerpc/kernel/pci_64.c | 2 | ||||
| -rw-r--r-- | arch/powerpc/platforms/ps3/Makefile | 3 | ||||
| -rw-r--r-- | arch/powerpc/platforms/ps3/interrupt.c | 2 | ||||
| -rw-r--r-- | block/scsi_ioctl.c | 5 | ||||
| -rw-r--r-- | drivers/net/sky2.c | 25 | ||||
| -rw-r--r-- | fs/buffer.c | 6 | ||||
| -rw-r--r-- | mm/page-writeback.c | 41 |
8 files changed, 34 insertions, 55 deletions
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index b268c417c0bf..d6abe495c6b0 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
| @@ -526,12 +526,15 @@ config PPC_IBM_CELL_BLADE | |||
| 526 | select UDBG_RTAS_CONSOLE | 526 | select UDBG_RTAS_CONSOLE |
| 527 | 527 | ||
| 528 | config PPC_PS3 | 528 | config PPC_PS3 |
| 529 | bool "Sony PS3" | 529 | bool "Sony PS3 (incomplete)" |
| 530 | depends on PPC_MULTIPLATFORM && PPC64 | 530 | depends on PPC_MULTIPLATFORM && PPC64 |
| 531 | select PPC_CELL | 531 | select PPC_CELL |
| 532 | help | 532 | help |
| 533 | This option enables support for the Sony PS3 game console | 533 | This option enables support for the Sony PS3 game console |
| 534 | and other platforms using the PS3 hypervisor. | 534 | and other platforms using the PS3 hypervisor. |
| 535 | Support for this platform is not yet complete, so | ||
| 536 | enabling this will not result in a bootable kernel on a | ||
| 537 | PS3 system. | ||
| 535 | 538 | ||
| 536 | config PPC_NATIVE | 539 | config PPC_NATIVE |
| 537 | bool | 540 | bool |
diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c index 73c59ec49120..01f18c683407 100644 --- a/arch/powerpc/kernel/pci_64.c +++ b/arch/powerpc/kernel/pci_64.c | |||
| @@ -1430,7 +1430,7 @@ long sys_pciconfig_iobase(long which, unsigned long in_bus, | |||
| 1430 | 1430 | ||
| 1431 | for (ln = pci_root_buses.next; ln != &pci_root_buses; ln = ln->next) { | 1431 | for (ln = pci_root_buses.next; ln != &pci_root_buses; ln = ln->next) { |
| 1432 | bus = pci_bus_b(ln); | 1432 | bus = pci_bus_b(ln); |
| 1433 | if (in_bus >= bus->number && in_bus < (bus->number + bus->subordinate)) | 1433 | if (in_bus >= bus->number && in_bus <= bus->subordinate) |
| 1434 | break; | 1434 | break; |
| 1435 | bus = NULL; | 1435 | bus = NULL; |
| 1436 | } | 1436 | } |
diff --git a/arch/powerpc/platforms/ps3/Makefile b/arch/powerpc/platforms/ps3/Makefile index 3757cfabc8ce..1994904f580f 100644 --- a/arch/powerpc/platforms/ps3/Makefile +++ b/arch/powerpc/platforms/ps3/Makefile | |||
| @@ -1,4 +1,5 @@ | |||
| 1 | obj-y += setup.o mm.o smp.o time.o hvcall.o htab.o repository.o | 1 | obj-y += setup.o mm.o time.o hvcall.o htab.o repository.o |
| 2 | obj-y += interrupt.o exports.o os-area.o | 2 | obj-y += interrupt.o exports.o os-area.o |
| 3 | 3 | ||
| 4 | obj-$(CONFIG_SMP) += smp.o | ||
| 4 | obj-$(CONFIG_SPU_BASE) += spu.o | 5 | obj-$(CONFIG_SPU_BASE) += spu.o |
diff --git a/arch/powerpc/platforms/ps3/interrupt.c b/arch/powerpc/platforms/ps3/interrupt.c index 056c1e4141ba..6f5de438b980 100644 --- a/arch/powerpc/platforms/ps3/interrupt.c +++ b/arch/powerpc/platforms/ps3/interrupt.c | |||
| @@ -71,7 +71,7 @@ int ps3_free_io_irq(unsigned int virq) | |||
| 71 | 71 | ||
| 72 | result = lv1_destruct_io_irq_outlet(virq_to_hw(virq)); | 72 | result = lv1_destruct_io_irq_outlet(virq_to_hw(virq)); |
| 73 | 73 | ||
| 74 | if (!result) | 74 | if (result) |
| 75 | pr_debug("%s:%d: lv1_destruct_io_irq_outlet failed: %s\n", | 75 | pr_debug("%s:%d: lv1_destruct_io_irq_outlet failed: %s\n", |
| 76 | __func__, __LINE__, ps3_result(result)); | 76 | __func__, __LINE__, ps3_result(result)); |
| 77 | 77 | ||
diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c index 2528a0c0dec8..65c6a3cba6d6 100644 --- a/block/scsi_ioctl.c +++ b/block/scsi_ioctl.c | |||
| @@ -223,7 +223,7 @@ static int verify_command(struct file *file, unsigned char *cmd) | |||
| 223 | static int sg_io(struct file *file, request_queue_t *q, | 223 | static int sg_io(struct file *file, request_queue_t *q, |
| 224 | struct gendisk *bd_disk, struct sg_io_hdr *hdr) | 224 | struct gendisk *bd_disk, struct sg_io_hdr *hdr) |
| 225 | { | 225 | { |
| 226 | unsigned long start_time; | 226 | unsigned long start_time, timeout; |
| 227 | int writing = 0, ret = 0; | 227 | int writing = 0, ret = 0; |
| 228 | struct request *rq; | 228 | struct request *rq; |
| 229 | char sense[SCSI_SENSE_BUFFERSIZE]; | 229 | char sense[SCSI_SENSE_BUFFERSIZE]; |
| @@ -271,7 +271,8 @@ static int sg_io(struct file *file, request_queue_t *q, | |||
| 271 | 271 | ||
| 272 | rq->cmd_type = REQ_TYPE_BLOCK_PC; | 272 | rq->cmd_type = REQ_TYPE_BLOCK_PC; |
| 273 | 273 | ||
| 274 | rq->timeout = jiffies_to_msecs(hdr->timeout); | 274 | timeout = msecs_to_jiffies(hdr->timeout); |
| 275 | rq->timeout = (timeout < INT_MAX) ? timeout : INT_MAX; | ||
| 275 | if (!rq->timeout) | 276 | if (!rq->timeout) |
| 276 | rq->timeout = q->sg_timeout; | 277 | rq->timeout = q->sg_timeout; |
| 277 | if (!rq->timeout) | 278 | if (!rq->timeout) |
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index a2e804ddca6c..822dd0b13133 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c | |||
| @@ -3639,29 +3639,6 @@ static int sky2_resume(struct pci_dev *pdev) | |||
| 3639 | out: | 3639 | out: |
| 3640 | return err; | 3640 | return err; |
| 3641 | } | 3641 | } |
| 3642 | |||
| 3643 | /* BIOS resume runs after device (it's a bug in PM) | ||
| 3644 | * as a temporary workaround on suspend/resume leave MSI disabled | ||
| 3645 | */ | ||
| 3646 | static int sky2_suspend_late(struct pci_dev *pdev, pm_message_t state) | ||
| 3647 | { | ||
| 3648 | struct sky2_hw *hw = pci_get_drvdata(pdev); | ||
| 3649 | |||
| 3650 | free_irq(pdev->irq, hw); | ||
| 3651 | if (hw->msi) { | ||
| 3652 | pci_disable_msi(pdev); | ||
| 3653 | hw->msi = 0; | ||
| 3654 | } | ||
| 3655 | return 0; | ||
| 3656 | } | ||
| 3657 | |||
| 3658 | static int sky2_resume_early(struct pci_dev *pdev) | ||
| 3659 | { | ||
| 3660 | struct sky2_hw *hw = pci_get_drvdata(pdev); | ||
| 3661 | struct net_device *dev = hw->dev[0]; | ||
| 3662 | |||
| 3663 | return request_irq(pdev->irq, sky2_intr, IRQF_SHARED, dev->name, hw); | ||
| 3664 | } | ||
| 3665 | #endif | 3642 | #endif |
| 3666 | 3643 | ||
| 3667 | static struct pci_driver sky2_driver = { | 3644 | static struct pci_driver sky2_driver = { |
| @@ -3672,8 +3649,6 @@ static struct pci_driver sky2_driver = { | |||
| 3672 | #ifdef CONFIG_PM | 3649 | #ifdef CONFIG_PM |
| 3673 | .suspend = sky2_suspend, | 3650 | .suspend = sky2_suspend, |
| 3674 | .resume = sky2_resume, | 3651 | .resume = sky2_resume, |
| 3675 | .suspend_late = sky2_suspend_late, | ||
| 3676 | .resume_early = sky2_resume_early, | ||
| 3677 | #endif | 3652 | #endif |
| 3678 | }; | 3653 | }; |
| 3679 | 3654 | ||
diff --git a/fs/buffer.c b/fs/buffer.c index 460f1c43238e..1ad674fd348c 100644 --- a/fs/buffer.c +++ b/fs/buffer.c | |||
| @@ -2844,7 +2844,6 @@ int try_to_free_buffers(struct page *page) | |||
| 2844 | 2844 | ||
| 2845 | spin_lock(&mapping->private_lock); | 2845 | spin_lock(&mapping->private_lock); |
| 2846 | ret = drop_buffers(page, &buffers_to_free); | 2846 | ret = drop_buffers(page, &buffers_to_free); |
| 2847 | spin_unlock(&mapping->private_lock); | ||
| 2848 | 2847 | ||
| 2849 | /* | 2848 | /* |
| 2850 | * If the filesystem writes its buffers by hand (eg ext3) | 2849 | * If the filesystem writes its buffers by hand (eg ext3) |
| @@ -2855,9 +2854,14 @@ int try_to_free_buffers(struct page *page) | |||
| 2855 | * Also, during truncate, discard_buffer will have marked all | 2854 | * Also, during truncate, discard_buffer will have marked all |
| 2856 | * the page's buffers clean. We discover that here and clean | 2855 | * the page's buffers clean. We discover that here and clean |
| 2857 | * the page also. | 2856 | * the page also. |
| 2857 | * | ||
| 2858 | * private_lock must be held over this entire operation in order | ||
| 2859 | * to synchronise against __set_page_dirty_buffers and prevent the | ||
| 2860 | * dirty bit from being lost. | ||
| 2858 | */ | 2861 | */ |
| 2859 | if (ret) | 2862 | if (ret) |
| 2860 | cancel_dirty_page(page, PAGE_CACHE_SIZE); | 2863 | cancel_dirty_page(page, PAGE_CACHE_SIZE); |
| 2864 | spin_unlock(&mapping->private_lock); | ||
| 2861 | out: | 2865 | out: |
| 2862 | if (buffers_to_free) { | 2866 | if (buffers_to_free) { |
| 2863 | struct buffer_head *bh = buffers_to_free; | 2867 | struct buffer_head *bh = buffers_to_free; |
diff --git a/mm/page-writeback.c b/mm/page-writeback.c index 1d2fc89ca56d..be0efbde4994 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c | |||
| @@ -133,11 +133,9 @@ get_dirty_limits(long *pbackground, long *pdirty, | |||
| 133 | 133 | ||
| 134 | #ifdef CONFIG_HIGHMEM | 134 | #ifdef CONFIG_HIGHMEM |
| 135 | /* | 135 | /* |
| 136 | * If this mapping can only allocate from low memory, | 136 | * We always exclude high memory from our count. |
| 137 | * we exclude high memory from our count. | ||
| 138 | */ | 137 | */ |
| 139 | if (mapping && !(mapping_gfp_mask(mapping) & __GFP_HIGHMEM)) | 138 | available_memory -= totalhigh_pages; |
| 140 | available_memory -= totalhigh_pages; | ||
| 141 | #endif | 139 | #endif |
| 142 | 140 | ||
| 143 | 141 | ||
| @@ -526,28 +524,25 @@ static struct notifier_block __cpuinitdata ratelimit_nb = { | |||
| 526 | }; | 524 | }; |
| 527 | 525 | ||
| 528 | /* | 526 | /* |
| 529 | * If the machine has a large highmem:lowmem ratio then scale back the default | 527 | * Called early on to tune the page writeback dirty limits. |
| 530 | * dirty memory thresholds: allowing too much dirty highmem pins an excessive | 528 | * |
| 531 | * number of buffer_heads. | 529 | * We used to scale dirty pages according to how total memory |
| 530 | * related to pages that could be allocated for buffers (by | ||
| 531 | * comparing nr_free_buffer_pages() to vm_total_pages. | ||
| 532 | * | ||
| 533 | * However, that was when we used "dirty_ratio" to scale with | ||
| 534 | * all memory, and we don't do that any more. "dirty_ratio" | ||
| 535 | * is now applied to total non-HIGHPAGE memory (by subtracting | ||
| 536 | * totalhigh_pages from vm_total_pages), and as such we can't | ||
| 537 | * get into the old insane situation any more where we had | ||
| 538 | * large amounts of dirty pages compared to a small amount of | ||
| 539 | * non-HIGHMEM memory. | ||
| 540 | * | ||
| 541 | * But we might still want to scale the dirty_ratio by how | ||
| 542 | * much memory the box has.. | ||
| 532 | */ | 543 | */ |
| 533 | void __init page_writeback_init(void) | 544 | void __init page_writeback_init(void) |
| 534 | { | 545 | { |
| 535 | long buffer_pages = nr_free_buffer_pages(); | ||
| 536 | long correction; | ||
| 537 | |||
| 538 | correction = (100 * 4 * buffer_pages) / vm_total_pages; | ||
| 539 | |||
| 540 | if (correction < 100) { | ||
| 541 | dirty_background_ratio *= correction; | ||
| 542 | dirty_background_ratio /= 100; | ||
| 543 | vm_dirty_ratio *= correction; | ||
| 544 | vm_dirty_ratio /= 100; | ||
| 545 | |||
| 546 | if (dirty_background_ratio <= 0) | ||
| 547 | dirty_background_ratio = 1; | ||
| 548 | if (vm_dirty_ratio <= 0) | ||
| 549 | vm_dirty_ratio = 1; | ||
| 550 | } | ||
| 551 | mod_timer(&wb_timer, jiffies + dirty_writeback_interval); | 546 | mod_timer(&wb_timer, jiffies + dirty_writeback_interval); |
| 552 | writeback_set_ratelimit(); | 547 | writeback_set_ratelimit(); |
| 553 | register_cpu_notifier(&ratelimit_nb); | 548 | register_cpu_notifier(&ratelimit_nb); |
