diff options
| author | Anton Altaparmakov <aia21@cantab.net> | 2005-10-19 07:13:58 -0400 |
|---|---|---|
| committer | Anton Altaparmakov <aia21@cantab.net> | 2005-10-19 07:13:58 -0400 |
| commit | e087a412b45543a87497f0a213dbd5d55099f267 (patch) | |
| tree | 8892cc84dbee2b4387c9f2604a7892b6ef3aab25 | |
| parent | 7946ada30bc45546cefc85809ba0fd07879eff52 (diff) | |
| parent | bb7e257ef8d8ba43cab356aa1cc1b20d0106d45f (diff) | |
Merge branch 'master' of /usr/src/ntfs-2.6/
36 files changed, 202 insertions, 93 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000000..5014bfa48ac1 --- /dev/null +++ b/.gitignore | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | # | ||
| 2 | # NOTE! Don't add files that are generated in specific | ||
| 3 | # subdirectories here. Add them in the ".gitignore" file | ||
| 4 | # in that subdirectory instead. | ||
| 5 | # | ||
| 6 | # Normal rules | ||
| 7 | # | ||
| 8 | .* | ||
| 9 | *.o | ||
| 10 | *.a | ||
| 11 | *.s | ||
| 12 | *.ko | ||
| 13 | *.mod.c | ||
| 14 | |||
| 15 | # | ||
| 16 | # Top-level generic files | ||
| 17 | # | ||
| 18 | vmlinux* | ||
| 19 | System.map | ||
| 20 | Module.symvers | ||
| 21 | |||
| 22 | # | ||
| 23 | # Generated include files | ||
| 24 | # | ||
| 25 | include/asm | ||
| 26 | include/config | ||
| 27 | include/linux/autoconf.h | ||
| 28 | include/linux/compile.h | ||
| 29 | include/linux/version.h | ||
| 30 | |||
| @@ -660,8 +660,10 @@ quiet_cmd_sysmap = SYSMAP | |||
| 660 | # Link of vmlinux | 660 | # Link of vmlinux |
| 661 | # If CONFIG_KALLSYMS is set .version is already updated | 661 | # If CONFIG_KALLSYMS is set .version is already updated |
| 662 | # Generate System.map and verify that the content is consistent | 662 | # Generate System.map and verify that the content is consistent |
| 663 | 663 | # Use + in front of the vmlinux_version rule to silent warning with make -j2 | |
| 664 | # First command is ':' to allow us to use + in front of the rule | ||
| 664 | define rule_vmlinux__ | 665 | define rule_vmlinux__ |
| 666 | : | ||
| 665 | $(if $(CONFIG_KALLSYMS),,+$(call cmd,vmlinux_version)) | 667 | $(if $(CONFIG_KALLSYMS),,+$(call cmd,vmlinux_version)) |
| 666 | 668 | ||
| 667 | $(call cmd,vmlinux__) | 669 | $(call cmd,vmlinux__) |
diff --git a/arch/arm/mach-s3c2410/clock.c b/arch/arm/mach-s3c2410/clock.c index f59608268751..8b3d5dc35de5 100644 --- a/arch/arm/mach-s3c2410/clock.c +++ b/arch/arm/mach-s3c2410/clock.c | |||
| @@ -98,7 +98,10 @@ struct clk *clk_get(struct device *dev, const char *id) | |||
| 98 | struct clk *clk = ERR_PTR(-ENOENT); | 98 | struct clk *clk = ERR_PTR(-ENOENT); |
| 99 | int idno; | 99 | int idno; |
| 100 | 100 | ||
| 101 | idno = (dev == NULL) ? -1 : to_platform_device(dev)->id; | 101 | if (dev == NULL || dev->bus != &platform_bus_type) |
| 102 | idno = -1; | ||
| 103 | else | ||
| 104 | idno = to_platform_device(dev)->id; | ||
| 102 | 105 | ||
| 103 | down(&clocks_sem); | 106 | down(&clocks_sem); |
| 104 | 107 | ||
diff --git a/drivers/acpi/event.c b/drivers/acpi/event.c index bfa8b76de403..2dbb1b0f11d5 100644 --- a/drivers/acpi/event.c +++ b/drivers/acpi/event.c | |||
| @@ -58,9 +58,8 @@ acpi_system_read_event(struct file *file, char __user * buffer, size_t count, | |||
| 58 | return_VALUE(-EAGAIN); | 58 | return_VALUE(-EAGAIN); |
| 59 | 59 | ||
| 60 | result = acpi_bus_receive_event(&event); | 60 | result = acpi_bus_receive_event(&event); |
| 61 | if (result) { | 61 | if (result) |
| 62 | return_VALUE(-EIO); | 62 | return_VALUE(result); |
| 63 | } | ||
| 64 | 63 | ||
| 65 | chars_remaining = sprintf(str, "%s %s %08x %08x\n", | 64 | chars_remaining = sprintf(str, "%s %s %08x %08x\n", |
| 66 | event.device_class ? event. | 65 | event.device_class ? event. |
diff --git a/drivers/char/.gitignore b/drivers/char/.gitignore new file mode 100644 index 000000000000..2b6b1d772ed7 --- /dev/null +++ b/drivers/char/.gitignore | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | consolemap_deftbl.c | ||
| 2 | defkeymap.c | ||
| 3 | |||
diff --git a/drivers/char/n_r3964.c b/drivers/char/n_r3964.c index 97d6dc24b800..853c98cee64f 100644 --- a/drivers/char/n_r3964.c +++ b/drivers/char/n_r3964.c | |||
| @@ -695,7 +695,7 @@ static void receive_char(struct r3964_info *pInfo, const unsigned char c) | |||
| 695 | { | 695 | { |
| 696 | TRACE_PE("IDLE - got STX but no space in rx_queue!"); | 696 | TRACE_PE("IDLE - got STX but no space in rx_queue!"); |
| 697 | pInfo->state=R3964_WAIT_FOR_RX_BUF; | 697 | pInfo->state=R3964_WAIT_FOR_RX_BUF; |
| 698 | mod_timer(&pInfo->tmr, R3964_TO_NO_BUF); | 698 | mod_timer(&pInfo->tmr, jiffies + R3964_TO_NO_BUF); |
| 699 | break; | 699 | break; |
| 700 | } | 700 | } |
| 701 | start_receiving: | 701 | start_receiving: |
| @@ -705,7 +705,7 @@ start_receiving: | |||
| 705 | pInfo->last_rx = 0; | 705 | pInfo->last_rx = 0; |
| 706 | pInfo->flags &= ~R3964_ERROR; | 706 | pInfo->flags &= ~R3964_ERROR; |
| 707 | pInfo->state=R3964_RECEIVING; | 707 | pInfo->state=R3964_RECEIVING; |
| 708 | mod_timer(&pInfo->tmr, R3964_TO_ZVZ); | 708 | mod_timer(&pInfo->tmr, jiffies + R3964_TO_ZVZ); |
| 709 | pInfo->nRetry = 0; | 709 | pInfo->nRetry = 0; |
| 710 | put_char(pInfo, DLE); | 710 | put_char(pInfo, DLE); |
| 711 | flush(pInfo); | 711 | flush(pInfo); |
| @@ -732,7 +732,7 @@ start_receiving: | |||
| 732 | if(pInfo->flags & R3964_BCC) | 732 | if(pInfo->flags & R3964_BCC) |
| 733 | { | 733 | { |
| 734 | pInfo->state = R3964_WAIT_FOR_BCC; | 734 | pInfo->state = R3964_WAIT_FOR_BCC; |
| 735 | mod_timer(&pInfo->tmr, R3964_TO_ZVZ); | 735 | mod_timer(&pInfo->tmr, jiffies + R3964_TO_ZVZ); |
| 736 | } | 736 | } |
| 737 | else | 737 | else |
| 738 | { | 738 | { |
| @@ -744,7 +744,7 @@ start_receiving: | |||
| 744 | pInfo->last_rx = c; | 744 | pInfo->last_rx = c; |
| 745 | char_to_buf: | 745 | char_to_buf: |
| 746 | pInfo->rx_buf[pInfo->rx_position++] = c; | 746 | pInfo->rx_buf[pInfo->rx_position++] = c; |
| 747 | mod_timer(&pInfo->tmr, R3964_TO_ZVZ); | 747 | mod_timer(&pInfo->tmr, jiffies + R3964_TO_ZVZ); |
| 748 | } | 748 | } |
| 749 | } | 749 | } |
| 750 | /* else: overflow-msg? BUF_SIZE>MTU; should not happen? */ | 750 | /* else: overflow-msg? BUF_SIZE>MTU; should not happen? */ |
diff --git a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c index d5c5b32045af..4015a91f4b6e 100644 --- a/drivers/input/misc/uinput.c +++ b/drivers/input/misc/uinput.c | |||
| @@ -90,11 +90,11 @@ static inline int uinput_request_reserve_slot(struct uinput_device *udev, struct | |||
| 90 | 90 | ||
| 91 | static void uinput_request_done(struct uinput_device *udev, struct uinput_request *request) | 91 | static void uinput_request_done(struct uinput_device *udev, struct uinput_request *request) |
| 92 | { | 92 | { |
| 93 | complete(&request->done); | ||
| 94 | |||
| 95 | /* Mark slot as available */ | 93 | /* Mark slot as available */ |
| 96 | udev->requests[request->id] = NULL; | 94 | udev->requests[request->id] = NULL; |
| 97 | wake_up_interruptible(&udev->requests_waitq); | 95 | wake_up_interruptible(&udev->requests_waitq); |
| 96 | |||
| 97 | complete(&request->done); | ||
| 98 | } | 98 | } |
| 99 | 99 | ||
| 100 | static int uinput_request_submit(struct input_dev *dev, struct uinput_request *request) | 100 | static int uinput_request_submit(struct input_dev *dev, struct uinput_request *request) |
diff --git a/drivers/media/video/vpx3220.c b/drivers/media/video/vpx3220.c index 4437bdebe24f..137b58f2c666 100644 --- a/drivers/media/video/vpx3220.c +++ b/drivers/media/video/vpx3220.c | |||
| @@ -203,7 +203,7 @@ static const unsigned short init_ntsc[] = { | |||
| 203 | 0x8c, 640, /* Horizontal length */ | 203 | 0x8c, 640, /* Horizontal length */ |
| 204 | 0x8d, 640, /* Number of pixels */ | 204 | 0x8d, 640, /* Number of pixels */ |
| 205 | 0x8f, 0xc00, /* Disable window 2 */ | 205 | 0x8f, 0xc00, /* Disable window 2 */ |
| 206 | 0xf0, 0x173, /* 13.5 MHz transport, Forced | 206 | 0xf0, 0x73, /* 13.5 MHz transport, Forced |
| 207 | * mode, latch windows */ | 207 | * mode, latch windows */ |
| 208 | 0xf2, 0x13, /* NTSC M, composite input */ | 208 | 0xf2, 0x13, /* NTSC M, composite input */ |
| 209 | 0xe7, 0x1e1, /* Enable vertical standard | 209 | 0xe7, 0x1e1, /* Enable vertical standard |
| @@ -212,38 +212,36 @@ static const unsigned short init_ntsc[] = { | |||
| 212 | 212 | ||
| 213 | static const unsigned short init_pal[] = { | 213 | static const unsigned short init_pal[] = { |
| 214 | 0x88, 23, /* Window 1 vertical begin */ | 214 | 0x88, 23, /* Window 1 vertical begin */ |
| 215 | 0x89, 288 + 16, /* Vertical lines in (16 lines | 215 | 0x89, 288, /* Vertical lines in (16 lines |
| 216 | * skipped by the VFE) */ | 216 | * skipped by the VFE) */ |
| 217 | 0x8a, 288 + 16, /* Vertical lines out (16 lines | 217 | 0x8a, 288, /* Vertical lines out (16 lines |
| 218 | * skipped by the VFE) */ | 218 | * skipped by the VFE) */ |
| 219 | 0x8b, 16, /* Horizontal begin */ | 219 | 0x8b, 16, /* Horizontal begin */ |
| 220 | 0x8c, 768, /* Horizontal length */ | 220 | 0x8c, 768, /* Horizontal length */ |
| 221 | 0x8d, 784, /* Number of pixels | 221 | 0x8d, 784, /* Number of pixels |
| 222 | * Must be >= Horizontal begin + Horizontal length */ | 222 | * Must be >= Horizontal begin + Horizontal length */ |
| 223 | 0x8f, 0xc00, /* Disable window 2 */ | 223 | 0x8f, 0xc00, /* Disable window 2 */ |
| 224 | 0xf0, 0x177, /* 13.5 MHz transport, Forced | 224 | 0xf0, 0x77, /* 13.5 MHz transport, Forced |
| 225 | * mode, latch windows */ | 225 | * mode, latch windows */ |
| 226 | 0xf2, 0x3d1, /* PAL B,G,H,I, composite input */ | 226 | 0xf2, 0x3d1, /* PAL B,G,H,I, composite input */ |
| 227 | 0xe7, 0x261, /* PAL/SECAM set to 288 + 16 lines | 227 | 0xe7, 0x241, /* PAL/SECAM set to 288 lines */ |
| 228 | * change to 0x241 for 288 lines */ | ||
| 229 | }; | 228 | }; |
| 230 | 229 | ||
| 231 | static const unsigned short init_secam[] = { | 230 | static const unsigned short init_secam[] = { |
| 232 | 0x88, 23 - 16, /* Window 1 vertical begin */ | 231 | 0x88, 23, /* Window 1 vertical begin */ |
| 233 | 0x89, 288 + 16, /* Vertical lines in (16 lines | 232 | 0x89, 288, /* Vertical lines in (16 lines |
| 234 | * skipped by the VFE) */ | 233 | * skipped by the VFE) */ |
| 235 | 0x8a, 288 + 16, /* Vertical lines out (16 lines | 234 | 0x8a, 288, /* Vertical lines out (16 lines |
| 236 | * skipped by the VFE) */ | 235 | * skipped by the VFE) */ |
| 237 | 0x8b, 16, /* Horizontal begin */ | 236 | 0x8b, 16, /* Horizontal begin */ |
| 238 | 0x8c, 768, /* Horizontal length */ | 237 | 0x8c, 768, /* Horizontal length */ |
| 239 | 0x8d, 784, /* Number of pixels | 238 | 0x8d, 784, /* Number of pixels |
| 240 | * Must be >= Horizontal begin + Horizontal length */ | 239 | * Must be >= Horizontal begin + Horizontal length */ |
| 241 | 0x8f, 0xc00, /* Disable window 2 */ | 240 | 0x8f, 0xc00, /* Disable window 2 */ |
| 242 | 0xf0, 0x177, /* 13.5 MHz transport, Forced | 241 | 0xf0, 0x77, /* 13.5 MHz transport, Forced |
| 243 | * mode, latch windows */ | 242 | * mode, latch windows */ |
| 244 | 0xf2, 0x3d5, /* SECAM, composite input */ | 243 | 0xf2, 0x3d5, /* SECAM, composite input */ |
| 245 | 0xe7, 0x261, /* PAL/SECAM set to 288 + 16 lines | 244 | 0xe7, 0x241, /* PAL/SECAM set to 288 lines */ |
| 246 | * change to 0x241 for 288 lines */ | ||
| 247 | }; | 245 | }; |
| 248 | 246 | ||
| 249 | static const unsigned char init_common[] = { | 247 | static const unsigned char init_common[] = { |
| @@ -410,6 +408,12 @@ vpx3220_command (struct i2c_client *client, | |||
| 410 | case DECODER_SET_NORM: | 408 | case DECODER_SET_NORM: |
| 411 | { | 409 | { |
| 412 | int *iarg = arg, data; | 410 | int *iarg = arg, data; |
| 411 | int temp_input; | ||
| 412 | |||
| 413 | /* Here we back up the input selection because it gets | ||
| 414 | overwritten when we fill the registers with the | ||
| 415 | choosen video norm */ | ||
| 416 | temp_input = vpx3220_fp_read(client, 0xf2); | ||
| 413 | 417 | ||
| 414 | dprintk(1, KERN_DEBUG "%s: DECODER_SET_NORM %d\n", | 418 | dprintk(1, KERN_DEBUG "%s: DECODER_SET_NORM %d\n", |
| 415 | I2C_NAME(client), *iarg); | 419 | I2C_NAME(client), *iarg); |
| @@ -449,6 +453,10 @@ vpx3220_command (struct i2c_client *client, | |||
| 449 | 453 | ||
| 450 | } | 454 | } |
| 451 | decoder->norm = *iarg; | 455 | decoder->norm = *iarg; |
| 456 | |||
| 457 | /* And here we set the backed up video input again */ | ||
| 458 | vpx3220_fp_write(client, 0xf2, temp_input | 0x0010); | ||
| 459 | udelay(10); | ||
| 452 | } | 460 | } |
| 453 | break; | 461 | break; |
| 454 | 462 | ||
diff --git a/drivers/pci/.gitignore b/drivers/pci/.gitignore new file mode 100644 index 000000000000..f297ca8d313e --- /dev/null +++ b/drivers/pci/.gitignore | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | classlist.h | ||
| 2 | devlist.h | ||
| 3 | gen-devlist | ||
| 4 | |||
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 11ca44387cb0..a6a630a950d0 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
| @@ -1233,7 +1233,7 @@ static void __init quirk_alder_ioapic(struct pci_dev *pdev) | |||
| 1233 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EESSC, quirk_alder_ioapic ); | 1233 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EESSC, quirk_alder_ioapic ); |
| 1234 | #endif | 1234 | #endif |
| 1235 | 1235 | ||
| 1236 | #ifdef CONFIG_SCSI_SATA | 1236 | #ifdef CONFIG_SCSI_SATA_INTEL_COMBINED |
| 1237 | static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev) | 1237 | static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev) |
| 1238 | { | 1238 | { |
| 1239 | u8 prog, comb, tmp; | 1239 | u8 prog, comb, tmp; |
| @@ -1310,7 +1310,7 @@ static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev) | |||
| 1310 | request_region(0x170, 8, "libata"); /* port 1 */ | 1310 | request_region(0x170, 8, "libata"); /* port 1 */ |
| 1311 | } | 1311 | } |
| 1312 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, quirk_intel_ide_combined ); | 1312 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, quirk_intel_ide_combined ); |
| 1313 | #endif /* CONFIG_SCSI_SATA */ | 1313 | #endif /* CONFIG_SCSI_SATA_INTEL_COMBINED */ |
| 1314 | 1314 | ||
| 1315 | 1315 | ||
| 1316 | int pcie_mch_quirk; | 1316 | int pcie_mch_quirk; |
diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig index 20019b82b4a8..3ee9b8b33be0 100644 --- a/drivers/scsi/Kconfig +++ b/drivers/scsi/Kconfig | |||
| @@ -553,6 +553,11 @@ config SCSI_SATA_VITESSE | |||
| 553 | 553 | ||
| 554 | If unsure, say N. | 554 | If unsure, say N. |
| 555 | 555 | ||
| 556 | config SCSI_SATA_INTEL_COMBINED | ||
| 557 | bool | ||
| 558 | depends on IDE=y && !BLK_DEV_IDE_SATA && (SCSI_SATA_AHCI || SCSI_ATA_PIIX) | ||
| 559 | default y | ||
| 560 | |||
| 556 | config SCSI_BUSLOGIC | 561 | config SCSI_BUSLOGIC |
| 557 | tristate "BusLogic SCSI support" | 562 | tristate "BusLogic SCSI support" |
| 558 | depends on (PCI || ISA || MCA) && SCSI && ISA_DMA_API | 563 | depends on (PCI || ISA || MCA) && SCSI && ISA_DMA_API |
diff --git a/drivers/serial/8250_pnp.c b/drivers/serial/8250_pnp.c index c2786fc41cc5..5d8660a42b77 100644 --- a/drivers/serial/8250_pnp.c +++ b/drivers/serial/8250_pnp.c | |||
| @@ -276,6 +276,8 @@ static const struct pnp_device_id pnp_dev_table[] = { | |||
| 276 | { "SUP1620", 0 }, | 276 | { "SUP1620", 0 }, |
| 277 | /* SupraExpress 33.6 Data/Fax PnP modem */ | 277 | /* SupraExpress 33.6 Data/Fax PnP modem */ |
| 278 | { "SUP1760", 0 }, | 278 | { "SUP1760", 0 }, |
| 279 | /* SupraExpress 56i Sp Intl */ | ||
| 280 | { "SUP2171", 0 }, | ||
| 279 | /* Phoebe Micro */ | 281 | /* Phoebe Micro */ |
| 280 | /* Phoebe Micro 33.6 Data Fax 1433VQH Plug & Play */ | 282 | /* Phoebe Micro 33.6 Data Fax 1433VQH Plug & Play */ |
| 281 | { "TEX0011", 0 }, | 283 | { "TEX0011", 0 }, |
diff --git a/drivers/usb/host/isp116x-hcd.c b/drivers/usb/host/isp116x-hcd.c index 41bbae83fc71..e142056b0d2c 100644 --- a/drivers/usb/host/isp116x-hcd.c +++ b/drivers/usb/host/isp116x-hcd.c | |||
| @@ -326,7 +326,8 @@ static void postproc_atl_queue(struct isp116x *isp116x) | |||
| 326 | usb_settoggle(udev, ep->epnum, | 326 | usb_settoggle(udev, ep->epnum, |
| 327 | ep->nextpid == | 327 | ep->nextpid == |
| 328 | USB_PID_OUT, | 328 | USB_PID_OUT, |
| 329 | PTD_GET_TOGGLE(ptd) ^ 1); | 329 | PTD_GET_TOGGLE(ptd)); |
| 330 | urb->actual_length += PTD_GET_COUNT(ptd); | ||
| 330 | urb->status = cc_to_error[TD_DATAUNDERRUN]; | 331 | urb->status = cc_to_error[TD_DATAUNDERRUN]; |
| 331 | spin_unlock(&urb->lock); | 332 | spin_unlock(&urb->lock); |
| 332 | continue; | 333 | continue; |
diff --git a/drivers/usb/input/hid-core.c b/drivers/usb/input/hid-core.c index a99865c689c5..41f92b924761 100644 --- a/drivers/usb/input/hid-core.c +++ b/drivers/usb/input/hid-core.c | |||
| @@ -1702,10 +1702,7 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf) | |||
| 1702 | if ((endpoint->bmAttributes & 3) != 3) /* Not an interrupt endpoint */ | 1702 | if ((endpoint->bmAttributes & 3) != 3) /* Not an interrupt endpoint */ |
| 1703 | continue; | 1703 | continue; |
| 1704 | 1704 | ||
| 1705 | /* handle potential highspeed HID correctly */ | ||
| 1706 | interval = endpoint->bInterval; | 1705 | interval = endpoint->bInterval; |
| 1707 | if (dev->speed == USB_SPEED_HIGH) | ||
| 1708 | interval = 1 << (interval - 1); | ||
| 1709 | 1706 | ||
| 1710 | /* Change the polling interval of mice. */ | 1707 | /* Change the polling interval of mice. */ |
| 1711 | if (hid->collection->usage == HID_GD_MOUSE && hid_mousepoll_interval > 0) | 1708 | if (hid->collection->usage == HID_GD_MOUSE && hid_mousepoll_interval > 0) |
diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c index 6ef6f7760e47..809fee2140ac 100644 --- a/drivers/video/console/vgacon.c +++ b/drivers/video/console/vgacon.c | |||
| @@ -565,7 +565,11 @@ static int vgacon_switch(struct vc_data *c) | |||
| 565 | scr_memcpyw((u16 *) c->vc_origin, (u16 *) c->vc_screenbuf, | 565 | scr_memcpyw((u16 *) c->vc_origin, (u16 *) c->vc_screenbuf, |
| 566 | c->vc_screenbuf_size > vga_vram_size ? | 566 | c->vc_screenbuf_size > vga_vram_size ? |
| 567 | vga_vram_size : c->vc_screenbuf_size); | 567 | vga_vram_size : c->vc_screenbuf_size); |
| 568 | vgacon_doresize(c, c->vc_cols, c->vc_rows); | 568 | if (!(vga_video_num_columns % 2) && |
| 569 | vga_video_num_columns <= ORIG_VIDEO_COLS && | ||
| 570 | vga_video_num_lines <= (ORIG_VIDEO_LINES * | ||
| 571 | vga_default_font_height) / c->vc_font.height) | ||
| 572 | vgacon_doresize(c, c->vc_cols, c->vc_rows); | ||
| 569 | } | 573 | } |
| 570 | 574 | ||
| 571 | return 0; /* Redrawing not needed */ | 575 | return 0; /* Redrawing not needed */ |
| @@ -1023,7 +1027,8 @@ static int vgacon_resize(struct vc_data *c, unsigned int width, | |||
| 1023 | if (width % 2 || width > ORIG_VIDEO_COLS || | 1027 | if (width % 2 || width > ORIG_VIDEO_COLS || |
| 1024 | height > (ORIG_VIDEO_LINES * vga_default_font_height)/ | 1028 | height > (ORIG_VIDEO_LINES * vga_default_font_height)/ |
| 1025 | c->vc_font.height) | 1029 | c->vc_font.height) |
| 1026 | return -EINVAL; | 1030 | /* let svgatextmode tinker with video timings */ |
| 1031 | return 0; | ||
| 1027 | 1032 | ||
| 1028 | if (CON_IS_VISIBLE(c) && !vga_is_gfx) /* who knows */ | 1033 | if (CON_IS_VISIBLE(c) && !vga_is_gfx) /* who knows */ |
| 1029 | vgacon_doresize(c, width, height); | 1034 | vgacon_doresize(c, width, height); |
diff --git a/drivers/video/logo/.gitignore b/drivers/video/logo/.gitignore new file mode 100644 index 000000000000..e48355f538fa --- /dev/null +++ b/drivers/video/logo/.gitignore | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | # | ||
| 2 | # Generated files | ||
| 3 | # | ||
| 4 | *_mono.c | ||
| 5 | *_vga16.c | ||
| 6 | *_clut224.c | ||
| 7 | *_gray256.c | ||
diff --git a/drivers/video/vesafb.c b/drivers/video/vesafb.c index 1ca80264c7b0..b1243da55fc5 100644 --- a/drivers/video/vesafb.c +++ b/drivers/video/vesafb.c | |||
| @@ -96,14 +96,14 @@ static int vesafb_blank(int blank, struct fb_info *info) | |||
| 96 | int loop = 10000; | 96 | int loop = 10000; |
| 97 | u8 seq = 0, crtc17 = 0; | 97 | u8 seq = 0, crtc17 = 0; |
| 98 | 98 | ||
| 99 | err = 0; | 99 | if (blank == FB_BLANK_POWERDOWN) { |
| 100 | |||
| 101 | if (blank) { | ||
| 102 | seq = 0x20; | 100 | seq = 0x20; |
| 103 | crtc17 = 0x00; | 101 | crtc17 = 0x00; |
| 102 | err = 0; | ||
| 104 | } else { | 103 | } else { |
| 105 | seq = 0x00; | 104 | seq = 0x00; |
| 106 | crtc17 = 0x80; | 105 | crtc17 = 0x80; |
| 106 | err = (blank == FB_BLANK_UNBLANK) ? 0 : -EINVAL; | ||
| 107 | } | 107 | } |
| 108 | 108 | ||
| 109 | vga_wseq(NULL, 0x00, 0x01); | 109 | vga_wseq(NULL, 0x00, 0x01); |
| @@ -398,7 +398,7 @@ static struct kiocb fastcall *__aio_get_req(struct kioctx *ctx) | |||
| 398 | if (unlikely(!req)) | 398 | if (unlikely(!req)) |
| 399 | return NULL; | 399 | return NULL; |
| 400 | 400 | ||
| 401 | req->ki_flags = 1 << KIF_LOCKED; | 401 | req->ki_flags = 0; |
| 402 | req->ki_users = 2; | 402 | req->ki_users = 2; |
| 403 | req->ki_key = 0; | 403 | req->ki_key = 0; |
| 404 | req->ki_ctx = ctx; | 404 | req->ki_ctx = ctx; |
| @@ -547,25 +547,6 @@ struct kioctx *lookup_ioctx(unsigned long ctx_id) | |||
| 547 | return ioctx; | 547 | return ioctx; |
| 548 | } | 548 | } |
| 549 | 549 | ||
| 550 | static int lock_kiocb_action(void *param) | ||
| 551 | { | ||
| 552 | schedule(); | ||
| 553 | return 0; | ||
| 554 | } | ||
| 555 | |||
| 556 | static inline void lock_kiocb(struct kiocb *iocb) | ||
| 557 | { | ||
| 558 | wait_on_bit_lock(&iocb->ki_flags, KIF_LOCKED, lock_kiocb_action, | ||
| 559 | TASK_UNINTERRUPTIBLE); | ||
| 560 | } | ||
| 561 | |||
| 562 | static inline void unlock_kiocb(struct kiocb *iocb) | ||
| 563 | { | ||
| 564 | kiocbClearLocked(iocb); | ||
| 565 | smp_mb__after_clear_bit(); | ||
| 566 | wake_up_bit(&iocb->ki_flags, KIF_LOCKED); | ||
| 567 | } | ||
| 568 | |||
| 569 | /* | 550 | /* |
| 570 | * use_mm | 551 | * use_mm |
| 571 | * Makes the calling kernel thread take on the specified | 552 | * Makes the calling kernel thread take on the specified |
| @@ -796,9 +777,7 @@ static int __aio_run_iocbs(struct kioctx *ctx) | |||
| 796 | * Hold an extra reference while retrying i/o. | 777 | * Hold an extra reference while retrying i/o. |
| 797 | */ | 778 | */ |
| 798 | iocb->ki_users++; /* grab extra reference */ | 779 | iocb->ki_users++; /* grab extra reference */ |
| 799 | lock_kiocb(iocb); | ||
| 800 | aio_run_iocb(iocb); | 780 | aio_run_iocb(iocb); |
| 801 | unlock_kiocb(iocb); | ||
| 802 | if (__aio_put_req(ctx, iocb)) /* drop extra ref */ | 781 | if (__aio_put_req(ctx, iocb)) /* drop extra ref */ |
| 803 | put_ioctx(ctx); | 782 | put_ioctx(ctx); |
| 804 | } | 783 | } |
| @@ -1542,7 +1521,6 @@ int fastcall io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb, | |||
| 1542 | 1521 | ||
| 1543 | spin_lock_irq(&ctx->ctx_lock); | 1522 | spin_lock_irq(&ctx->ctx_lock); |
| 1544 | aio_run_iocb(req); | 1523 | aio_run_iocb(req); |
| 1545 | unlock_kiocb(req); | ||
| 1546 | if (!list_empty(&ctx->run_list)) { | 1524 | if (!list_empty(&ctx->run_list)) { |
| 1547 | /* drain the run list */ | 1525 | /* drain the run list */ |
| 1548 | while (__aio_run_iocbs(ctx)) | 1526 | while (__aio_run_iocbs(ctx)) |
| @@ -1674,7 +1652,6 @@ asmlinkage long sys_io_cancel(aio_context_t ctx_id, struct iocb __user *iocb, | |||
| 1674 | if (NULL != cancel) { | 1652 | if (NULL != cancel) { |
| 1675 | struct io_event tmp; | 1653 | struct io_event tmp; |
| 1676 | pr_debug("calling cancel\n"); | 1654 | pr_debug("calling cancel\n"); |
| 1677 | lock_kiocb(kiocb); | ||
| 1678 | memset(&tmp, 0, sizeof(tmp)); | 1655 | memset(&tmp, 0, sizeof(tmp)); |
| 1679 | tmp.obj = (u64)(unsigned long)kiocb->ki_obj.user; | 1656 | tmp.obj = (u64)(unsigned long)kiocb->ki_obj.user; |
| 1680 | tmp.data = kiocb->ki_user_data; | 1657 | tmp.data = kiocb->ki_user_data; |
| @@ -1686,7 +1663,6 @@ asmlinkage long sys_io_cancel(aio_context_t ctx_id, struct iocb __user *iocb, | |||
| 1686 | if (copy_to_user(result, &tmp, sizeof(tmp))) | 1663 | if (copy_to_user(result, &tmp, sizeof(tmp))) |
| 1687 | ret = -EFAULT; | 1664 | ret = -EFAULT; |
| 1688 | } | 1665 | } |
| 1689 | unlock_kiocb(kiocb); | ||
| 1690 | } else | 1666 | } else |
| 1691 | ret = -EINVAL; | 1667 | ret = -EINVAL; |
| 1692 | 1668 | ||
diff --git a/fs/nfs/delegation.c b/fs/nfs/delegation.c index d7f7eb669d03..4a36839f0bbd 100644 --- a/fs/nfs/delegation.c +++ b/fs/nfs/delegation.c | |||
| @@ -85,6 +85,10 @@ int nfs_inode_set_delegation(struct inode *inode, struct rpc_cred *cred, struct | |||
| 85 | struct nfs_delegation *delegation; | 85 | struct nfs_delegation *delegation; |
| 86 | int status = 0; | 86 | int status = 0; |
| 87 | 87 | ||
| 88 | /* Ensure we first revalidate the attributes and page cache! */ | ||
| 89 | if ((nfsi->cache_validity & (NFS_INO_REVAL_PAGECACHE|NFS_INO_INVALID_ATTR))) | ||
| 90 | __nfs_revalidate_inode(NFS_SERVER(inode), inode); | ||
| 91 | |||
| 88 | delegation = nfs_alloc_delegation(); | 92 | delegation = nfs_alloc_delegation(); |
| 89 | if (delegation == NULL) | 93 | if (delegation == NULL) |
| 90 | return -ENOMEM; | 94 | return -ENOMEM; |
diff --git a/fs/nfs/file.c b/fs/nfs/file.c index f6b9eda925c5..6bdcfa95de94 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c | |||
| @@ -137,7 +137,8 @@ static int nfs_revalidate_file(struct inode *inode, struct file *filp) | |||
| 137 | struct nfs_inode *nfsi = NFS_I(inode); | 137 | struct nfs_inode *nfsi = NFS_I(inode); |
| 138 | int retval = 0; | 138 | int retval = 0; |
| 139 | 139 | ||
| 140 | if ((nfsi->cache_validity & NFS_INO_REVAL_PAGECACHE) || nfs_attribute_timeout(inode)) | 140 | if ((nfsi->cache_validity & (NFS_INO_REVAL_PAGECACHE|NFS_INO_INVALID_ATTR)) |
| 141 | || nfs_attribute_timeout(inode)) | ||
| 141 | retval = __nfs_revalidate_inode(NFS_SERVER(inode), inode); | 142 | retval = __nfs_revalidate_inode(NFS_SERVER(inode), inode); |
| 142 | nfs_revalidate_mapping(inode, filp->f_mapping); | 143 | nfs_revalidate_mapping(inode, filp->f_mapping); |
| 143 | return 0; | 144 | return 0; |
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 6922469d6fc5..d4eadeea128e 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c | |||
| @@ -877,12 +877,10 @@ static int nfs_wait_on_inode(struct inode *inode) | |||
| 877 | sigset_t oldmask; | 877 | sigset_t oldmask; |
| 878 | int error; | 878 | int error; |
| 879 | 879 | ||
| 880 | atomic_inc(&inode->i_count); | ||
| 881 | rpc_clnt_sigmask(clnt, &oldmask); | 880 | rpc_clnt_sigmask(clnt, &oldmask); |
| 882 | error = wait_on_bit_lock(&nfsi->flags, NFS_INO_REVALIDATING, | 881 | error = wait_on_bit_lock(&nfsi->flags, NFS_INO_REVALIDATING, |
| 883 | nfs_wait_schedule, TASK_INTERRUPTIBLE); | 882 | nfs_wait_schedule, TASK_INTERRUPTIBLE); |
| 884 | rpc_clnt_sigunmask(clnt, &oldmask); | 883 | rpc_clnt_sigunmask(clnt, &oldmask); |
| 885 | iput(inode); | ||
| 886 | 884 | ||
| 887 | return error; | 885 | return error; |
| 888 | } | 886 | } |
| @@ -1226,10 +1224,6 @@ int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr) | |||
| 1226 | loff_t cur_size, new_isize; | 1224 | loff_t cur_size, new_isize; |
| 1227 | int data_unstable; | 1225 | int data_unstable; |
| 1228 | 1226 | ||
| 1229 | /* Do we hold a delegation? */ | ||
| 1230 | if (nfs_have_delegation(inode, FMODE_READ)) | ||
| 1231 | return 0; | ||
| 1232 | |||
| 1233 | spin_lock(&inode->i_lock); | 1227 | spin_lock(&inode->i_lock); |
| 1234 | 1228 | ||
| 1235 | /* Are we in the process of updating data on the server? */ | 1229 | /* Are we in the process of updating data on the server? */ |
| @@ -1350,7 +1344,8 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr, unsign | |||
| 1350 | nfsi->read_cache_jiffies = fattr->timestamp; | 1344 | nfsi->read_cache_jiffies = fattr->timestamp; |
| 1351 | 1345 | ||
| 1352 | /* Are we racing with known updates of the metadata on the server? */ | 1346 | /* Are we racing with known updates of the metadata on the server? */ |
| 1353 | data_unstable = ! nfs_verify_change_attribute(inode, verifier); | 1347 | data_unstable = ! (nfs_verify_change_attribute(inode, verifier) || |
| 1348 | (nfsi->cache_validity & NFS_INO_REVAL_PAGECACHE)); | ||
| 1354 | 1349 | ||
| 1355 | /* Check if our cached file size is stale */ | 1350 | /* Check if our cached file size is stale */ |
| 1356 | new_isize = nfs_size_to_loff_t(fattr->size); | 1351 | new_isize = nfs_size_to_loff_t(fattr->size); |
diff --git a/fs/proc/nommu.c b/fs/proc/nommu.c index f3bf016d5ee3..cff10ab1af63 100644 --- a/fs/proc/nommu.c +++ b/fs/proc/nommu.c | |||
| @@ -91,6 +91,7 @@ static void *nommu_vma_list_start(struct seq_file *m, loff_t *_pos) | |||
| 91 | next = _rb; | 91 | next = _rb; |
| 92 | break; | 92 | break; |
| 93 | } | 93 | } |
| 94 | pos--; | ||
| 94 | } | 95 | } |
| 95 | 96 | ||
| 96 | return next; | 97 | return next; |
diff --git a/include/asm-arm/arch-ixp4xx/entry-macro.S b/include/asm-arm/arch-ixp4xx/entry-macro.S index 455da64832de..323b0bc4a39c 100644 --- a/include/asm-arm/arch-ixp4xx/entry-macro.S +++ b/include/asm-arm/arch-ixp4xx/entry-macro.S | |||
| @@ -15,25 +15,26 @@ | |||
| 15 | ldr \irqstat, =(IXP4XX_INTC_BASE_VIRT+IXP4XX_ICIP_OFFSET) | 15 | ldr \irqstat, =(IXP4XX_INTC_BASE_VIRT+IXP4XX_ICIP_OFFSET) |
| 16 | ldr \irqstat, [\irqstat] @ get interrupts | 16 | ldr \irqstat, [\irqstat] @ get interrupts |
| 17 | cmp \irqstat, #0 | 17 | cmp \irqstat, #0 |
| 18 | beq 1001f | 18 | beq 1001f @ upper IRQ? |
| 19 | clz \irqnr, \irqstat | 19 | clz \irqnr, \irqstat |
| 20 | mov \base, #31 | 20 | mov \base, #31 |
| 21 | subs \irqnr, \base, \irqnr | 21 | sub \irqnr, \base, \irqnr |
| 22 | b 1002f @ lower IRQ being | ||
| 23 | @ handled | ||
| 22 | 24 | ||
| 23 | 1001: | 25 | 1001: |
| 24 | /* | 26 | /* |
| 25 | * IXP465 has an upper IRQ status register | 27 | * IXP465 has an upper IRQ status register |
| 26 | */ | 28 | */ |
| 27 | #if defined(CONFIG_CPU_IXP46X) | 29 | #if defined(CONFIG_CPU_IXP46X) |
| 28 | bne 1002f | ||
| 29 | ldr \irqstat, =(IXP4XX_INTC_BASE_VIRT+IXP4XX_ICIP2_OFFSET) | 30 | ldr \irqstat, =(IXP4XX_INTC_BASE_VIRT+IXP4XX_ICIP2_OFFSET) |
| 30 | ldr \irqstat, [\irqstat] @ get upper interrupts | 31 | ldr \irqstat, [\irqstat] @ get upper interrupts |
| 31 | mov \irqnr, #63 | 32 | mov \irqnr, #63 |
| 32 | clz \irqstat, \irqstat | 33 | clz \irqstat, \irqstat |
| 33 | cmp \irqstat, #32 | 34 | cmp \irqstat, #32 |
| 34 | subne \irqnr, \irqnr, \irqstat | 35 | subne \irqnr, \irqnr, \irqstat |
| 35 | 1002: | ||
| 36 | #endif | 36 | #endif |
| 37 | 1002: | ||
| 37 | .endm | 38 | .endm |
| 38 | 39 | ||
| 39 | 40 | ||
diff --git a/include/asm-arm/arch-ixp4xx/hardware.h b/include/asm-arm/arch-ixp4xx/hardware.h index 4ac964b9078a..55d85eea8c1a 100644 --- a/include/asm-arm/arch-ixp4xx/hardware.h +++ b/include/asm-arm/arch-ixp4xx/hardware.h | |||
| @@ -27,7 +27,7 @@ | |||
| 27 | 27 | ||
| 28 | #define pcibios_assign_all_busses() 1 | 28 | #define pcibios_assign_all_busses() 1 |
| 29 | 29 | ||
| 30 | #if defined(CONFIG_CPU_IXP465) && !defined(__ASSEMBLY__) | 30 | #if defined(CONFIG_CPU_IXP46X) && !defined(__ASSEMBLY__) |
| 31 | extern unsigned int processor_id; | 31 | extern unsigned int processor_id; |
| 32 | #define cpu_is_ixp465() ((processor_id & 0xffffffc0) == 0x69054200) | 32 | #define cpu_is_ixp465() ((processor_id & 0xffffffc0) == 0x69054200) |
| 33 | #else | 33 | #else |
diff --git a/include/asm-arm/locks.h b/include/asm-arm/locks.h index f08dc8447913..852220eecdbc 100644 --- a/include/asm-arm/locks.h +++ b/include/asm-arm/locks.h | |||
| @@ -103,7 +103,7 @@ | |||
| 103 | ({ \ | 103 | ({ \ |
| 104 | smp_mb(); \ | 104 | smp_mb(); \ |
| 105 | __asm__ __volatile__( \ | 105 | __asm__ __volatile__( \ |
| 106 | "@ up_op_read\n" \ | 106 | "@ up_op_write\n" \ |
| 107 | "1: ldrex lr, [%0]\n" \ | 107 | "1: ldrex lr, [%0]\n" \ |
| 108 | " adds lr, lr, %1\n" \ | 108 | " adds lr, lr, %1\n" \ |
| 109 | " strex ip, lr, [%0]\n" \ | 109 | " strex ip, lr, [%0]\n" \ |
| @@ -231,7 +231,7 @@ | |||
| 231 | #define __up_op_write(ptr,wake) \ | 231 | #define __up_op_write(ptr,wake) \ |
| 232 | ({ \ | 232 | ({ \ |
| 233 | __asm__ __volatile__( \ | 233 | __asm__ __volatile__( \ |
| 234 | "@ up_op_read\n" \ | 234 | "@ up_op_write\n" \ |
| 235 | " mrs ip, cpsr\n" \ | 235 | " mrs ip, cpsr\n" \ |
| 236 | " orr lr, ip, #128\n" \ | 236 | " orr lr, ip, #128\n" \ |
| 237 | " msr cpsr_c, lr\n" \ | 237 | " msr cpsr_c, lr\n" \ |
diff --git a/include/linux/aio.h b/include/linux/aio.h index 60def658b246..0decf66117c1 100644 --- a/include/linux/aio.h +++ b/include/linux/aio.h | |||
| @@ -24,7 +24,12 @@ struct kioctx; | |||
| 24 | #define KIOCB_SYNC_KEY (~0U) | 24 | #define KIOCB_SYNC_KEY (~0U) |
| 25 | 25 | ||
| 26 | /* ki_flags bits */ | 26 | /* ki_flags bits */ |
| 27 | #define KIF_LOCKED 0 | 27 | /* |
| 28 | * This may be used for cancel/retry serialization in the future, but | ||
| 29 | * for now it's unused and we probably don't want modules to even | ||
| 30 | * think they can use it. | ||
| 31 | */ | ||
| 32 | /* #define KIF_LOCKED 0 */ | ||
| 28 | #define KIF_KICKED 1 | 33 | #define KIF_KICKED 1 |
| 29 | #define KIF_CANCELLED 2 | 34 | #define KIF_CANCELLED 2 |
| 30 | 35 | ||
diff --git a/include/linux/list.h b/include/linux/list.h index e6ec59682274..084971f333fe 100644 --- a/include/linux/list.h +++ b/include/linux/list.h | |||
| @@ -442,12 +442,14 @@ static inline void list_splice_init(struct list_head *list, | |||
| 442 | * as long as the traversal is guarded by rcu_read_lock(). | 442 | * as long as the traversal is guarded by rcu_read_lock(). |
| 443 | */ | 443 | */ |
| 444 | #define list_for_each_rcu(pos, head) \ | 444 | #define list_for_each_rcu(pos, head) \ |
| 445 | for (pos = (head)->next; prefetch(pos->next), pos != (head); \ | 445 | for (pos = (head)->next; \ |
| 446 | pos = rcu_dereference(pos->next)) | 446 | prefetch(rcu_dereference(pos)->next), pos != (head); \ |
| 447 | pos = pos->next) | ||
| 447 | 448 | ||
| 448 | #define __list_for_each_rcu(pos, head) \ | 449 | #define __list_for_each_rcu(pos, head) \ |
| 449 | for (pos = (head)->next; pos != (head); \ | 450 | for (pos = (head)->next; \ |
| 450 | pos = rcu_dereference(pos->next)) | 451 | rcu_dereference(pos) != (head); \ |
| 452 | pos = pos->next) | ||
| 451 | 453 | ||
| 452 | /** | 454 | /** |
| 453 | * list_for_each_safe_rcu - iterate over an rcu-protected list safe | 455 | * list_for_each_safe_rcu - iterate over an rcu-protected list safe |
| @@ -461,8 +463,9 @@ static inline void list_splice_init(struct list_head *list, | |||
| 461 | * as long as the traversal is guarded by rcu_read_lock(). | 463 | * as long as the traversal is guarded by rcu_read_lock(). |
| 462 | */ | 464 | */ |
| 463 | #define list_for_each_safe_rcu(pos, n, head) \ | 465 | #define list_for_each_safe_rcu(pos, n, head) \ |
| 464 | for (pos = (head)->next, n = pos->next; pos != (head); \ | 466 | for (pos = (head)->next; \ |
| 465 | pos = rcu_dereference(n), n = pos->next) | 467 | n = rcu_dereference(pos)->next, pos != (head); \ |
| 468 | pos = n) | ||
| 466 | 469 | ||
| 467 | /** | 470 | /** |
| 468 | * list_for_each_entry_rcu - iterate over rcu list of given type | 471 | * list_for_each_entry_rcu - iterate over rcu list of given type |
| @@ -474,11 +477,11 @@ static inline void list_splice_init(struct list_head *list, | |||
| 474 | * the _rcu list-mutation primitives such as list_add_rcu() | 477 | * the _rcu list-mutation primitives such as list_add_rcu() |
| 475 | * as long as the traversal is guarded by rcu_read_lock(). | 478 | * as long as the traversal is guarded by rcu_read_lock(). |
| 476 | */ | 479 | */ |
| 477 | #define list_for_each_entry_rcu(pos, head, member) \ | 480 | #define list_for_each_entry_rcu(pos, head, member) \ |
| 478 | for (pos = list_entry((head)->next, typeof(*pos), member); \ | 481 | for (pos = list_entry((head)->next, typeof(*pos), member); \ |
| 479 | prefetch(pos->member.next), &pos->member != (head); \ | 482 | prefetch(rcu_dereference(pos)->member.next), \ |
| 480 | pos = rcu_dereference(list_entry(pos->member.next, \ | 483 | &pos->member != (head); \ |
| 481 | typeof(*pos), member))) | 484 | pos = list_entry(pos->member.next, typeof(*pos), member)) |
| 482 | 485 | ||
| 483 | 486 | ||
| 484 | /** | 487 | /** |
| @@ -492,8 +495,9 @@ static inline void list_splice_init(struct list_head *list, | |||
| 492 | * as long as the traversal is guarded by rcu_read_lock(). | 495 | * as long as the traversal is guarded by rcu_read_lock(). |
| 493 | */ | 496 | */ |
| 494 | #define list_for_each_continue_rcu(pos, head) \ | 497 | #define list_for_each_continue_rcu(pos, head) \ |
| 495 | for ((pos) = (pos)->next; prefetch((pos)->next), (pos) != (head); \ | 498 | for ((pos) = (pos)->next; \ |
| 496 | (pos) = rcu_dereference((pos)->next)) | 499 | prefetch(rcu_dereference((pos))->next), (pos) != (head); \ |
| 500 | (pos) = (pos)->next) | ||
| 497 | 501 | ||
| 498 | /* | 502 | /* |
| 499 | * Double linked lists with a single pointer list head. | 503 | * Double linked lists with a single pointer list head. |
| @@ -696,8 +700,9 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev, | |||
| 696 | pos = n) | 700 | pos = n) |
| 697 | 701 | ||
| 698 | #define hlist_for_each_rcu(pos, head) \ | 702 | #define hlist_for_each_rcu(pos, head) \ |
| 699 | for ((pos) = (head)->first; pos && ({ prefetch((pos)->next); 1; }); \ | 703 | for ((pos) = (head)->first; \ |
| 700 | (pos) = rcu_dereference((pos)->next)) | 704 | rcu_dereference((pos)) && ({ prefetch((pos)->next); 1; }); \ |
| 705 | (pos) = (pos)->next) | ||
| 701 | 706 | ||
| 702 | /** | 707 | /** |
| 703 | * hlist_for_each_entry - iterate over list of given type | 708 | * hlist_for_each_entry - iterate over list of given type |
| @@ -762,9 +767,9 @@ static inline void hlist_add_after_rcu(struct hlist_node *prev, | |||
| 762 | */ | 767 | */ |
| 763 | #define hlist_for_each_entry_rcu(tpos, pos, head, member) \ | 768 | #define hlist_for_each_entry_rcu(tpos, pos, head, member) \ |
| 764 | for (pos = (head)->first; \ | 769 | for (pos = (head)->first; \ |
| 765 | pos && ({ prefetch(pos->next); 1;}) && \ | 770 | rcu_dereference(pos) && ({ prefetch(pos->next); 1;}) && \ |
| 766 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ | 771 | ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \ |
| 767 | pos = rcu_dereference(pos->next)) | 772 | pos = pos->next) |
| 768 | 773 | ||
| 769 | #else | 774 | #else |
| 770 | #warning "don't include kernel headers in userspace" | 775 | #warning "don't include kernel headers in userspace" |
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 4e65eb44adfd..70191a5a148f 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
| @@ -94,6 +94,7 @@ struct rcu_data { | |||
| 94 | long batch; /* Batch # for current RCU batch */ | 94 | long batch; /* Batch # for current RCU batch */ |
| 95 | struct rcu_head *nxtlist; | 95 | struct rcu_head *nxtlist; |
| 96 | struct rcu_head **nxttail; | 96 | struct rcu_head **nxttail; |
| 97 | long count; /* # of queued items */ | ||
| 97 | struct rcu_head *curlist; | 98 | struct rcu_head *curlist; |
| 98 | struct rcu_head **curtail; | 99 | struct rcu_head **curtail; |
| 99 | struct rcu_head *donelist; | 100 | struct rcu_head *donelist; |
diff --git a/kernel/posix-cpu-timers.c b/kernel/posix-cpu-timers.c index ad85d3f0dcc4..7a51a5597c33 100644 --- a/kernel/posix-cpu-timers.c +++ b/kernel/posix-cpu-timers.c | |||
| @@ -424,6 +424,7 @@ static void cleanup_timers(struct list_head *head, | |||
| 424 | cputime_t ptime = cputime_add(utime, stime); | 424 | cputime_t ptime = cputime_add(utime, stime); |
| 425 | 425 | ||
| 426 | list_for_each_entry_safe(timer, next, head, entry) { | 426 | list_for_each_entry_safe(timer, next, head, entry) { |
| 427 | put_task_struct(timer->task); | ||
| 427 | timer->task = NULL; | 428 | timer->task = NULL; |
| 428 | list_del_init(&timer->entry); | 429 | list_del_init(&timer->entry); |
| 429 | if (cputime_lt(timer->expires.cpu, ptime)) { | 430 | if (cputime_lt(timer->expires.cpu, ptime)) { |
| @@ -436,6 +437,7 @@ static void cleanup_timers(struct list_head *head, | |||
| 436 | 437 | ||
| 437 | ++head; | 438 | ++head; |
| 438 | list_for_each_entry_safe(timer, next, head, entry) { | 439 | list_for_each_entry_safe(timer, next, head, entry) { |
| 440 | put_task_struct(timer->task); | ||
| 439 | timer->task = NULL; | 441 | timer->task = NULL; |
| 440 | list_del_init(&timer->entry); | 442 | list_del_init(&timer->entry); |
| 441 | if (cputime_lt(timer->expires.cpu, utime)) { | 443 | if (cputime_lt(timer->expires.cpu, utime)) { |
| @@ -448,6 +450,7 @@ static void cleanup_timers(struct list_head *head, | |||
| 448 | 450 | ||
| 449 | ++head; | 451 | ++head; |
| 450 | list_for_each_entry_safe(timer, next, head, entry) { | 452 | list_for_each_entry_safe(timer, next, head, entry) { |
| 453 | put_task_struct(timer->task); | ||
| 451 | timer->task = NULL; | 454 | timer->task = NULL; |
| 452 | list_del_init(&timer->entry); | 455 | list_del_init(&timer->entry); |
| 453 | if (timer->expires.sched < sched_time) { | 456 | if (timer->expires.sched < sched_time) { |
diff --git a/kernel/rcupdate.c b/kernel/rcupdate.c index bef3b6901b76..2559d4b8f23f 100644 --- a/kernel/rcupdate.c +++ b/kernel/rcupdate.c | |||
| @@ -71,7 +71,7 @@ DEFINE_PER_CPU(struct rcu_data, rcu_bh_data) = { 0L }; | |||
| 71 | 71 | ||
| 72 | /* Fake initialization required by compiler */ | 72 | /* Fake initialization required by compiler */ |
| 73 | static DEFINE_PER_CPU(struct tasklet_struct, rcu_tasklet) = {NULL}; | 73 | static DEFINE_PER_CPU(struct tasklet_struct, rcu_tasklet) = {NULL}; |
| 74 | static int maxbatch = 10; | 74 | static int maxbatch = 10000; |
| 75 | 75 | ||
| 76 | #ifndef __HAVE_ARCH_CMPXCHG | 76 | #ifndef __HAVE_ARCH_CMPXCHG |
| 77 | /* | 77 | /* |
| @@ -109,6 +109,10 @@ void fastcall call_rcu(struct rcu_head *head, | |||
| 109 | rdp = &__get_cpu_var(rcu_data); | 109 | rdp = &__get_cpu_var(rcu_data); |
| 110 | *rdp->nxttail = head; | 110 | *rdp->nxttail = head; |
| 111 | rdp->nxttail = &head->next; | 111 | rdp->nxttail = &head->next; |
| 112 | |||
| 113 | if (unlikely(++rdp->count > 10000)) | ||
| 114 | set_need_resched(); | ||
| 115 | |||
| 112 | local_irq_restore(flags); | 116 | local_irq_restore(flags); |
| 113 | } | 117 | } |
| 114 | 118 | ||
| @@ -140,6 +144,12 @@ void fastcall call_rcu_bh(struct rcu_head *head, | |||
| 140 | rdp = &__get_cpu_var(rcu_bh_data); | 144 | rdp = &__get_cpu_var(rcu_bh_data); |
| 141 | *rdp->nxttail = head; | 145 | *rdp->nxttail = head; |
| 142 | rdp->nxttail = &head->next; | 146 | rdp->nxttail = &head->next; |
| 147 | rdp->count++; | ||
| 148 | /* | ||
| 149 | * Should we directly call rcu_do_batch() here ? | ||
| 150 | * if (unlikely(rdp->count > 10000)) | ||
| 151 | * rcu_do_batch(rdp); | ||
| 152 | */ | ||
| 143 | local_irq_restore(flags); | 153 | local_irq_restore(flags); |
| 144 | } | 154 | } |
| 145 | 155 | ||
| @@ -157,6 +167,7 @@ static void rcu_do_batch(struct rcu_data *rdp) | |||
| 157 | next = rdp->donelist = list->next; | 167 | next = rdp->donelist = list->next; |
| 158 | list->func(list); | 168 | list->func(list); |
| 159 | list = next; | 169 | list = next; |
| 170 | rdp->count--; | ||
| 160 | if (++count >= maxbatch) | 171 | if (++count >= maxbatch) |
| 161 | break; | 172 | break; |
| 162 | } | 173 | } |
diff --git a/lib/.gitignore b/lib/.gitignore new file mode 100644 index 000000000000..3bef1ea94c99 --- /dev/null +++ b/lib/.gitignore | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | # | ||
| 2 | # Generated files | ||
| 3 | # | ||
| 4 | gen_crc32table | ||
| 5 | crc32table.h | ||
| 6 | |||
diff --git a/scripts/.gitignore b/scripts/.gitignore new file mode 100644 index 000000000000..b46d68bb9e17 --- /dev/null +++ b/scripts/.gitignore | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | conmakehash | ||
| 2 | kallsyms | ||
| 3 | pnmtologo | ||
| 4 | |||
diff --git a/scripts/basic/.gitignore b/scripts/basic/.gitignore new file mode 100644 index 000000000000..7304e19782c7 --- /dev/null +++ b/scripts/basic/.gitignore | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | fixdep | ||
| 2 | split-include | ||
| 3 | docproc | ||
diff --git a/scripts/kconfig/.gitignore b/scripts/kconfig/.gitignore new file mode 100644 index 000000000000..2dac3442e0ac --- /dev/null +++ b/scripts/kconfig/.gitignore | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | # | ||
| 2 | # Generated files | ||
| 3 | # | ||
| 4 | config* | ||
| 5 | lex.*.c | ||
| 6 | *.tab.c | ||
| 7 | *.tab.h | ||
| 8 | |||
| 9 | # | ||
| 10 | # configuration programs | ||
| 11 | # | ||
| 12 | conf | ||
| 13 | mconf | ||
| 14 | qconf | ||
| 15 | gconf | ||
| 16 | kxgettext | ||
diff --git a/scripts/mod/.gitignore b/scripts/mod/.gitignore new file mode 100644 index 000000000000..e9b7abe7b95b --- /dev/null +++ b/scripts/mod/.gitignore | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | elfconfig.h | ||
| 2 | mk_elfconfig | ||
| 3 | modpost | ||
| 4 | |||
diff --git a/usr/.gitignore b/usr/.gitignore new file mode 100644 index 000000000000..be186a82e8d0 --- /dev/null +++ b/usr/.gitignore | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | # | ||
| 2 | # Generated files | ||
| 3 | # | ||
| 4 | gen_init_cpio | ||
| 5 | initramfs_data.cpio | ||
| 6 | initramfs_data.cpio.gz | ||
| 7 | initramfs_list | ||
