diff options
| -rw-r--r-- | Documentation/power/pci.txt | 17 | ||||
| -rw-r--r-- | arch/i386/pci/common.c | 8 | ||||
| -rw-r--r-- | drivers/ide/Kconfig | 6 | ||||
| -rw-r--r-- | drivers/ide/ide-io.c | 32 | ||||
| -rw-r--r-- | drivers/ide/ide-iops.c | 11 | ||||
| -rw-r--r-- | drivers/ide/ide.c | 37 | ||||
| -rw-r--r-- | drivers/ide/pci/pdc202xx_new.c | 3 | ||||
| -rw-r--r-- | drivers/pci/pcie/portdrv_pci.c | 2 | ||||
| -rw-r--r-- | drivers/pci/quirks.c | 18 | ||||
| -rw-r--r-- | fs/9p/v9fs_vfs.h | 1 | ||||
| -rw-r--r-- | fs/9p/vfs_file.c | 4 | ||||
| -rw-r--r-- | include/linux/compiler.h | 4 | ||||
| -rw-r--r-- | include/linux/ide.h | 1 | ||||
| -rw-r--r-- | kernel/time/clockevents.c | 69 |
14 files changed, 95 insertions, 118 deletions
diff --git a/Documentation/power/pci.txt b/Documentation/power/pci.txt index c750f9f2e76e..b6a3cbf7e846 100644 --- a/Documentation/power/pci.txt +++ b/Documentation/power/pci.txt | |||
| @@ -102,31 +102,28 @@ pci_save_state | |||
| 102 | -------------- | 102 | -------------- |
| 103 | 103 | ||
| 104 | Usage: | 104 | Usage: |
| 105 | pci_save_state(dev, buffer); | 105 | pci_save_state(struct pci_dev *dev); |
| 106 | 106 | ||
| 107 | Description: | 107 | Description: |
| 108 | Save first 64 bytes of PCI config space. Buffer must be allocated by | 108 | Save first 64 bytes of PCI config space, along with any additional |
| 109 | caller. | 109 | PCI-Express or PCI-X information. |
| 110 | 110 | ||
| 111 | 111 | ||
| 112 | pci_restore_state | 112 | pci_restore_state |
| 113 | ----------------- | 113 | ----------------- |
| 114 | 114 | ||
| 115 | Usage: | 115 | Usage: |
| 116 | pci_restore_state(dev, buffer); | 116 | pci_restore_state(struct pci_dev *dev); |
| 117 | 117 | ||
| 118 | Description: | 118 | Description: |
| 119 | Restore previously saved config space. (First 64 bytes only); | 119 | Restore previously saved config space. |
| 120 | |||
| 121 | If buffer is NULL, then restore what information we know about the | ||
| 122 | device from bootup: BARs and interrupt line. | ||
| 123 | 120 | ||
| 124 | 121 | ||
| 125 | pci_set_power_state | 122 | pci_set_power_state |
| 126 | ------------------- | 123 | ------------------- |
| 127 | 124 | ||
| 128 | Usage: | 125 | Usage: |
| 129 | pci_set_power_state(dev, state); | 126 | pci_set_power_state(struct pci_dev *dev, pci_power_t state); |
| 130 | 127 | ||
| 131 | Description: | 128 | Description: |
| 132 | Transition device to low power state using PCI PM Capabilities | 129 | Transition device to low power state using PCI PM Capabilities |
| @@ -142,7 +139,7 @@ pci_enable_wake | |||
| 142 | --------------- | 139 | --------------- |
| 143 | 140 | ||
| 144 | Usage: | 141 | Usage: |
| 145 | pci_enable_wake(dev, state, enable); | 142 | pci_enable_wake(struct pci_dev *dev, pci_power_t state, int enable); |
| 146 | 143 | ||
| 147 | Description: | 144 | Description: |
| 148 | Enable device to generate PME# during low power state using PCI PM | 145 | Enable device to generate PME# during low power state using PCI PM |
diff --git a/arch/i386/pci/common.c b/arch/i386/pci/common.c index 1bb069372143..948436665385 100644 --- a/arch/i386/pci/common.c +++ b/arch/i386/pci/common.c | |||
| @@ -193,6 +193,14 @@ static struct dmi_system_id __devinitdata pciprobe_dmi_table[] = { | |||
| 193 | }, | 193 | }, |
| 194 | { | 194 | { |
| 195 | .callback = set_bf_sort, | 195 | .callback = set_bf_sort, |
| 196 | .ident = "Dell PowerEdge R900", | ||
| 197 | .matches = { | ||
| 198 | DMI_MATCH(DMI_SYS_VENDOR, "Dell"), | ||
| 199 | DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge R900"), | ||
| 200 | }, | ||
| 201 | }, | ||
| 202 | { | ||
| 203 | .callback = set_bf_sort, | ||
| 196 | .ident = "HP ProLiant BL20p G3", | 204 | .ident = "HP ProLiant BL20p G3", |
| 197 | .matches = { | 205 | .matches = { |
| 198 | DMI_MATCH(DMI_SYS_VENDOR, "HP"), | 206 | DMI_MATCH(DMI_SYS_VENDOR, "HP"), |
diff --git a/drivers/ide/Kconfig b/drivers/ide/Kconfig index 8f1fd017679b..ca2e4f830c39 100644 --- a/drivers/ide/Kconfig +++ b/drivers/ide/Kconfig | |||
| @@ -103,8 +103,10 @@ config BLK_DEV_IDE_SATA | |||
| 103 | ---help--- | 103 | ---help--- |
| 104 | There are two drivers for Serial ATA controllers. | 104 | There are two drivers for Serial ATA controllers. |
| 105 | 105 | ||
| 106 | The main driver, "libata", exists inside the SCSI subsystem | 106 | The main driver, "libata", uses the SCSI subsystem |
| 107 | and supports most modern SATA controllers. | 107 | and supports most modern SATA controllers. In order to use it |
| 108 | you may take a look at "Serial ATA (prod) and Parallel ATA | ||
| 109 | (experimental) drivers". | ||
| 108 | 110 | ||
| 109 | The IDE driver (which you are currently configuring) supports | 111 | The IDE driver (which you are currently configuring) supports |
| 110 | a few first-generation SATA controllers. | 112 | a few first-generation SATA controllers. |
diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c index c193553f6fe7..0e0280076fcd 100644 --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c | |||
| @@ -519,21 +519,24 @@ static ide_startstop_t ide_ata_error(ide_drive_t *drive, struct request *rq, u8 | |||
| 519 | if ((stat & DRQ_STAT) && rq_data_dir(rq) == READ && hwif->err_stops_fifo == 0) | 519 | if ((stat & DRQ_STAT) && rq_data_dir(rq) == READ && hwif->err_stops_fifo == 0) |
| 520 | try_to_flush_leftover_data(drive); | 520 | try_to_flush_leftover_data(drive); |
| 521 | 521 | ||
| 522 | if (rq->errors >= ERROR_MAX || blk_noretry_request(rq)) { | ||
| 523 | ide_kill_rq(drive, rq); | ||
| 524 | return ide_stopped; | ||
| 525 | } | ||
| 526 | |||
| 522 | if (hwif->INB(IDE_STATUS_REG) & (BUSY_STAT|DRQ_STAT)) | 527 | if (hwif->INB(IDE_STATUS_REG) & (BUSY_STAT|DRQ_STAT)) |
| 523 | /* force an abort */ | 528 | rq->errors |= ERROR_RESET; |
| 524 | hwif->OUTB(WIN_IDLEIMMEDIATE, IDE_COMMAND_REG); | ||
| 525 | 529 | ||
| 526 | if (rq->errors >= ERROR_MAX || blk_noretry_request(rq)) | 530 | if ((rq->errors & ERROR_RESET) == ERROR_RESET) { |
| 527 | ide_kill_rq(drive, rq); | ||
| 528 | else { | ||
| 529 | if ((rq->errors & ERROR_RESET) == ERROR_RESET) { | ||
| 530 | ++rq->errors; | ||
| 531 | return ide_do_reset(drive); | ||
| 532 | } | ||
| 533 | if ((rq->errors & ERROR_RECAL) == ERROR_RECAL) | ||
| 534 | drive->special.b.recalibrate = 1; | ||
| 535 | ++rq->errors; | 531 | ++rq->errors; |
| 532 | return ide_do_reset(drive); | ||
| 536 | } | 533 | } |
| 534 | |||
| 535 | if ((rq->errors & ERROR_RECAL) == ERROR_RECAL) | ||
| 536 | drive->special.b.recalibrate = 1; | ||
| 537 | |||
| 538 | ++rq->errors; | ||
| 539 | |||
| 537 | return ide_stopped; | 540 | return ide_stopped; |
| 538 | } | 541 | } |
| 539 | 542 | ||
| @@ -1025,6 +1028,13 @@ static ide_startstop_t start_request (ide_drive_t *drive, struct request *rq) | |||
| 1025 | if (!drive->special.all) { | 1028 | if (!drive->special.all) { |
| 1026 | ide_driver_t *drv; | 1029 | ide_driver_t *drv; |
| 1027 | 1030 | ||
| 1031 | /* | ||
| 1032 | * We reset the drive so we need to issue a SETFEATURES. | ||
| 1033 | * Do it _after_ do_special() restored device parameters. | ||
| 1034 | */ | ||
| 1035 | if (drive->current_speed == 0xff) | ||
| 1036 | ide_config_drive_speed(drive, drive->desired_speed); | ||
| 1037 | |||
| 1028 | if (rq->cmd_type == REQ_TYPE_ATA_CMD || | 1038 | if (rq->cmd_type == REQ_TYPE_ATA_CMD || |
| 1029 | rq->cmd_type == REQ_TYPE_ATA_TASK || | 1039 | rq->cmd_type == REQ_TYPE_ATA_TASK || |
| 1030 | rq->cmd_type == REQ_TYPE_ATA_TASKFILE) | 1040 | rq->cmd_type == REQ_TYPE_ATA_TASKFILE) |
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c index bd513f5a2323..1ee53a551c3a 100644 --- a/drivers/ide/ide-iops.c +++ b/drivers/ide/ide-iops.c | |||
| @@ -583,8 +583,12 @@ u8 eighty_ninty_three (ide_drive_t *drive) | |||
| 583 | if(!(drive->id->hw_config & 0x4000)) | 583 | if(!(drive->id->hw_config & 0x4000)) |
| 584 | return 0; | 584 | return 0; |
| 585 | #endif /* CONFIG_IDEDMA_IVB */ | 585 | #endif /* CONFIG_IDEDMA_IVB */ |
| 586 | if (!(drive->id->hw_config & 0x2000)) | 586 | /* |
| 587 | return 0; | 587 | * FIXME: |
| 588 | * - change master/slave IDENTIFY order | ||
| 589 | * - force bit13 (80c cable present) check | ||
| 590 | * (unless the slave device is pre-ATA3) | ||
| 591 | */ | ||
| 588 | return 1; | 592 | return 1; |
| 589 | } | 593 | } |
| 590 | 594 | ||
| @@ -1090,6 +1094,9 @@ static void pre_reset(ide_drive_t *drive) | |||
| 1090 | if (HWIF(drive)->pre_reset != NULL) | 1094 | if (HWIF(drive)->pre_reset != NULL) |
| 1091 | HWIF(drive)->pre_reset(drive); | 1095 | HWIF(drive)->pre_reset(drive); |
| 1092 | 1096 | ||
| 1097 | if (drive->current_speed != 0xff) | ||
| 1098 | drive->desired_speed = drive->current_speed; | ||
| 1099 | drive->current_speed = 0xff; | ||
| 1093 | } | 1100 | } |
| 1094 | 1101 | ||
| 1095 | /* | 1102 | /* |
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c index 695610f0e3e4..a6f098fda884 100644 --- a/drivers/ide/ide.c +++ b/drivers/ide/ide.c | |||
| @@ -1124,17 +1124,40 @@ static int set_io_32bit(ide_drive_t *drive, int arg) | |||
| 1124 | static int set_using_dma (ide_drive_t *drive, int arg) | 1124 | static int set_using_dma (ide_drive_t *drive, int arg) |
| 1125 | { | 1125 | { |
| 1126 | #ifdef CONFIG_BLK_DEV_IDEDMA | 1126 | #ifdef CONFIG_BLK_DEV_IDEDMA |
| 1127 | ide_hwif_t *hwif = drive->hwif; | ||
| 1128 | int err = -EPERM; | ||
| 1129 | |||
| 1127 | if (!drive->id || !(drive->id->capability & 1)) | 1130 | if (!drive->id || !(drive->id->capability & 1)) |
| 1128 | return -EPERM; | 1131 | goto out; |
| 1129 | if (HWIF(drive)->ide_dma_check == NULL) | 1132 | |
| 1130 | return -EPERM; | 1133 | if (hwif->ide_dma_check == NULL) |
| 1134 | goto out; | ||
| 1135 | |||
| 1136 | err = -EBUSY; | ||
| 1137 | if (ide_spin_wait_hwgroup(drive)) | ||
| 1138 | goto out; | ||
| 1139 | /* | ||
| 1140 | * set ->busy flag, unlock and let it ride | ||
| 1141 | */ | ||
| 1142 | hwif->hwgroup->busy = 1; | ||
| 1143 | spin_unlock_irq(&ide_lock); | ||
| 1144 | |||
| 1145 | err = 0; | ||
| 1146 | |||
| 1131 | if (arg) { | 1147 | if (arg) { |
| 1132 | if (ide_set_dma(drive)) | 1148 | if (ide_set_dma(drive) || hwif->ide_dma_on(drive)) |
| 1133 | return -EIO; | 1149 | err = -EIO; |
| 1134 | if (HWIF(drive)->ide_dma_on(drive)) return -EIO; | ||
| 1135 | } else | 1150 | } else |
| 1136 | ide_dma_off(drive); | 1151 | ide_dma_off(drive); |
| 1137 | return 0; | 1152 | |
| 1153 | /* | ||
| 1154 | * lock, clear ->busy flag and unlock before leaving | ||
| 1155 | */ | ||
| 1156 | spin_lock_irq(&ide_lock); | ||
| 1157 | hwif->hwgroup->busy = 0; | ||
| 1158 | spin_unlock_irq(&ide_lock); | ||
| 1159 | out: | ||
| 1160 | return err; | ||
| 1138 | #else | 1161 | #else |
| 1139 | return -EPERM; | 1162 | return -EPERM; |
| 1140 | #endif | 1163 | #endif |
diff --git a/drivers/ide/pci/pdc202xx_new.c b/drivers/ide/pci/pdc202xx_new.c index 6ceb25bc5a7b..ace98929cc3d 100644 --- a/drivers/ide/pci/pdc202xx_new.c +++ b/drivers/ide/pci/pdc202xx_new.c | |||
| @@ -255,7 +255,7 @@ static int config_chipset_for_dma(ide_drive_t *drive) | |||
| 255 | printk(KERN_WARNING "%s reduced to Ultra33 mode.\n", drive->name); | 255 | printk(KERN_WARNING "%s reduced to Ultra33 mode.\n", drive->name); |
| 256 | } | 256 | } |
| 257 | 257 | ||
| 258 | if (drive->media != ide_disk) | 258 | if (drive->media != ide_disk && drive->media != ide_cdrom) |
| 259 | return 0; | 259 | return 0; |
| 260 | 260 | ||
| 261 | if (id->capability & 4) { | 261 | if (id->capability & 4) { |
| @@ -545,6 +545,7 @@ static void __devinit init_hwif_pdc202new(ide_hwif_t *hwif) | |||
| 545 | 545 | ||
| 546 | hwif->drives[0].autotune = hwif->drives[1].autotune = 1; | 546 | hwif->drives[0].autotune = hwif->drives[1].autotune = 1; |
| 547 | 547 | ||
| 548 | hwif->atapi_dma = 1; | ||
| 548 | hwif->ultra_mask = 0x7f; | 549 | hwif->ultra_mask = 0x7f; |
| 549 | hwif->mwdma_mask = 0x07; | 550 | hwif->mwdma_mask = 0x07; |
| 550 | 551 | ||
diff --git a/drivers/pci/pcie/portdrv_pci.c b/drivers/pci/pcie/portdrv_pci.c index 0be5a0b30725..df383645e366 100644 --- a/drivers/pci/pcie/portdrv_pci.c +++ b/drivers/pci/pcie/portdrv_pci.c | |||
| @@ -93,7 +93,7 @@ static int __devinit pcie_portdrv_probe (struct pci_dev *dev, | |||
| 93 | if (!dev->irq && dev->pin) { | 93 | if (!dev->irq && dev->pin) { |
| 94 | printk(KERN_WARNING | 94 | printk(KERN_WARNING |
| 95 | "%s->Dev[%04x:%04x] has invalid IRQ. Check vendor BIOS\n", | 95 | "%s->Dev[%04x:%04x] has invalid IRQ. Check vendor BIOS\n", |
| 96 | __FUNCTION__, dev->device, dev->vendor); | 96 | __FUNCTION__, dev->vendor, dev->device); |
| 97 | } | 97 | } |
| 98 | if (pcie_port_device_register(dev)) { | 98 | if (pcie_port_device_register(dev)) { |
| 99 | pci_disable_device(dev); | 99 | pci_disable_device(dev); |
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 7f94fc098cd3..65d6f23ead41 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
| @@ -963,6 +963,13 @@ DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8237, k8t_sound_ho | |||
| 963 | * bridge. Unfortunately, this device has no subvendor/subdevice ID. So it | 963 | * bridge. Unfortunately, this device has no subvendor/subdevice ID. So it |
| 964 | * becomes necessary to do this tweak in two steps -- I've chosen the Host | 964 | * becomes necessary to do this tweak in two steps -- I've chosen the Host |
| 965 | * bridge as trigger. | 965 | * bridge as trigger. |
| 966 | * | ||
| 967 | * Note that we used to unhide the SMBus that way on Toshiba laptops | ||
| 968 | * (Satellite A40 and Tecra M2) but then found that the thermal management | ||
| 969 | * was done by SMM code, which could cause unsynchronized concurrent | ||
| 970 | * accesses to the SMBus registers, with potentially bad effects. Thus you | ||
| 971 | * should be very careful when adding new entries: if SMM is accessing the | ||
| 972 | * Intel SMBus, this is a very good reason to leave it hidden. | ||
| 966 | */ | 973 | */ |
| 967 | static int asus_hides_smbus; | 974 | static int asus_hides_smbus; |
| 968 | 975 | ||
| @@ -1040,17 +1047,6 @@ static void __init asus_hides_smbus_hostbridge(struct pci_dev *dev) | |||
| 1040 | case 0x099c: /* HP Compaq nx6110 */ | 1047 | case 0x099c: /* HP Compaq nx6110 */ |
| 1041 | asus_hides_smbus = 1; | 1048 | asus_hides_smbus = 1; |
| 1042 | } | 1049 | } |
| 1043 | } else if (unlikely(dev->subsystem_vendor == PCI_VENDOR_ID_TOSHIBA)) { | ||
| 1044 | if (dev->device == PCI_DEVICE_ID_INTEL_82855GM_HB) | ||
| 1045 | switch(dev->subsystem_device) { | ||
| 1046 | case 0x0001: /* Toshiba Satellite A40 */ | ||
| 1047 | asus_hides_smbus = 1; | ||
| 1048 | } | ||
| 1049 | else if (dev->device == PCI_DEVICE_ID_INTEL_82855PM_HB) | ||
| 1050 | switch(dev->subsystem_device) { | ||
| 1051 | case 0x0001: /* Toshiba Tecra M2 */ | ||
| 1052 | asus_hides_smbus = 1; | ||
| 1053 | } | ||
| 1054 | } else if (unlikely(dev->subsystem_vendor == PCI_VENDOR_ID_SAMSUNG)) { | 1050 | } else if (unlikely(dev->subsystem_vendor == PCI_VENDOR_ID_SAMSUNG)) { |
| 1055 | if (dev->device == PCI_DEVICE_ID_INTEL_82855PM_HB) | 1051 | if (dev->device == PCI_DEVICE_ID_INTEL_82855PM_HB) |
| 1056 | switch(dev->subsystem_device) { | 1052 | switch(dev->subsystem_device) { |
diff --git a/fs/9p/v9fs_vfs.h b/fs/9p/v9fs_vfs.h index 8ada4c5c5d70..6a82d39dc498 100644 --- a/fs/9p/v9fs_vfs.h +++ b/fs/9p/v9fs_vfs.h | |||
| @@ -40,7 +40,6 @@ | |||
| 40 | extern struct file_system_type v9fs_fs_type; | 40 | extern struct file_system_type v9fs_fs_type; |
| 41 | extern const struct address_space_operations v9fs_addr_operations; | 41 | extern const struct address_space_operations v9fs_addr_operations; |
| 42 | extern const struct file_operations v9fs_file_operations; | 42 | extern const struct file_operations v9fs_file_operations; |
| 43 | extern const struct file_operations v9fs_cached_file_operations; | ||
| 44 | extern const struct file_operations v9fs_dir_operations; | 43 | extern const struct file_operations v9fs_dir_operations; |
| 45 | extern struct dentry_operations v9fs_dentry_operations; | 44 | extern struct dentry_operations v9fs_dentry_operations; |
| 46 | extern struct dentry_operations v9fs_cached_dentry_operations; | 45 | extern struct dentry_operations v9fs_cached_dentry_operations; |
diff --git a/fs/9p/vfs_file.c b/fs/9p/vfs_file.c index 653dfa5b2531..c7b677253843 100644 --- a/fs/9p/vfs_file.c +++ b/fs/9p/vfs_file.c | |||
| @@ -42,6 +42,8 @@ | |||
| 42 | #include "v9fs_vfs.h" | 42 | #include "v9fs_vfs.h" |
| 43 | #include "fid.h" | 43 | #include "fid.h" |
| 44 | 44 | ||
| 45 | static const struct file_operations v9fs_cached_file_operations; | ||
| 46 | |||
| 45 | /** | 47 | /** |
| 46 | * v9fs_file_open - open a file (or directory) | 48 | * v9fs_file_open - open a file (or directory) |
| 47 | * @inode: inode to be opened | 49 | * @inode: inode to be opened |
| @@ -245,7 +247,7 @@ v9fs_file_write(struct file *filp, const char __user * data, | |||
| 245 | return total; | 247 | return total; |
| 246 | } | 248 | } |
| 247 | 249 | ||
| 248 | const struct file_operations v9fs_cached_file_operations = { | 250 | static const struct file_operations v9fs_cached_file_operations = { |
| 249 | .llseek = generic_file_llseek, | 251 | .llseek = generic_file_llseek, |
| 250 | .read = do_sync_read, | 252 | .read = do_sync_read, |
| 251 | .aio_read = generic_file_aio_read, | 253 | .aio_read = generic_file_aio_read, |
diff --git a/include/linux/compiler.h b/include/linux/compiler.h index aca66984aafd..3b6949b41745 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h | |||
| @@ -15,8 +15,8 @@ | |||
| 15 | # define __acquire(x) __context__(x,1) | 15 | # define __acquire(x) __context__(x,1) |
| 16 | # define __release(x) __context__(x,-1) | 16 | # define __release(x) __context__(x,-1) |
| 17 | # define __cond_lock(x,c) ((c) ? ({ __acquire(x); 1; }) : 0) | 17 | # define __cond_lock(x,c) ((c) ? ({ __acquire(x); 1; }) : 0) |
| 18 | extern void __chk_user_ptr(void __user *); | 18 | extern void __chk_user_ptr(const void __user *); |
| 19 | extern void __chk_io_ptr(void __iomem *); | 19 | extern void __chk_io_ptr(const void __iomem *); |
| 20 | #else | 20 | #else |
| 21 | # define __user | 21 | # define __user |
| 22 | # define __kernel | 22 | # define __kernel |
diff --git a/include/linux/ide.h b/include/linux/ide.h index 34f2676b3c62..58564a199862 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h | |||
| @@ -615,6 +615,7 @@ typedef struct ide_drive_s { | |||
| 615 | u8 init_speed; /* transfer rate set at boot */ | 615 | u8 init_speed; /* transfer rate set at boot */ |
| 616 | u8 pio_speed; /* unused by core, used by some drivers for fallback from DMA */ | 616 | u8 pio_speed; /* unused by core, used by some drivers for fallback from DMA */ |
| 617 | u8 current_speed; /* current transfer rate set */ | 617 | u8 current_speed; /* current transfer rate set */ |
| 618 | u8 desired_speed; /* desired transfer rate set */ | ||
| 618 | u8 dn; /* now wide spread use */ | 619 | u8 dn; /* now wide spread use */ |
| 619 | u8 wcache; /* status of write cache */ | 620 | u8 wcache; /* status of write cache */ |
| 620 | u8 acoustic; /* acoustic management */ | 621 | u8 acoustic; /* acoustic management */ |
diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c index 67932ea78c17..76212b2a99de 100644 --- a/kernel/time/clockevents.c +++ b/kernel/time/clockevents.c | |||
| @@ -274,72 +274,3 @@ void clockevents_notify(unsigned long reason, void *arg) | |||
| 274 | } | 274 | } |
| 275 | EXPORT_SYMBOL_GPL(clockevents_notify); | 275 | EXPORT_SYMBOL_GPL(clockevents_notify); |
| 276 | 276 | ||
| 277 | #ifdef CONFIG_SYSFS | ||
| 278 | |||
| 279 | /** | ||
| 280 | * clockevents_show_registered - sysfs interface for listing clockevents | ||
| 281 | * @dev: unused | ||
| 282 | * @buf: char buffer to be filled with clock events list | ||
| 283 | * | ||
| 284 | * Provides sysfs interface for listing registered clock event devices | ||
| 285 | */ | ||
| 286 | static ssize_t clockevents_show_registered(struct sys_device *dev, char *buf) | ||
| 287 | { | ||
| 288 | struct list_head *tmp; | ||
| 289 | char *p = buf; | ||
| 290 | int cpu; | ||
| 291 | |||
| 292 | spin_lock(&clockevents_lock); | ||
| 293 | |||
| 294 | list_for_each(tmp, &clockevent_devices) { | ||
| 295 | struct clock_event_device *ce; | ||
| 296 | |||
| 297 | ce = list_entry(tmp, struct clock_event_device, list); | ||
| 298 | p += sprintf(p, "%-20s F:%04x M:%d", ce->name, | ||
| 299 | ce->features, ce->mode); | ||
| 300 | p += sprintf(p, " C:"); | ||
| 301 | if (!cpus_equal(ce->cpumask, cpu_possible_map)) { | ||
| 302 | for_each_cpu_mask(cpu, ce->cpumask) | ||
| 303 | p += sprintf(p, " %d", cpu); | ||
| 304 | } else { | ||
| 305 | /* | ||
| 306 | * FIXME: Add the cpu which is handling this sucker | ||
| 307 | */ | ||
| 308 | } | ||
| 309 | p += sprintf(p, "\n"); | ||
| 310 | } | ||
| 311 | |||
| 312 | spin_unlock(&clockevents_lock); | ||
| 313 | |||
| 314 | return p - buf; | ||
| 315 | } | ||
| 316 | |||
| 317 | /* | ||
| 318 | * Sysfs setup bits: | ||
| 319 | */ | ||
| 320 | static SYSDEV_ATTR(registered, 0600, | ||
| 321 | clockevents_show_registered, NULL); | ||
| 322 | |||
| 323 | static struct sysdev_class clockevents_sysclass = { | ||
| 324 | set_kset_name("clockevents"), | ||
| 325 | }; | ||
| 326 | |||
| 327 | static struct sys_device clockevents_sys_device = { | ||
| 328 | .id = 0, | ||
| 329 | .cls = &clockevents_sysclass, | ||
| 330 | }; | ||
| 331 | |||
| 332 | static int __init clockevents_sysfs_init(void) | ||
| 333 | { | ||
| 334 | int error = sysdev_class_register(&clockevents_sysclass); | ||
| 335 | |||
| 336 | if (!error) | ||
| 337 | error = sysdev_register(&clockevents_sys_device); | ||
| 338 | if (!error) | ||
| 339 | error = sysdev_create_file( | ||
| 340 | &clockevents_sys_device, | ||
| 341 | &attr_registered); | ||
| 342 | return error; | ||
| 343 | } | ||
| 344 | device_initcall(clockevents_sysfs_init); | ||
| 345 | #endif | ||
