diff options
83 files changed, 763 insertions, 501 deletions
diff --git a/Documentation/driver-model/interface.txt b/Documentation/driver-model/interface.txt deleted file mode 100644 index c66912bfe866..000000000000 --- a/Documentation/driver-model/interface.txt +++ /dev/null | |||
| @@ -1,129 +0,0 @@ | |||
| 1 | |||
| 2 | Device Interfaces | ||
| 3 | |||
| 4 | Introduction | ||
| 5 | ~~~~~~~~~~~~ | ||
| 6 | |||
| 7 | Device interfaces are the logical interfaces of device classes that correlate | ||
| 8 | directly to userspace interfaces, like device nodes. | ||
| 9 | |||
| 10 | Each device class may have multiple interfaces through which you can | ||
| 11 | access the same device. An input device may support the mouse interface, | ||
| 12 | the 'evdev' interface, and the touchscreen interface. A SCSI disk would | ||
| 13 | support the disk interface, the SCSI generic interface, and possibly a raw | ||
| 14 | device interface. | ||
| 15 | |||
| 16 | Device interfaces are registered with the class they belong to. As devices | ||
| 17 | are added to the class, they are added to each interface registered with | ||
| 18 | the class. The interface is responsible for determining whether the device | ||
| 19 | supports the interface or not. | ||
| 20 | |||
| 21 | |||
| 22 | Programming Interface | ||
| 23 | ~~~~~~~~~~~~~~~~~~~~~ | ||
| 24 | |||
| 25 | struct device_interface { | ||
| 26 | char * name; | ||
| 27 | rwlock_t lock; | ||
| 28 | u32 devnum; | ||
| 29 | struct device_class * devclass; | ||
| 30 | |||
| 31 | struct list_head node; | ||
| 32 | struct driver_dir_entry dir; | ||
| 33 | |||
| 34 | int (*add_device)(struct device *); | ||
| 35 | int (*add_device)(struct intf_data *); | ||
| 36 | }; | ||
| 37 | |||
| 38 | int interface_register(struct device_interface *); | ||
| 39 | void interface_unregister(struct device_interface *); | ||
| 40 | |||
| 41 | |||
| 42 | An interface must specify the device class it belongs to. It is added | ||
| 43 | to that class's list of interfaces on registration. | ||
| 44 | |||
| 45 | |||
| 46 | Interfaces can be added to a device class at any time. Whenever it is | ||
| 47 | added, each device in the class is passed to the interface's | ||
| 48 | add_device callback. When an interface is removed, each device is | ||
| 49 | removed from the interface. | ||
| 50 | |||
| 51 | |||
| 52 | Devices | ||
| 53 | ~~~~~~~ | ||
| 54 | Once a device is added to a device class, it is added to each | ||
| 55 | interface that is registered with the device class. The class | ||
| 56 | is expected to place a class-specific data structure in | ||
| 57 | struct device::class_data. The interface can use that (along with | ||
| 58 | other fields of struct device) to determine whether or not the driver | ||
| 59 | and/or device support that particular interface. | ||
| 60 | |||
| 61 | |||
| 62 | Data | ||
| 63 | ~~~~ | ||
| 64 | |||
| 65 | struct intf_data { | ||
| 66 | struct list_head node; | ||
| 67 | struct device_interface * intf; | ||
| 68 | struct device * dev; | ||
| 69 | u32 intf_num; | ||
| 70 | }; | ||
| 71 | |||
| 72 | int interface_add_data(struct interface_data *); | ||
| 73 | |||
| 74 | The interface is responsible for allocating and initializing a struct | ||
| 75 | intf_data and calling interface_add_data() to add it to the device's list | ||
| 76 | of interfaces it belongs to. This list will be iterated over when the device | ||
| 77 | is removed from the class (instead of all possible interfaces for a class). | ||
| 78 | This structure should probably be embedded in whatever per-device data | ||
| 79 | structure the interface is allocating anyway. | ||
| 80 | |||
| 81 | Devices are enumerated within the interface. This happens in interface_add_data() | ||
| 82 | and the enumerated value is stored in the struct intf_data for that device. | ||
| 83 | |||
| 84 | sysfs | ||
| 85 | ~~~~~ | ||
| 86 | Each interface is given a directory in the directory of the device | ||
| 87 | class it belongs to: | ||
| 88 | |||
| 89 | Interfaces get a directory in the class's directory as well: | ||
| 90 | |||
| 91 | class/ | ||
| 92 | `-- input | ||
| 93 | |-- devices | ||
| 94 | |-- drivers | ||
| 95 | |-- mouse | ||
| 96 | `-- evdev | ||
| 97 | |||
| 98 | When a device is added to the interface, a symlink is created that points | ||
| 99 | to the device's directory in the physical hierarchy: | ||
| 100 | |||
| 101 | class/ | ||
| 102 | `-- input | ||
| 103 | |-- devices | ||
| 104 | | `-- 1 -> ../../../root/pci0/00:1f.0/usb_bus/00:1f.2-1:0/ | ||
| 105 | |-- drivers | ||
| 106 | | `-- usb:usb_mouse -> ../../../bus/drivers/usb_mouse/ | ||
| 107 | |-- mouse | ||
| 108 | | `-- 1 -> ../../../root/pci0/00:1f.0/usb_bus/00:1f.2-1:0/ | ||
| 109 | `-- evdev | ||
| 110 | `-- 1 -> ../../../root/pci0/00:1f.0/usb_bus/00:1f.2-1:0/ | ||
| 111 | |||
| 112 | |||
| 113 | Future Plans | ||
| 114 | ~~~~~~~~~~~~ | ||
| 115 | A device interface is correlated directly with a userspace interface | ||
| 116 | for a device, specifically a device node. For instance, a SCSI disk | ||
| 117 | exposes at least two interfaces to userspace: the standard SCSI disk | ||
| 118 | interface and the SCSI generic interface. It might also export a raw | ||
| 119 | device interface. | ||
| 120 | |||
| 121 | Many interfaces have a major number associated with them and each | ||
| 122 | device gets a minor number. Or, multiple interfaces might share one | ||
| 123 | major number, and each will receive a range of minor numbers (like in | ||
| 124 | the case of input devices). | ||
| 125 | |||
| 126 | These major and minor numbers could be stored in the interface | ||
| 127 | structure. Major and minor allocations could happen when the interface | ||
| 128 | is registered with the class, or via a helper function. | ||
| 129 | |||
diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt index ed7e5efc06d8..55c28b79d8dc 100644 --- a/Documentation/filesystems/vfs.txt +++ b/Documentation/filesystems/vfs.txt | |||
| @@ -660,11 +660,10 @@ struct address_space_operations { | |||
| 660 | releasepage: releasepage is called on PagePrivate pages to indicate | 660 | releasepage: releasepage is called on PagePrivate pages to indicate |
| 661 | that the page should be freed if possible. ->releasepage | 661 | that the page should be freed if possible. ->releasepage |
| 662 | should remove any private data from the page and clear the | 662 | should remove any private data from the page and clear the |
| 663 | PagePrivate flag. It may also remove the page from the | 663 | PagePrivate flag. If releasepage() fails for some reason, it must |
| 664 | address_space. If this fails for some reason, it may indicate | 664 | indicate failure with a 0 return value. |
| 665 | failure with a 0 return value. | 665 | releasepage() is used in two distinct though related cases. The |
| 666 | This is used in two distinct though related cases. The first | 666 | first is when the VM finds a clean page with no active users and |
| 667 | is when the VM finds a clean page with no active users and | ||
| 668 | wants to make it a free page. If ->releasepage succeeds, the | 667 | wants to make it a free page. If ->releasepage succeeds, the |
| 669 | page will be removed from the address_space and become free. | 668 | page will be removed from the address_space and become free. |
| 670 | 669 | ||
diff --git a/MAINTAINERS b/MAINTAINERS index 3eafe9ee086e..1a1c27b9c557 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -2060,7 +2060,7 @@ F: Documentation/blockdev/drbd/ | |||
| 2060 | 2060 | ||
| 2061 | DRIVER CORE, KOBJECTS, DEBUGFS AND SYSFS | 2061 | DRIVER CORE, KOBJECTS, DEBUGFS AND SYSFS |
| 2062 | M: Greg Kroah-Hartman <gregkh@suse.de> | 2062 | M: Greg Kroah-Hartman <gregkh@suse.de> |
| 2063 | T: quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/ | 2063 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6.git |
| 2064 | S: Supported | 2064 | S: Supported |
| 2065 | F: Documentation/kobject.txt | 2065 | F: Documentation/kobject.txt |
| 2066 | F: drivers/base/ | 2066 | F: drivers/base/ |
| @@ -4064,9 +4064,8 @@ F: drivers/scsi/NCR_D700.* | |||
| 4064 | 4064 | ||
| 4065 | NETEFFECT IWARP RNIC DRIVER (IW_NES) | 4065 | NETEFFECT IWARP RNIC DRIVER (IW_NES) |
| 4066 | M: Faisal Latif <faisal.latif@intel.com> | 4066 | M: Faisal Latif <faisal.latif@intel.com> |
| 4067 | M: Chien Tung <chien.tin.tung@intel.com> | ||
| 4068 | L: linux-rdma@vger.kernel.org | 4067 | L: linux-rdma@vger.kernel.org |
| 4069 | W: http://www.neteffect.com | 4068 | W: http://www.intel.com/Products/Server/Adapters/Server-Cluster/Server-Cluster-overview.htm |
| 4070 | S: Supported | 4069 | S: Supported |
| 4071 | F: drivers/infiniband/hw/nes/ | 4070 | F: drivers/infiniband/hw/nes/ |
| 4072 | 4071 | ||
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c index a1feff9e59b6..44924e551fde 100644 --- a/arch/x86/xen/mmu.c +++ b/arch/x86/xen/mmu.c | |||
| @@ -2415,8 +2415,6 @@ void __init xen_init_mmu_ops(void) | |||
| 2415 | x86_init.paging.pagetable_setup_done = xen_pagetable_setup_done; | 2415 | x86_init.paging.pagetable_setup_done = xen_pagetable_setup_done; |
| 2416 | pv_mmu_ops = xen_mmu_ops; | 2416 | pv_mmu_ops = xen_mmu_ops; |
| 2417 | 2417 | ||
| 2418 | vmap_lazy_unmap = false; | ||
| 2419 | |||
| 2420 | memset(dummy_mapping, 0xff, PAGE_SIZE); | 2418 | memset(dummy_mapping, 0xff, PAGE_SIZE); |
| 2421 | } | 2419 | } |
| 2422 | 2420 | ||
diff --git a/drivers/gpio/cs5535-gpio.c b/drivers/gpio/cs5535-gpio.c index e23c06893d19..599f6c9e0fbf 100644 --- a/drivers/gpio/cs5535-gpio.c +++ b/drivers/gpio/cs5535-gpio.c | |||
| @@ -56,6 +56,18 @@ static struct cs5535_gpio_chip { | |||
| 56 | * registers, see include/linux/cs5535.h. | 56 | * registers, see include/linux/cs5535.h. |
| 57 | */ | 57 | */ |
| 58 | 58 | ||
| 59 | static void errata_outl(u32 val, unsigned long addr) | ||
| 60 | { | ||
| 61 | /* | ||
| 62 | * According to the CS5536 errata (#36), after suspend | ||
| 63 | * a write to the high bank GPIO register will clear all | ||
| 64 | * non-selected bits; the recommended workaround is a | ||
| 65 | * read-modify-write operation. | ||
| 66 | */ | ||
| 67 | val |= inl(addr); | ||
| 68 | outl(val, addr); | ||
| 69 | } | ||
| 70 | |||
| 59 | static void __cs5535_gpio_set(struct cs5535_gpio_chip *chip, unsigned offset, | 71 | static void __cs5535_gpio_set(struct cs5535_gpio_chip *chip, unsigned offset, |
| 60 | unsigned int reg) | 72 | unsigned int reg) |
| 61 | { | 73 | { |
| @@ -64,7 +76,7 @@ static void __cs5535_gpio_set(struct cs5535_gpio_chip *chip, unsigned offset, | |||
| 64 | outl(1 << offset, chip->base + reg); | 76 | outl(1 << offset, chip->base + reg); |
| 65 | else | 77 | else |
| 66 | /* high bank register */ | 78 | /* high bank register */ |
| 67 | outl(1 << (offset - 16), chip->base + 0x80 + reg); | 79 | errata_outl(1 << (offset - 16), chip->base + 0x80 + reg); |
| 68 | } | 80 | } |
| 69 | 81 | ||
| 70 | void cs5535_gpio_set(unsigned offset, unsigned int reg) | 82 | void cs5535_gpio_set(unsigned offset, unsigned int reg) |
| @@ -86,7 +98,7 @@ static void __cs5535_gpio_clear(struct cs5535_gpio_chip *chip, unsigned offset, | |||
| 86 | outl(1 << (offset + 16), chip->base + reg); | 98 | outl(1 << (offset + 16), chip->base + reg); |
| 87 | else | 99 | else |
| 88 | /* high bank register */ | 100 | /* high bank register */ |
| 89 | outl(1 << offset, chip->base + 0x80 + reg); | 101 | errata_outl(1 << offset, chip->base + 0x80 + reg); |
| 90 | } | 102 | } |
| 91 | 103 | ||
| 92 | void cs5535_gpio_clear(unsigned offset, unsigned int reg) | 104 | void cs5535_gpio_clear(unsigned offset, unsigned int reg) |
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index 515345b11ac9..88cb04e7962b 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c | |||
| @@ -1386,6 +1386,7 @@ static const struct hid_device_id hid_blacklist[] = { | |||
| 1386 | { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb651) }, | 1386 | { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb651) }, |
| 1387 | { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb653) }, | 1387 | { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb653) }, |
| 1388 | { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb654) }, | 1388 | { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb654) }, |
| 1389 | { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb65a) }, | ||
| 1389 | { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED, USB_DEVICE_ID_TOPSEED_CYBERLINK) }, | 1390 | { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED, USB_DEVICE_ID_TOPSEED_CYBERLINK) }, |
| 1390 | { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED2, USB_DEVICE_ID_TOPSEED2_RF_COMBO) }, | 1391 | { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED2, USB_DEVICE_ID_TOPSEED2_RF_COMBO) }, |
| 1391 | { HID_USB_DEVICE(USB_VENDOR_ID_TWINHAN, USB_DEVICE_ID_TWINHAN_IR_REMOTE) }, | 1392 | { HID_USB_DEVICE(USB_VENDOR_ID_TWINHAN, USB_DEVICE_ID_TWINHAN_IR_REMOTE) }, |
diff --git a/drivers/hid/hid-egalax.c b/drivers/hid/hid-egalax.c index 54b017ad258d..5a1b52e0eb85 100644 --- a/drivers/hid/hid-egalax.c +++ b/drivers/hid/hid-egalax.c | |||
| @@ -221,7 +221,7 @@ static int egalax_probe(struct hid_device *hdev, const struct hid_device_id *id) | |||
| 221 | struct egalax_data *td; | 221 | struct egalax_data *td; |
| 222 | struct hid_report *report; | 222 | struct hid_report *report; |
| 223 | 223 | ||
| 224 | td = kmalloc(sizeof(struct egalax_data), GFP_KERNEL); | 224 | td = kzalloc(sizeof(struct egalax_data), GFP_KERNEL); |
| 225 | if (!td) { | 225 | if (!td) { |
| 226 | dev_err(&hdev->dev, "cannot allocate eGalax data\n"); | 226 | dev_err(&hdev->dev, "cannot allocate eGalax data\n"); |
| 227 | return -ENOMEM; | 227 | return -ENOMEM; |
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c index bb0b3659437b..d8d372bae3cc 100644 --- a/drivers/hid/hid-input.c +++ b/drivers/hid/hid-input.c | |||
| @@ -174,7 +174,7 @@ static int hidinput_setkeycode(struct input_dev *dev, | |||
| 174 | 174 | ||
| 175 | clear_bit(*old_keycode, dev->keybit); | 175 | clear_bit(*old_keycode, dev->keybit); |
| 176 | set_bit(usage->code, dev->keybit); | 176 | set_bit(usage->code, dev->keybit); |
| 177 | dbg_hid(KERN_DEBUG "Assigned keycode %d to HID usage code %x\n", | 177 | dbg_hid("Assigned keycode %d to HID usage code %x\n", |
| 178 | usage->code, usage->hid); | 178 | usage->code, usage->hid); |
| 179 | 179 | ||
| 180 | /* | 180 | /* |
| @@ -203,8 +203,8 @@ static int hidinput_setkeycode(struct input_dev *dev, | |||
| 203 | * | 203 | * |
| 204 | * as seen in the HID specification v1.11 6.2.2.7 Global Items. | 204 | * as seen in the HID specification v1.11 6.2.2.7 Global Items. |
| 205 | * | 205 | * |
| 206 | * Only exponent 1 length units are processed. Centimeters are converted to | 206 | * Only exponent 1 length units are processed. Centimeters and inches are |
| 207 | * inches. Degrees are converted to radians. | 207 | * converted to millimeters. Degrees are converted to radians. |
| 208 | */ | 208 | */ |
| 209 | static __s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code) | 209 | static __s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code) |
| 210 | { | 210 | { |
| @@ -225,13 +225,16 @@ static __s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code) | |||
| 225 | */ | 225 | */ |
| 226 | if (code == ABS_X || code == ABS_Y || code == ABS_Z) { | 226 | if (code == ABS_X || code == ABS_Y || code == ABS_Z) { |
| 227 | if (field->unit == 0x11) { /* If centimeters */ | 227 | if (field->unit == 0x11) { /* If centimeters */ |
| 228 | /* Convert to inches */ | 228 | /* Convert to millimeters */ |
| 229 | prev = logical_extents; | 229 | unit_exponent += 1; |
| 230 | logical_extents *= 254; | 230 | } else if (field->unit == 0x13) { /* If inches */ |
| 231 | if (logical_extents < prev) | 231 | /* Convert to millimeters */ |
| 232 | prev = physical_extents; | ||
| 233 | physical_extents *= 254; | ||
| 234 | if (physical_extents < prev) | ||
| 232 | return 0; | 235 | return 0; |
| 233 | unit_exponent += 2; | 236 | unit_exponent -= 1; |
| 234 | } else if (field->unit != 0x13) { /* If not inches */ | 237 | } else { |
| 235 | return 0; | 238 | return 0; |
| 236 | } | 239 | } |
| 237 | } else if (code == ABS_RX || code == ABS_RY || code == ABS_RZ) { | 240 | } else if (code == ABS_RX || code == ABS_RY || code == ABS_RZ) { |
diff --git a/drivers/hid/hid-tmff.c b/drivers/hid/hid-tmff.c index 15434c814793..25be4e1461bd 100644 --- a/drivers/hid/hid-tmff.c +++ b/drivers/hid/hid-tmff.c | |||
| @@ -256,6 +256,8 @@ static const struct hid_device_id tm_devices[] = { | |||
| 256 | .driver_data = (unsigned long)ff_joystick }, | 256 | .driver_data = (unsigned long)ff_joystick }, |
| 257 | { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb654), /* FGT Force Feedback Wheel */ | 257 | { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb654), /* FGT Force Feedback Wheel */ |
| 258 | .driver_data = (unsigned long)ff_joystick }, | 258 | .driver_data = (unsigned long)ff_joystick }, |
| 259 | { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb65a), /* F430 Force Feedback Wheel */ | ||
| 260 | .driver_data = (unsigned long)ff_joystick }, | ||
| 259 | { } | 261 | { } |
| 260 | }; | 262 | }; |
| 261 | MODULE_DEVICE_TABLE(hid, tm_devices); | 263 | MODULE_DEVICE_TABLE(hid, tm_devices); |
diff --git a/drivers/infiniband/core/ud_header.c b/drivers/infiniband/core/ud_header.c index bb7e19280821..9b737ff133e2 100644 --- a/drivers/infiniband/core/ud_header.c +++ b/drivers/infiniband/core/ud_header.c | |||
| @@ -278,36 +278,6 @@ void ib_ud_header_init(int payload_bytes, | |||
| 278 | EXPORT_SYMBOL(ib_ud_header_init); | 278 | EXPORT_SYMBOL(ib_ud_header_init); |
| 279 | 279 | ||
| 280 | /** | 280 | /** |
| 281 | * ib_lrh_header_pack - Pack LRH header struct into wire format | ||
| 282 | * @lrh:unpacked LRH header struct | ||
| 283 | * @buf:Buffer to pack into | ||
| 284 | * | ||
| 285 | * ib_lrh_header_pack() packs the LRH header structure @lrh into | ||
| 286 | * wire format in the buffer @buf. | ||
| 287 | */ | ||
| 288 | int ib_lrh_header_pack(struct ib_unpacked_lrh *lrh, void *buf) | ||
| 289 | { | ||
| 290 | ib_pack(lrh_table, ARRAY_SIZE(lrh_table), lrh, buf); | ||
| 291 | return 0; | ||
| 292 | } | ||
| 293 | EXPORT_SYMBOL(ib_lrh_header_pack); | ||
| 294 | |||
| 295 | /** | ||
| 296 | * ib_lrh_header_unpack - Unpack LRH structure from wire format | ||
| 297 | * @lrh:unpacked LRH header struct | ||
| 298 | * @buf:Buffer to pack into | ||
| 299 | * | ||
| 300 | * ib_lrh_header_unpack() unpacks the LRH header structure from | ||
| 301 | * wire format (in buf) into @lrh. | ||
| 302 | */ | ||
| 303 | int ib_lrh_header_unpack(void *buf, struct ib_unpacked_lrh *lrh) | ||
| 304 | { | ||
| 305 | ib_unpack(lrh_table, ARRAY_SIZE(lrh_table), buf, lrh); | ||
| 306 | return 0; | ||
| 307 | } | ||
| 308 | EXPORT_SYMBOL(ib_lrh_header_unpack); | ||
| 309 | |||
| 310 | /** | ||
| 311 | * ib_ud_header_pack - Pack UD header struct into wire format | 281 | * ib_ud_header_pack - Pack UD header struct into wire format |
| 312 | * @header:UD header struct | 282 | * @header:UD header struct |
| 313 | * @buf:Buffer to pack into | 283 | * @buf:Buffer to pack into |
diff --git a/drivers/infiniband/core/uverbs_marshall.c b/drivers/infiniband/core/uverbs_marshall.c index 5440da0e59b4..1b1146f87124 100644 --- a/drivers/infiniband/core/uverbs_marshall.c +++ b/drivers/infiniband/core/uverbs_marshall.c | |||
| @@ -40,18 +40,21 @@ void ib_copy_ah_attr_to_user(struct ib_uverbs_ah_attr *dst, | |||
| 40 | dst->grh.sgid_index = src->grh.sgid_index; | 40 | dst->grh.sgid_index = src->grh.sgid_index; |
| 41 | dst->grh.hop_limit = src->grh.hop_limit; | 41 | dst->grh.hop_limit = src->grh.hop_limit; |
| 42 | dst->grh.traffic_class = src->grh.traffic_class; | 42 | dst->grh.traffic_class = src->grh.traffic_class; |
| 43 | memset(&dst->grh.reserved, 0, sizeof(dst->grh.reserved)); | ||
| 43 | dst->dlid = src->dlid; | 44 | dst->dlid = src->dlid; |
| 44 | dst->sl = src->sl; | 45 | dst->sl = src->sl; |
| 45 | dst->src_path_bits = src->src_path_bits; | 46 | dst->src_path_bits = src->src_path_bits; |
| 46 | dst->static_rate = src->static_rate; | 47 | dst->static_rate = src->static_rate; |
| 47 | dst->is_global = src->ah_flags & IB_AH_GRH ? 1 : 0; | 48 | dst->is_global = src->ah_flags & IB_AH_GRH ? 1 : 0; |
| 48 | dst->port_num = src->port_num; | 49 | dst->port_num = src->port_num; |
| 50 | dst->reserved = 0; | ||
| 49 | } | 51 | } |
| 50 | EXPORT_SYMBOL(ib_copy_ah_attr_to_user); | 52 | EXPORT_SYMBOL(ib_copy_ah_attr_to_user); |
| 51 | 53 | ||
| 52 | void ib_copy_qp_attr_to_user(struct ib_uverbs_qp_attr *dst, | 54 | void ib_copy_qp_attr_to_user(struct ib_uverbs_qp_attr *dst, |
| 53 | struct ib_qp_attr *src) | 55 | struct ib_qp_attr *src) |
| 54 | { | 56 | { |
| 57 | dst->qp_state = src->qp_state; | ||
| 55 | dst->cur_qp_state = src->cur_qp_state; | 58 | dst->cur_qp_state = src->cur_qp_state; |
| 56 | dst->path_mtu = src->path_mtu; | 59 | dst->path_mtu = src->path_mtu; |
| 57 | dst->path_mig_state = src->path_mig_state; | 60 | dst->path_mig_state = src->path_mig_state; |
| @@ -83,6 +86,7 @@ void ib_copy_qp_attr_to_user(struct ib_uverbs_qp_attr *dst, | |||
| 83 | dst->rnr_retry = src->rnr_retry; | 86 | dst->rnr_retry = src->rnr_retry; |
| 84 | dst->alt_port_num = src->alt_port_num; | 87 | dst->alt_port_num = src->alt_port_num; |
| 85 | dst->alt_timeout = src->alt_timeout; | 88 | dst->alt_timeout = src->alt_timeout; |
| 89 | memset(dst->reserved, 0, sizeof(dst->reserved)); | ||
| 86 | } | 90 | } |
| 87 | EXPORT_SYMBOL(ib_copy_qp_attr_to_user); | 91 | EXPORT_SYMBOL(ib_copy_qp_attr_to_user); |
| 88 | 92 | ||
diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c index bf3e20cd0298..30e09caf0da9 100644 --- a/drivers/infiniband/hw/mlx4/main.c +++ b/drivers/infiniband/hw/mlx4/main.c | |||
| @@ -219,7 +219,7 @@ static int eth_link_query_port(struct ib_device *ibdev, u8 port, | |||
| 219 | struct net_device *ndev; | 219 | struct net_device *ndev; |
| 220 | enum ib_mtu tmp; | 220 | enum ib_mtu tmp; |
| 221 | 221 | ||
| 222 | props->active_width = IB_WIDTH_4X; | 222 | props->active_width = IB_WIDTH_1X; |
| 223 | props->active_speed = 4; | 223 | props->active_speed = 4; |
| 224 | props->port_cap_flags = IB_PORT_CM_SUP; | 224 | props->port_cap_flags = IB_PORT_CM_SUP; |
| 225 | props->gid_tbl_len = to_mdev(ibdev)->dev->caps.gid_table_len[port]; | 225 | props->gid_tbl_len = to_mdev(ibdev)->dev->caps.gid_table_len[port]; |
| @@ -242,7 +242,7 @@ static int eth_link_query_port(struct ib_device *ibdev, u8 port, | |||
| 242 | tmp = iboe_get_mtu(ndev->mtu); | 242 | tmp = iboe_get_mtu(ndev->mtu); |
| 243 | props->active_mtu = tmp ? min(props->max_mtu, tmp) : IB_MTU_256; | 243 | props->active_mtu = tmp ? min(props->max_mtu, tmp) : IB_MTU_256; |
| 244 | 244 | ||
| 245 | props->state = netif_running(ndev) && netif_oper_up(ndev) ? | 245 | props->state = (netif_running(ndev) && netif_carrier_ok(ndev)) ? |
| 246 | IB_PORT_ACTIVE : IB_PORT_DOWN; | 246 | IB_PORT_ACTIVE : IB_PORT_DOWN; |
| 247 | props->phys_state = state_to_phys_state(props->state); | 247 | props->phys_state = state_to_phys_state(props->state); |
| 248 | 248 | ||
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c index 9a7794ac34c1..2001f20a4361 100644 --- a/drivers/infiniband/hw/mlx4/qp.c +++ b/drivers/infiniband/hw/mlx4/qp.c | |||
| @@ -1816,6 +1816,11 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr, | |||
| 1816 | ctrl->fence_size = (wr->send_flags & IB_SEND_FENCE ? | 1816 | ctrl->fence_size = (wr->send_flags & IB_SEND_FENCE ? |
| 1817 | MLX4_WQE_CTRL_FENCE : 0) | size; | 1817 | MLX4_WQE_CTRL_FENCE : 0) | size; |
| 1818 | 1818 | ||
| 1819 | if (be16_to_cpu(vlan) < 0x1000) { | ||
| 1820 | ctrl->ins_vlan = 1 << 6; | ||
| 1821 | ctrl->vlan_tag = vlan; | ||
| 1822 | } | ||
| 1823 | |||
| 1819 | /* | 1824 | /* |
| 1820 | * Make sure descriptor is fully written before | 1825 | * Make sure descriptor is fully written before |
| 1821 | * setting ownership bit (because HW can start | 1826 | * setting ownership bit (because HW can start |
| @@ -1831,11 +1836,6 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr, | |||
| 1831 | ctrl->owner_opcode = mlx4_ib_opcode[wr->opcode] | | 1836 | ctrl->owner_opcode = mlx4_ib_opcode[wr->opcode] | |
| 1832 | (ind & qp->sq.wqe_cnt ? cpu_to_be32(1 << 31) : 0) | blh; | 1837 | (ind & qp->sq.wqe_cnt ? cpu_to_be32(1 << 31) : 0) | blh; |
| 1833 | 1838 | ||
| 1834 | if (be16_to_cpu(vlan) < 0x1000) { | ||
| 1835 | ctrl->ins_vlan = 1 << 6; | ||
| 1836 | ctrl->vlan_tag = vlan; | ||
| 1837 | } | ||
| 1838 | |||
| 1839 | stamp = ind + qp->sq_spare_wqes; | 1839 | stamp = ind + qp->sq_spare_wqes; |
| 1840 | ind += DIV_ROUND_UP(size * 16, 1U << qp->sq.wqe_shift); | 1840 | ind += DIV_ROUND_UP(size * 16, 1U << qp->sq.wqe_shift); |
| 1841 | 1841 | ||
diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig index 77b8fd20cd90..6f190f4cdbc0 100644 --- a/drivers/leds/Kconfig +++ b/drivers/leds/Kconfig | |||
| @@ -7,20 +7,20 @@ menuconfig NEW_LEDS | |||
| 7 | This is not related to standard keyboard LEDs which are controlled | 7 | This is not related to standard keyboard LEDs which are controlled |
| 8 | via the input system. | 8 | via the input system. |
| 9 | 9 | ||
| 10 | if NEW_LEDS | ||
| 11 | |||
| 12 | config LEDS_CLASS | 10 | config LEDS_CLASS |
| 13 | bool "LED Class Support" | 11 | bool "LED Class Support" |
| 12 | depends on NEW_LEDS | ||
| 14 | help | 13 | help |
| 15 | This option enables the led sysfs class in /sys/class/leds. You'll | 14 | This option enables the led sysfs class in /sys/class/leds. You'll |
| 16 | need this to do anything useful with LEDs. If unsure, say N. | 15 | need this to do anything useful with LEDs. If unsure, say N. |
| 17 | 16 | ||
| 18 | if LEDS_CLASS | 17 | if NEW_LEDS |
| 19 | 18 | ||
| 20 | comment "LED drivers" | 19 | comment "LED drivers" |
| 21 | 20 | ||
| 22 | config LEDS_88PM860X | 21 | config LEDS_88PM860X |
| 23 | tristate "LED Support for Marvell 88PM860x PMIC" | 22 | tristate "LED Support for Marvell 88PM860x PMIC" |
| 23 | depends on LEDS_CLASS | ||
| 24 | depends on MFD_88PM860X | 24 | depends on MFD_88PM860X |
| 25 | help | 25 | help |
| 26 | This option enables support for on-chip LED drivers found on Marvell | 26 | This option enables support for on-chip LED drivers found on Marvell |
| @@ -28,6 +28,7 @@ config LEDS_88PM860X | |||
| 28 | 28 | ||
| 29 | config LEDS_ATMEL_PWM | 29 | config LEDS_ATMEL_PWM |
| 30 | tristate "LED Support using Atmel PWM outputs" | 30 | tristate "LED Support using Atmel PWM outputs" |
| 31 | depends on LEDS_CLASS | ||
| 31 | depends on ATMEL_PWM | 32 | depends on ATMEL_PWM |
| 32 | help | 33 | help |
| 33 | This option enables support for LEDs driven using outputs | 34 | This option enables support for LEDs driven using outputs |
| @@ -35,6 +36,7 @@ config LEDS_ATMEL_PWM | |||
| 35 | 36 | ||
| 36 | config LEDS_LOCOMO | 37 | config LEDS_LOCOMO |
| 37 | tristate "LED Support for Locomo device" | 38 | tristate "LED Support for Locomo device" |
| 39 | depends on LEDS_CLASS | ||
| 38 | depends on SHARP_LOCOMO | 40 | depends on SHARP_LOCOMO |
| 39 | help | 41 | help |
| 40 | This option enables support for the LEDs on Sharp Locomo. | 42 | This option enables support for the LEDs on Sharp Locomo. |
| @@ -42,6 +44,7 @@ config LEDS_LOCOMO | |||
| 42 | 44 | ||
| 43 | config LEDS_MIKROTIK_RB532 | 45 | config LEDS_MIKROTIK_RB532 |
| 44 | tristate "LED Support for Mikrotik Routerboard 532" | 46 | tristate "LED Support for Mikrotik Routerboard 532" |
| 47 | depends on LEDS_CLASS | ||
| 45 | depends on MIKROTIK_RB532 | 48 | depends on MIKROTIK_RB532 |
| 46 | help | 49 | help |
| 47 | This option enables support for the so called "User LED" of | 50 | This option enables support for the so called "User LED" of |
| @@ -49,6 +52,7 @@ config LEDS_MIKROTIK_RB532 | |||
| 49 | 52 | ||
| 50 | config LEDS_S3C24XX | 53 | config LEDS_S3C24XX |
| 51 | tristate "LED Support for Samsung S3C24XX GPIO LEDs" | 54 | tristate "LED Support for Samsung S3C24XX GPIO LEDs" |
| 55 | depends on LEDS_CLASS | ||
| 52 | depends on ARCH_S3C2410 | 56 | depends on ARCH_S3C2410 |
| 53 | help | 57 | help |
| 54 | This option enables support for LEDs connected to GPIO lines | 58 | This option enables support for LEDs connected to GPIO lines |
| @@ -56,12 +60,14 @@ config LEDS_S3C24XX | |||
| 56 | 60 | ||
| 57 | config LEDS_AMS_DELTA | 61 | config LEDS_AMS_DELTA |
| 58 | tristate "LED Support for the Amstrad Delta (E3)" | 62 | tristate "LED Support for the Amstrad Delta (E3)" |
| 63 | depends on LEDS_CLASS | ||
| 59 | depends on MACH_AMS_DELTA | 64 | depends on MACH_AMS_DELTA |
| 60 | help | 65 | help |
| 61 | This option enables support for the LEDs on Amstrad Delta (E3). | 66 | This option enables support for the LEDs on Amstrad Delta (E3). |
| 62 | 67 | ||
| 63 | config LEDS_NET48XX | 68 | config LEDS_NET48XX |
| 64 | tristate "LED Support for Soekris net48xx series Error LED" | 69 | tristate "LED Support for Soekris net48xx series Error LED" |
| 70 | depends on LEDS_CLASS | ||
| 65 | depends on SCx200_GPIO | 71 | depends on SCx200_GPIO |
| 66 | help | 72 | help |
| 67 | This option enables support for the Soekris net4801 and net4826 error | 73 | This option enables support for the Soekris net4801 and net4826 error |
| @@ -79,18 +85,21 @@ config LEDS_NET5501 | |||
| 79 | 85 | ||
| 80 | config LEDS_FSG | 86 | config LEDS_FSG |
| 81 | tristate "LED Support for the Freecom FSG-3" | 87 | tristate "LED Support for the Freecom FSG-3" |
| 88 | depends on LEDS_CLASS | ||
| 82 | depends on MACH_FSG | 89 | depends on MACH_FSG |
| 83 | help | 90 | help |
| 84 | This option enables support for the LEDs on the Freecom FSG-3. | 91 | This option enables support for the LEDs on the Freecom FSG-3. |
| 85 | 92 | ||
| 86 | config LEDS_WRAP | 93 | config LEDS_WRAP |
| 87 | tristate "LED Support for the WRAP series LEDs" | 94 | tristate "LED Support for the WRAP series LEDs" |
| 95 | depends on LEDS_CLASS | ||
| 88 | depends on SCx200_GPIO | 96 | depends on SCx200_GPIO |
| 89 | help | 97 | help |
| 90 | This option enables support for the PCEngines WRAP programmable LEDs. | 98 | This option enables support for the PCEngines WRAP programmable LEDs. |
| 91 | 99 | ||
| 92 | config LEDS_ALIX2 | 100 | config LEDS_ALIX2 |
| 93 | tristate "LED Support for ALIX.2 and ALIX.3 series" | 101 | tristate "LED Support for ALIX.2 and ALIX.3 series" |
| 102 | depends on LEDS_CLASS | ||
| 94 | depends on X86 && !GPIO_CS5535 && !CS5535_GPIO | 103 | depends on X86 && !GPIO_CS5535 && !CS5535_GPIO |
| 95 | help | 104 | help |
| 96 | This option enables support for the PCEngines ALIX.2 and ALIX.3 LEDs. | 105 | This option enables support for the PCEngines ALIX.2 and ALIX.3 LEDs. |
| @@ -98,12 +107,14 @@ config LEDS_ALIX2 | |||
| 98 | 107 | ||
| 99 | config LEDS_H1940 | 108 | config LEDS_H1940 |
| 100 | tristate "LED Support for iPAQ H1940 device" | 109 | tristate "LED Support for iPAQ H1940 device" |
| 110 | depends on LEDS_CLASS | ||
| 101 | depends on ARCH_H1940 | 111 | depends on ARCH_H1940 |
| 102 | help | 112 | help |
| 103 | This option enables support for the LEDs on the h1940. | 113 | This option enables support for the LEDs on the h1940. |
| 104 | 114 | ||
| 105 | config LEDS_COBALT_QUBE | 115 | config LEDS_COBALT_QUBE |
| 106 | tristate "LED Support for the Cobalt Qube series front LED" | 116 | tristate "LED Support for the Cobalt Qube series front LED" |
| 117 | depends on LEDS_CLASS | ||
| 107 | depends on MIPS_COBALT | 118 | depends on MIPS_COBALT |
| 108 | help | 119 | help |
| 109 | This option enables support for the front LED on Cobalt Qube series | 120 | This option enables support for the front LED on Cobalt Qube series |
| @@ -117,6 +128,7 @@ config LEDS_COBALT_RAQ | |||
| 117 | 128 | ||
| 118 | config LEDS_SUNFIRE | 129 | config LEDS_SUNFIRE |
| 119 | tristate "LED support for SunFire servers." | 130 | tristate "LED support for SunFire servers." |
| 131 | depends on LEDS_CLASS | ||
| 120 | depends on SPARC64 | 132 | depends on SPARC64 |
| 121 | select LEDS_TRIGGERS | 133 | select LEDS_TRIGGERS |
| 122 | help | 134 | help |
| @@ -125,6 +137,7 @@ config LEDS_SUNFIRE | |||
| 125 | 137 | ||
| 126 | config LEDS_HP6XX | 138 | config LEDS_HP6XX |
| 127 | tristate "LED Support for the HP Jornada 6xx" | 139 | tristate "LED Support for the HP Jornada 6xx" |
| 140 | depends on LEDS_CLASS | ||
| 128 | depends on SH_HP6XX | 141 | depends on SH_HP6XX |
| 129 | help | 142 | help |
| 130 | This option enables LED support for the handheld | 143 | This option enables LED support for the handheld |
| @@ -132,6 +145,7 @@ config LEDS_HP6XX | |||
| 132 | 145 | ||
| 133 | config LEDS_PCA9532 | 146 | config LEDS_PCA9532 |
| 134 | tristate "LED driver for PCA9532 dimmer" | 147 | tristate "LED driver for PCA9532 dimmer" |
| 148 | depends on LEDS_CLASS | ||
| 135 | depends on I2C && INPUT && EXPERIMENTAL | 149 | depends on I2C && INPUT && EXPERIMENTAL |
| 136 | help | 150 | help |
| 137 | This option enables support for NXP pca9532 | 151 | This option enables support for NXP pca9532 |
| @@ -140,6 +154,7 @@ config LEDS_PCA9532 | |||
| 140 | 154 | ||
| 141 | config LEDS_GPIO | 155 | config LEDS_GPIO |
| 142 | tristate "LED Support for GPIO connected LEDs" | 156 | tristate "LED Support for GPIO connected LEDs" |
| 157 | depends on LEDS_CLASS | ||
| 143 | depends on GENERIC_GPIO | 158 | depends on GENERIC_GPIO |
| 144 | help | 159 | help |
| 145 | This option enables support for the LEDs connected to GPIO | 160 | This option enables support for the LEDs connected to GPIO |
| @@ -167,6 +182,7 @@ config LEDS_GPIO_OF | |||
| 167 | 182 | ||
| 168 | config LEDS_LP3944 | 183 | config LEDS_LP3944 |
| 169 | tristate "LED Support for N.S. LP3944 (Fun Light) I2C chip" | 184 | tristate "LED Support for N.S. LP3944 (Fun Light) I2C chip" |
| 185 | depends on LEDS_CLASS | ||
| 170 | depends on I2C | 186 | depends on I2C |
| 171 | help | 187 | help |
| 172 | This option enables support for LEDs connected to the National | 188 | This option enables support for LEDs connected to the National |
| @@ -196,6 +212,7 @@ config LEDS_LP5523 | |||
| 196 | 212 | ||
| 197 | config LEDS_CLEVO_MAIL | 213 | config LEDS_CLEVO_MAIL |
| 198 | tristate "Mail LED on Clevo notebook" | 214 | tristate "Mail LED on Clevo notebook" |
| 215 | depends on LEDS_CLASS | ||
| 199 | depends on X86 && SERIO_I8042 && DMI | 216 | depends on X86 && SERIO_I8042 && DMI |
| 200 | help | 217 | help |
| 201 | This driver makes the mail LED accessible from userspace | 218 | This driver makes the mail LED accessible from userspace |
| @@ -226,6 +243,7 @@ config LEDS_CLEVO_MAIL | |||
| 226 | 243 | ||
| 227 | config LEDS_PCA955X | 244 | config LEDS_PCA955X |
| 228 | tristate "LED Support for PCA955x I2C chips" | 245 | tristate "LED Support for PCA955x I2C chips" |
| 246 | depends on LEDS_CLASS | ||
| 229 | depends on I2C | 247 | depends on I2C |
| 230 | help | 248 | help |
| 231 | This option enables support for LEDs connected to PCA955x | 249 | This option enables support for LEDs connected to PCA955x |
| @@ -234,6 +252,7 @@ config LEDS_PCA955X | |||
| 234 | 252 | ||
| 235 | config LEDS_WM831X_STATUS | 253 | config LEDS_WM831X_STATUS |
| 236 | tristate "LED support for status LEDs on WM831x PMICs" | 254 | tristate "LED support for status LEDs on WM831x PMICs" |
| 255 | depends on LEDS_CLASS | ||
| 237 | depends on MFD_WM831X | 256 | depends on MFD_WM831X |
| 238 | help | 257 | help |
| 239 | This option enables support for the status LEDs of the WM831x | 258 | This option enables support for the status LEDs of the WM831x |
| @@ -241,6 +260,7 @@ config LEDS_WM831X_STATUS | |||
| 241 | 260 | ||
| 242 | config LEDS_WM8350 | 261 | config LEDS_WM8350 |
| 243 | tristate "LED Support for WM8350 AudioPlus PMIC" | 262 | tristate "LED Support for WM8350 AudioPlus PMIC" |
| 263 | depends on LEDS_CLASS | ||
| 244 | depends on MFD_WM8350 | 264 | depends on MFD_WM8350 |
| 245 | help | 265 | help |
| 246 | This option enables support for LEDs driven by the Wolfson | 266 | This option enables support for LEDs driven by the Wolfson |
| @@ -248,6 +268,7 @@ config LEDS_WM8350 | |||
| 248 | 268 | ||
| 249 | config LEDS_DA903X | 269 | config LEDS_DA903X |
| 250 | tristate "LED Support for DA9030/DA9034 PMIC" | 270 | tristate "LED Support for DA9030/DA9034 PMIC" |
| 271 | depends on LEDS_CLASS | ||
| 251 | depends on PMIC_DA903X | 272 | depends on PMIC_DA903X |
| 252 | help | 273 | help |
| 253 | This option enables support for on-chip LED drivers found | 274 | This option enables support for on-chip LED drivers found |
| @@ -255,6 +276,7 @@ config LEDS_DA903X | |||
| 255 | 276 | ||
| 256 | config LEDS_DAC124S085 | 277 | config LEDS_DAC124S085 |
| 257 | tristate "LED Support for DAC124S085 SPI DAC" | 278 | tristate "LED Support for DAC124S085 SPI DAC" |
| 279 | depends on LEDS_CLASS | ||
| 258 | depends on SPI | 280 | depends on SPI |
| 259 | help | 281 | help |
| 260 | This option enables support for DAC124S085 SPI DAC from NatSemi, | 282 | This option enables support for DAC124S085 SPI DAC from NatSemi, |
| @@ -262,18 +284,21 @@ config LEDS_DAC124S085 | |||
| 262 | 284 | ||
| 263 | config LEDS_PWM | 285 | config LEDS_PWM |
| 264 | tristate "PWM driven LED Support" | 286 | tristate "PWM driven LED Support" |
| 287 | depends on LEDS_CLASS | ||
| 265 | depends on HAVE_PWM | 288 | depends on HAVE_PWM |
| 266 | help | 289 | help |
| 267 | This option enables support for pwm driven LEDs | 290 | This option enables support for pwm driven LEDs |
| 268 | 291 | ||
| 269 | config LEDS_REGULATOR | 292 | config LEDS_REGULATOR |
| 270 | tristate "REGULATOR driven LED support" | 293 | tristate "REGULATOR driven LED support" |
| 294 | depends on LEDS_CLASS | ||
| 271 | depends on REGULATOR | 295 | depends on REGULATOR |
| 272 | help | 296 | help |
| 273 | This option enables support for regulator driven LEDs. | 297 | This option enables support for regulator driven LEDs. |
| 274 | 298 | ||
| 275 | config LEDS_BD2802 | 299 | config LEDS_BD2802 |
| 276 | tristate "LED driver for BD2802 RGB LED" | 300 | tristate "LED driver for BD2802 RGB LED" |
| 301 | depends on LEDS_CLASS | ||
| 277 | depends on I2C | 302 | depends on I2C |
| 278 | help | 303 | help |
| 279 | This option enables support for BD2802GU RGB LED driver chips | 304 | This option enables support for BD2802GU RGB LED driver chips |
| @@ -281,6 +306,7 @@ config LEDS_BD2802 | |||
| 281 | 306 | ||
| 282 | config LEDS_INTEL_SS4200 | 307 | config LEDS_INTEL_SS4200 |
| 283 | tristate "LED driver for Intel NAS SS4200 series" | 308 | tristate "LED driver for Intel NAS SS4200 series" |
| 309 | depends on LEDS_CLASS | ||
| 284 | depends on PCI && DMI | 310 | depends on PCI && DMI |
| 285 | help | 311 | help |
| 286 | This option enables support for the Intel SS4200 series of | 312 | This option enables support for the Intel SS4200 series of |
| @@ -290,6 +316,7 @@ config LEDS_INTEL_SS4200 | |||
| 290 | 316 | ||
| 291 | config LEDS_LT3593 | 317 | config LEDS_LT3593 |
| 292 | tristate "LED driver for LT3593 controllers" | 318 | tristate "LED driver for LT3593 controllers" |
| 319 | depends on LEDS_CLASS | ||
| 293 | depends on GENERIC_GPIO | 320 | depends on GENERIC_GPIO |
| 294 | help | 321 | help |
| 295 | This option enables support for LEDs driven by a Linear Technology | 322 | This option enables support for LEDs driven by a Linear Technology |
| @@ -298,6 +325,7 @@ config LEDS_LT3593 | |||
| 298 | 325 | ||
| 299 | config LEDS_ADP5520 | 326 | config LEDS_ADP5520 |
| 300 | tristate "LED Support for ADP5520/ADP5501 PMIC" | 327 | tristate "LED Support for ADP5520/ADP5501 PMIC" |
| 328 | depends on LEDS_CLASS | ||
| 301 | depends on PMIC_ADP5520 | 329 | depends on PMIC_ADP5520 |
| 302 | help | 330 | help |
| 303 | This option enables support for on-chip LED drivers found | 331 | This option enables support for on-chip LED drivers found |
| @@ -308,6 +336,7 @@ config LEDS_ADP5520 | |||
| 308 | 336 | ||
| 309 | config LEDS_DELL_NETBOOKS | 337 | config LEDS_DELL_NETBOOKS |
| 310 | tristate "External LED on Dell Business Netbooks" | 338 | tristate "External LED on Dell Business Netbooks" |
| 339 | depends on LEDS_CLASS | ||
| 311 | depends on X86 && ACPI_WMI | 340 | depends on X86 && ACPI_WMI |
| 312 | help | 341 | help |
| 313 | This adds support for the Latitude 2100 and similar | 342 | This adds support for the Latitude 2100 and similar |
| @@ -315,6 +344,7 @@ config LEDS_DELL_NETBOOKS | |||
| 315 | 344 | ||
| 316 | config LEDS_MC13783 | 345 | config LEDS_MC13783 |
| 317 | tristate "LED Support for MC13783 PMIC" | 346 | tristate "LED Support for MC13783 PMIC" |
| 347 | depends on LEDS_CLASS | ||
| 318 | depends on MFD_MC13783 | 348 | depends on MFD_MC13783 |
| 319 | help | 349 | help |
| 320 | This option enable support for on-chip LED drivers found | 350 | This option enable support for on-chip LED drivers found |
| @@ -322,6 +352,7 @@ config LEDS_MC13783 | |||
| 322 | 352 | ||
| 323 | config LEDS_NS2 | 353 | config LEDS_NS2 |
| 324 | tristate "LED support for Network Space v2 GPIO LEDs" | 354 | tristate "LED support for Network Space v2 GPIO LEDs" |
| 355 | depends on LEDS_CLASS | ||
| 325 | depends on MACH_NETSPACE_V2 || MACH_INETSPACE_V2 || MACH_NETSPACE_MAX_V2 || D2NET_V2 | 356 | depends on MACH_NETSPACE_V2 || MACH_INETSPACE_V2 || MACH_NETSPACE_MAX_V2 || D2NET_V2 |
| 326 | default y | 357 | default y |
| 327 | help | 358 | help |
| @@ -340,17 +371,17 @@ config LEDS_NETXBIG | |||
| 340 | 371 | ||
| 341 | config LEDS_TRIGGERS | 372 | config LEDS_TRIGGERS |
| 342 | bool "LED Trigger support" | 373 | bool "LED Trigger support" |
| 374 | depends on LEDS_CLASS | ||
| 343 | help | 375 | help |
| 344 | This option enables trigger support for the leds class. | 376 | This option enables trigger support for the leds class. |
| 345 | These triggers allow kernel events to drive the LEDs and can | 377 | These triggers allow kernel events to drive the LEDs and can |
| 346 | be configured via sysfs. If unsure, say Y. | 378 | be configured via sysfs. If unsure, say Y. |
| 347 | 379 | ||
| 348 | if LEDS_TRIGGERS | ||
| 349 | |||
| 350 | comment "LED Triggers" | 380 | comment "LED Triggers" |
| 351 | 381 | ||
| 352 | config LEDS_TRIGGER_TIMER | 382 | config LEDS_TRIGGER_TIMER |
| 353 | tristate "LED Timer Trigger" | 383 | tristate "LED Timer Trigger" |
| 384 | depends on LEDS_TRIGGERS | ||
| 354 | help | 385 | help |
| 355 | This allows LEDs to be controlled by a programmable timer | 386 | This allows LEDs to be controlled by a programmable timer |
| 356 | via sysfs. Some LED hardware can be programmed to start | 387 | via sysfs. Some LED hardware can be programmed to start |
| @@ -362,12 +393,14 @@ config LEDS_TRIGGER_TIMER | |||
| 362 | config LEDS_TRIGGER_IDE_DISK | 393 | config LEDS_TRIGGER_IDE_DISK |
| 363 | bool "LED IDE Disk Trigger" | 394 | bool "LED IDE Disk Trigger" |
| 364 | depends on IDE_GD_ATA | 395 | depends on IDE_GD_ATA |
| 396 | depends on LEDS_TRIGGERS | ||
| 365 | help | 397 | help |
| 366 | This allows LEDs to be controlled by IDE disk activity. | 398 | This allows LEDs to be controlled by IDE disk activity. |
| 367 | If unsure, say Y. | 399 | If unsure, say Y. |
| 368 | 400 | ||
| 369 | config LEDS_TRIGGER_HEARTBEAT | 401 | config LEDS_TRIGGER_HEARTBEAT |
| 370 | tristate "LED Heartbeat Trigger" | 402 | tristate "LED Heartbeat Trigger" |
| 403 | depends on LEDS_TRIGGERS | ||
| 371 | help | 404 | help |
| 372 | This allows LEDs to be controlled by a CPU load average. | 405 | This allows LEDs to be controlled by a CPU load average. |
| 373 | The flash frequency is a hyperbolic function of the 1-minute | 406 | The flash frequency is a hyperbolic function of the 1-minute |
| @@ -376,6 +409,7 @@ config LEDS_TRIGGER_HEARTBEAT | |||
| 376 | 409 | ||
| 377 | config LEDS_TRIGGER_BACKLIGHT | 410 | config LEDS_TRIGGER_BACKLIGHT |
| 378 | tristate "LED backlight Trigger" | 411 | tristate "LED backlight Trigger" |
| 412 | depends on LEDS_TRIGGERS | ||
| 379 | help | 413 | help |
| 380 | This allows LEDs to be controlled as a backlight device: they | 414 | This allows LEDs to be controlled as a backlight device: they |
| 381 | turn off and on when the display is blanked and unblanked. | 415 | turn off and on when the display is blanked and unblanked. |
| @@ -384,6 +418,7 @@ config LEDS_TRIGGER_BACKLIGHT | |||
| 384 | 418 | ||
| 385 | config LEDS_TRIGGER_GPIO | 419 | config LEDS_TRIGGER_GPIO |
| 386 | tristate "LED GPIO Trigger" | 420 | tristate "LED GPIO Trigger" |
| 421 | depends on LEDS_TRIGGERS | ||
| 387 | depends on GPIOLIB | 422 | depends on GPIOLIB |
| 388 | help | 423 | help |
| 389 | This allows LEDs to be controlled by gpio events. It's good | 424 | This allows LEDs to be controlled by gpio events. It's good |
| @@ -396,6 +431,7 @@ config LEDS_TRIGGER_GPIO | |||
| 396 | 431 | ||
| 397 | config LEDS_TRIGGER_DEFAULT_ON | 432 | config LEDS_TRIGGER_DEFAULT_ON |
| 398 | tristate "LED Default ON Trigger" | 433 | tristate "LED Default ON Trigger" |
| 434 | depends on LEDS_TRIGGERS | ||
| 399 | help | 435 | help |
| 400 | This allows LEDs to be initialised in the ON state. | 436 | This allows LEDs to be initialised in the ON state. |
| 401 | If unsure, say Y. | 437 | If unsure, say Y. |
| @@ -403,8 +439,4 @@ config LEDS_TRIGGER_DEFAULT_ON | |||
| 403 | comment "iptables trigger is under Netfilter config (LED target)" | 439 | comment "iptables trigger is under Netfilter config (LED target)" |
| 404 | depends on LEDS_TRIGGERS | 440 | depends on LEDS_TRIGGERS |
| 405 | 441 | ||
| 406 | endif # LEDS_TRIGGERS | ||
| 407 | |||
| 408 | endif # LEDS_CLASS | ||
| 409 | |||
| 410 | endif # NEW_LEDS | 442 | endif # NEW_LEDS |
diff --git a/drivers/macintosh/Kconfig b/drivers/macintosh/Kconfig index 3d7355ff7308..fa51af11c6f1 100644 --- a/drivers/macintosh/Kconfig +++ b/drivers/macintosh/Kconfig | |||
| @@ -102,6 +102,7 @@ config ADB_PMU_LED | |||
| 102 | config ADB_PMU_LED_IDE | 102 | config ADB_PMU_LED_IDE |
| 103 | bool "Use front LED as IDE LED by default" | 103 | bool "Use front LED as IDE LED by default" |
| 104 | depends on ADB_PMU_LED | 104 | depends on ADB_PMU_LED |
| 105 | depends on LEDS_CLASS | ||
| 105 | select LEDS_TRIGGERS | 106 | select LEDS_TRIGGERS |
| 106 | select LEDS_TRIGGER_IDE_DISK | 107 | select LEDS_TRIGGER_IDE_DISK |
| 107 | help | 108 | help |
diff --git a/drivers/net/mlx4/fw.c b/drivers/net/mlx4/fw.c index b68eee2414c2..7a7e18ba278a 100644 --- a/drivers/net/mlx4/fw.c +++ b/drivers/net/mlx4/fw.c | |||
| @@ -289,6 +289,10 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) | |||
| 289 | MLX4_GET(field, outbox, QUERY_DEV_CAP_LOG_BF_REG_SZ_OFFSET); | 289 | MLX4_GET(field, outbox, QUERY_DEV_CAP_LOG_BF_REG_SZ_OFFSET); |
| 290 | dev_cap->bf_reg_size = 1 << (field & 0x1f); | 290 | dev_cap->bf_reg_size = 1 << (field & 0x1f); |
| 291 | MLX4_GET(field, outbox, QUERY_DEV_CAP_LOG_MAX_BF_REGS_PER_PAGE_OFFSET); | 291 | MLX4_GET(field, outbox, QUERY_DEV_CAP_LOG_MAX_BF_REGS_PER_PAGE_OFFSET); |
| 292 | if ((1 << (field & 0x3f)) > (PAGE_SIZE / dev_cap->bf_reg_size)) { | ||
| 293 | mlx4_warn(dev, "firmware bug: log2 # of blue flame regs is invalid (%d), forcing 3\n", field & 0x1f); | ||
| 294 | field = 3; | ||
| 295 | } | ||
| 292 | dev_cap->bf_regs_per_page = 1 << (field & 0x3f); | 296 | dev_cap->bf_regs_per_page = 1 << (field & 0x3f); |
| 293 | mlx4_dbg(dev, "BlueFlame available (reg size %d, regs/page %d)\n", | 297 | mlx4_dbg(dev, "BlueFlame available (reg size %d, regs/page %d)\n", |
| 294 | dev_cap->bf_reg_size, dev_cap->bf_regs_per_page); | 298 | dev_cap->bf_reg_size, dev_cap->bf_regs_per_page); |
diff --git a/drivers/net/wan/x25_asy.c b/drivers/net/wan/x25_asy.c index cf05504d9511..24297b274cd4 100644 --- a/drivers/net/wan/x25_asy.c +++ b/drivers/net/wan/x25_asy.c | |||
| @@ -577,7 +577,7 @@ static int x25_asy_open_tty(struct tty_struct *tty) | |||
| 577 | if (err) | 577 | if (err) |
| 578 | return err; | 578 | return err; |
| 579 | /* Done. We have linked the TTY line to a channel. */ | 579 | /* Done. We have linked the TTY line to a channel. */ |
| 580 | return sl->dev->base_addr; | 580 | return 0; |
| 581 | } | 581 | } |
| 582 | 582 | ||
| 583 | 583 | ||
diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c index 4d8e14b7aa93..09a550860dcf 100644 --- a/drivers/serial/8250.c +++ b/drivers/serial/8250.c | |||
| @@ -2872,7 +2872,7 @@ static struct console serial8250_console = { | |||
| 2872 | .device = uart_console_device, | 2872 | .device = uart_console_device, |
| 2873 | .setup = serial8250_console_setup, | 2873 | .setup = serial8250_console_setup, |
| 2874 | .early_setup = serial8250_console_early_setup, | 2874 | .early_setup = serial8250_console_early_setup, |
| 2875 | .flags = CON_PRINTBUFFER, | 2875 | .flags = CON_PRINTBUFFER | CON_ANYTIME, |
| 2876 | .index = -1, | 2876 | .index = -1, |
| 2877 | .data = &serial8250_reg, | 2877 | .data = &serial8250_reg, |
| 2878 | }; | 2878 | }; |
diff --git a/drivers/serial/mfd.c b/drivers/serial/mfd.c index 5fc699e929dc..d40010a22ecd 100644 --- a/drivers/serial/mfd.c +++ b/drivers/serial/mfd.c | |||
| @@ -900,8 +900,7 @@ serial_hsu_set_termios(struct uart_port *port, struct ktermios *termios, | |||
| 900 | unsigned char cval, fcr = 0; | 900 | unsigned char cval, fcr = 0; |
| 901 | unsigned long flags; | 901 | unsigned long flags; |
| 902 | unsigned int baud, quot; | 902 | unsigned int baud, quot; |
| 903 | u32 mul = 0x3600; | 903 | u32 ps, mul; |
| 904 | u32 ps = 0x10; | ||
| 905 | 904 | ||
| 906 | switch (termios->c_cflag & CSIZE) { | 905 | switch (termios->c_cflag & CSIZE) { |
| 907 | case CS5: | 906 | case CS5: |
| @@ -943,31 +942,24 @@ serial_hsu_set_termios(struct uart_port *port, struct ktermios *termios, | |||
| 943 | baud = uart_get_baud_rate(port, termios, old, 0, 4000000); | 942 | baud = uart_get_baud_rate(port, termios, old, 0, 4000000); |
| 944 | 943 | ||
| 945 | quot = 1; | 944 | quot = 1; |
| 945 | ps = 0x10; | ||
| 946 | mul = 0x3600; | ||
| 946 | switch (baud) { | 947 | switch (baud) { |
| 947 | case 3500000: | 948 | case 3500000: |
| 948 | mul = 0x3345; | 949 | mul = 0x3345; |
| 949 | ps = 0xC; | 950 | ps = 0xC; |
| 950 | break; | 951 | break; |
| 951 | case 3000000: | ||
| 952 | mul = 0x2EE0; | ||
| 953 | break; | ||
| 954 | case 2500000: | ||
| 955 | mul = 0x2710; | ||
| 956 | break; | ||
| 957 | case 2000000: | ||
| 958 | mul = 0x1F40; | ||
| 959 | break; | ||
| 960 | case 1843200: | 952 | case 1843200: |
| 961 | mul = 0x2400; | 953 | mul = 0x2400; |
| 962 | break; | 954 | break; |
| 955 | case 3000000: | ||
| 956 | case 2500000: | ||
| 957 | case 2000000: | ||
| 963 | case 1500000: | 958 | case 1500000: |
| 964 | mul = 0x1770; | ||
| 965 | break; | ||
| 966 | case 1000000: | 959 | case 1000000: |
| 967 | mul = 0xFA0; | ||
| 968 | break; | ||
| 969 | case 500000: | 960 | case 500000: |
| 970 | mul = 0x7D0; | 961 | /* mul/ps/quot = 0x9C4/0x10/0x1 will make a 500000 bps */ |
| 962 | mul = baud / 500000 * 0x9C4; | ||
| 971 | break; | 963 | break; |
| 972 | default: | 964 | default: |
| 973 | /* Use uart_get_divisor to get quot for other baud rates */ | 965 | /* Use uart_get_divisor to get quot for other baud rates */ |
diff --git a/drivers/staging/asus_oled/asus_oled.c b/drivers/staging/asus_oled/asus_oled.c index 8c95d8c2a4f4..016c6f7f8630 100644 --- a/drivers/staging/asus_oled/asus_oled.c +++ b/drivers/staging/asus_oled/asus_oled.c | |||
| @@ -620,13 +620,13 @@ static ssize_t class_set_picture(struct device *device, | |||
| 620 | 620 | ||
| 621 | #define ASUS_OLED_DEVICE_ATTR(_file) dev_attr_asus_oled_##_file | 621 | #define ASUS_OLED_DEVICE_ATTR(_file) dev_attr_asus_oled_##_file |
| 622 | 622 | ||
| 623 | static DEVICE_ATTR(asus_oled_enabled, S_IWUGO | S_IRUGO, | 623 | static DEVICE_ATTR(asus_oled_enabled, S_IWUSR | S_IRUGO, |
| 624 | get_enabled, set_enabled); | 624 | get_enabled, set_enabled); |
| 625 | static DEVICE_ATTR(asus_oled_picture, S_IWUGO , NULL, set_picture); | 625 | static DEVICE_ATTR(asus_oled_picture, S_IWUSR , NULL, set_picture); |
| 626 | 626 | ||
| 627 | static DEVICE_ATTR(enabled, S_IWUGO | S_IRUGO, | 627 | static DEVICE_ATTR(enabled, S_IWUSR | S_IRUGO, |
| 628 | class_get_enabled, class_set_enabled); | 628 | class_get_enabled, class_set_enabled); |
| 629 | static DEVICE_ATTR(picture, S_IWUGO, NULL, class_set_picture); | 629 | static DEVICE_ATTR(picture, S_IWUSR, NULL, class_set_picture); |
| 630 | 630 | ||
| 631 | static int asus_oled_probe(struct usb_interface *interface, | 631 | static int asus_oled_probe(struct usb_interface *interface, |
| 632 | const struct usb_device_id *id) | 632 | const struct usb_device_id *id) |
diff --git a/drivers/staging/batman-adv/hard-interface.c b/drivers/staging/batman-adv/hard-interface.c index b68a7e5173be..d85de82f941a 100644 --- a/drivers/staging/batman-adv/hard-interface.c +++ b/drivers/staging/batman-adv/hard-interface.c | |||
| @@ -463,9 +463,6 @@ static void hardif_remove_interface(struct batman_if *batman_if) | |||
| 463 | return; | 463 | return; |
| 464 | 464 | ||
| 465 | batman_if->if_status = IF_TO_BE_REMOVED; | 465 | batman_if->if_status = IF_TO_BE_REMOVED; |
| 466 | |||
| 467 | /* caller must take if_list_lock */ | ||
| 468 | list_del_rcu(&batman_if->list); | ||
| 469 | synchronize_rcu(); | 466 | synchronize_rcu(); |
| 470 | sysfs_del_hardif(&batman_if->hardif_obj); | 467 | sysfs_del_hardif(&batman_if->hardif_obj); |
| 471 | hardif_put(batman_if); | 468 | hardif_put(batman_if); |
| @@ -474,13 +471,21 @@ static void hardif_remove_interface(struct batman_if *batman_if) | |||
| 474 | void hardif_remove_interfaces(void) | 471 | void hardif_remove_interfaces(void) |
| 475 | { | 472 | { |
| 476 | struct batman_if *batman_if, *batman_if_tmp; | 473 | struct batman_if *batman_if, *batman_if_tmp; |
| 474 | struct list_head if_queue; | ||
| 475 | |||
| 476 | INIT_LIST_HEAD(&if_queue); | ||
| 477 | 477 | ||
| 478 | rtnl_lock(); | ||
| 479 | spin_lock(&if_list_lock); | 478 | spin_lock(&if_list_lock); |
| 480 | list_for_each_entry_safe(batman_if, batman_if_tmp, &if_list, list) { | 479 | list_for_each_entry_safe(batman_if, batman_if_tmp, &if_list, list) { |
| 481 | hardif_remove_interface(batman_if); | 480 | list_del_rcu(&batman_if->list); |
| 481 | list_add_tail(&batman_if->list, &if_queue); | ||
| 482 | } | 482 | } |
| 483 | spin_unlock(&if_list_lock); | 483 | spin_unlock(&if_list_lock); |
| 484 | |||
| 485 | rtnl_lock(); | ||
| 486 | list_for_each_entry_safe(batman_if, batman_if_tmp, &if_queue, list) { | ||
| 487 | hardif_remove_interface(batman_if); | ||
| 488 | } | ||
| 484 | rtnl_unlock(); | 489 | rtnl_unlock(); |
| 485 | } | 490 | } |
| 486 | 491 | ||
| @@ -507,8 +512,10 @@ static int hard_if_event(struct notifier_block *this, | |||
| 507 | break; | 512 | break; |
| 508 | case NETDEV_UNREGISTER: | 513 | case NETDEV_UNREGISTER: |
| 509 | spin_lock(&if_list_lock); | 514 | spin_lock(&if_list_lock); |
| 510 | hardif_remove_interface(batman_if); | 515 | list_del_rcu(&batman_if->list); |
| 511 | spin_unlock(&if_list_lock); | 516 | spin_unlock(&if_list_lock); |
| 517 | |||
| 518 | hardif_remove_interface(batman_if); | ||
| 512 | break; | 519 | break; |
| 513 | case NETDEV_CHANGEMTU: | 520 | case NETDEV_CHANGEMTU: |
| 514 | if (batman_if->soft_iface) | 521 | if (batman_if->soft_iface) |
diff --git a/drivers/staging/batman-adv/soft-interface.c b/drivers/staging/batman-adv/soft-interface.c index 3904db9ce7b1..0e996181daf7 100644 --- a/drivers/staging/batman-adv/soft-interface.c +++ b/drivers/staging/batman-adv/soft-interface.c | |||
| @@ -194,14 +194,15 @@ void interface_rx(struct net_device *soft_iface, | |||
| 194 | struct bat_priv *priv = netdev_priv(soft_iface); | 194 | struct bat_priv *priv = netdev_priv(soft_iface); |
| 195 | 195 | ||
| 196 | /* check if enough space is available for pulling, and pull */ | 196 | /* check if enough space is available for pulling, and pull */ |
| 197 | if (!pskb_may_pull(skb, hdr_size)) { | 197 | if (!pskb_may_pull(skb, hdr_size)) |
| 198 | kfree_skb(skb); | 198 | goto dropped; |
| 199 | return; | 199 | |
| 200 | } | ||
| 201 | skb_pull_rcsum(skb, hdr_size); | 200 | skb_pull_rcsum(skb, hdr_size); |
| 202 | /* skb_set_mac_header(skb, -sizeof(struct ethhdr));*/ | 201 | /* skb_set_mac_header(skb, -sizeof(struct ethhdr));*/ |
| 203 | 202 | ||
| 204 | /* skb->dev & skb->pkt_type are set here */ | 203 | /* skb->dev & skb->pkt_type are set here */ |
| 204 | if (unlikely(!pskb_may_pull(skb, ETH_HLEN))) | ||
| 205 | goto dropped; | ||
| 205 | skb->protocol = eth_type_trans(skb, soft_iface); | 206 | skb->protocol = eth_type_trans(skb, soft_iface); |
| 206 | 207 | ||
| 207 | /* should not be neccesary anymore as we use skb_pull_rcsum() | 208 | /* should not be neccesary anymore as we use skb_pull_rcsum() |
| @@ -216,6 +217,11 @@ void interface_rx(struct net_device *soft_iface, | |||
| 216 | soft_iface->last_rx = jiffies; | 217 | soft_iface->last_rx = jiffies; |
| 217 | 218 | ||
| 218 | netif_rx(skb); | 219 | netif_rx(skb); |
| 220 | return; | ||
| 221 | |||
| 222 | dropped: | ||
| 223 | kfree_skb(skb); | ||
| 224 | return; | ||
| 219 | } | 225 | } |
| 220 | 226 | ||
| 221 | #ifdef HAVE_NET_DEVICE_OPS | 227 | #ifdef HAVE_NET_DEVICE_OPS |
diff --git a/drivers/staging/brcm80211/README b/drivers/staging/brcm80211/README index c8f1cf1b4409..a27bb0b4f581 100644 --- a/drivers/staging/brcm80211/README +++ b/drivers/staging/brcm80211/README | |||
| @@ -88,7 +88,9 @@ with the driver. | |||
| 88 | 88 | ||
| 89 | Contact Info: | 89 | Contact Info: |
| 90 | ============= | 90 | ============= |
| 91 | Brett Rudley brudley@broadcom.com | 91 | Brett Rudley brudley@broadcom.com |
| 92 | Henry Ptasinski henryp@broadcom.com | 92 | Henry Ptasinski henryp@broadcom.com |
| 93 | Dowan Kim dowan@broadcom.com | 93 | Dowan Kim dowan@broadcom.com |
| 94 | Roland Vossen rvossen@broadcom.com | ||
| 95 | Arend van Spriel arend@broadcom.com | ||
| 94 | 96 | ||
diff --git a/drivers/staging/brcm80211/TODO b/drivers/staging/brcm80211/TODO index dbf904184899..24ebadbe4241 100644 --- a/drivers/staging/brcm80211/TODO +++ b/drivers/staging/brcm80211/TODO | |||
| @@ -46,4 +46,6 @@ Contact | |||
| 46 | Brett Rudley <brudley@broadcom.com> | 46 | Brett Rudley <brudley@broadcom.com> |
| 47 | Henry Ptasinski <henryp@broadcom.com> | 47 | Henry Ptasinski <henryp@broadcom.com> |
| 48 | Dowan Kim <dowan@broadcom.com> | 48 | Dowan Kim <dowan@broadcom.com> |
| 49 | Roland Vossen <rvossen@broadcom.com> | ||
| 50 | Arend van Spriel <arend@broadcom.com> | ||
| 49 | 51 | ||
diff --git a/drivers/staging/comedi/drivers/usbdux.c b/drivers/staging/comedi/drivers/usbdux.c index 1f177a67ff11..de784ff08caa 100644 --- a/drivers/staging/comedi/drivers/usbdux.c +++ b/drivers/staging/comedi/drivers/usbdux.c | |||
| @@ -2295,8 +2295,8 @@ static void tidy_up(struct usbduxsub *usbduxsub_tmp) | |||
| 2295 | usbduxsub_tmp->inBuffer = NULL; | 2295 | usbduxsub_tmp->inBuffer = NULL; |
| 2296 | kfree(usbduxsub_tmp->insnBuffer); | 2296 | kfree(usbduxsub_tmp->insnBuffer); |
| 2297 | usbduxsub_tmp->insnBuffer = NULL; | 2297 | usbduxsub_tmp->insnBuffer = NULL; |
| 2298 | kfree(usbduxsub_tmp->inBuffer); | 2298 | kfree(usbduxsub_tmp->outBuffer); |
| 2299 | usbduxsub_tmp->inBuffer = NULL; | 2299 | usbduxsub_tmp->outBuffer = NULL; |
| 2300 | kfree(usbduxsub_tmp->dac_commands); | 2300 | kfree(usbduxsub_tmp->dac_commands); |
| 2301 | usbduxsub_tmp->dac_commands = NULL; | 2301 | usbduxsub_tmp->dac_commands = NULL; |
| 2302 | kfree(usbduxsub_tmp->dux_commands); | 2302 | kfree(usbduxsub_tmp->dux_commands); |
diff --git a/drivers/staging/easycap/easycap.h b/drivers/staging/easycap/easycap.h index 25961c23dc0f..884263b2775d 100644 --- a/drivers/staging/easycap/easycap.h +++ b/drivers/staging/easycap/easycap.h | |||
| @@ -75,6 +75,7 @@ | |||
| 75 | #include <linux/errno.h> | 75 | #include <linux/errno.h> |
| 76 | #include <linux/init.h> | 76 | #include <linux/init.h> |
| 77 | #include <linux/slab.h> | 77 | #include <linux/slab.h> |
| 78 | #include <linux/smp_lock.h> | ||
| 78 | #include <linux/module.h> | 79 | #include <linux/module.h> |
| 79 | #include <linux/kref.h> | 80 | #include <linux/kref.h> |
| 80 | #include <linux/usb.h> | 81 | #include <linux/usb.h> |
diff --git a/drivers/staging/frontier/tranzport.c b/drivers/staging/frontier/tranzport.c index a145a15cfdb3..8894ab14f167 100644 --- a/drivers/staging/frontier/tranzport.c +++ b/drivers/staging/frontier/tranzport.c | |||
| @@ -204,7 +204,7 @@ static void usb_tranzport_abort_transfers(struct usb_tranzport *dev) | |||
| 204 | t->value = temp; \ | 204 | t->value = temp; \ |
| 205 | return count; \ | 205 | return count; \ |
| 206 | } \ | 206 | } \ |
| 207 | static DEVICE_ATTR(value, S_IWUGO | S_IRUGO, show_##value, set_##value); | 207 | static DEVICE_ATTR(value, S_IWUSR | S_IRUGO, show_##value, set_##value); |
| 208 | 208 | ||
| 209 | show_int(enable); | 209 | show_int(enable); |
| 210 | show_int(offline); | 210 | show_int(offline); |
diff --git a/drivers/staging/iio/accel/adis16220_core.c b/drivers/staging/iio/accel/adis16220_core.c index c86d1498737d..1c1e98aee2d9 100644 --- a/drivers/staging/iio/accel/adis16220_core.c +++ b/drivers/staging/iio/accel/adis16220_core.c | |||
| @@ -507,7 +507,7 @@ static IIO_DEVICE_ATTR(reset, S_IWUSR, NULL, | |||
| 507 | adis16220_write_reset, 0); | 507 | adis16220_write_reset, 0); |
| 508 | 508 | ||
| 509 | #define IIO_DEV_ATTR_CAPTURE(_store) \ | 509 | #define IIO_DEV_ATTR_CAPTURE(_store) \ |
| 510 | IIO_DEVICE_ATTR(capture, S_IWUGO, NULL, _store, 0) | 510 | IIO_DEVICE_ATTR(capture, S_IWUSR, NULL, _store, 0) |
| 511 | 511 | ||
| 512 | static IIO_DEV_ATTR_CAPTURE(adis16220_write_capture); | 512 | static IIO_DEV_ATTR_CAPTURE(adis16220_write_capture); |
| 513 | 513 | ||
diff --git a/drivers/staging/intel_sst/intel_sst_stream_encoded.c b/drivers/staging/intel_sst/intel_sst_stream_encoded.c index fbae39fda5c0..5c455608b024 100644 --- a/drivers/staging/intel_sst/intel_sst_stream_encoded.c +++ b/drivers/staging/intel_sst/intel_sst_stream_encoded.c | |||
| @@ -1269,7 +1269,7 @@ finish: | |||
| 1269 | dbufs->output_bytes_produced = total_output; | 1269 | dbufs->output_bytes_produced = total_output; |
| 1270 | str_info->status = str_info->prev; | 1270 | str_info->status = str_info->prev; |
| 1271 | str_info->prev = STREAM_DECODE; | 1271 | str_info->prev = STREAM_DECODE; |
| 1272 | str_info->decode_ibuf = NULL; | ||
| 1273 | kfree(str_info->decode_ibuf); | 1272 | kfree(str_info->decode_ibuf); |
| 1273 | str_info->decode_ibuf = NULL; | ||
| 1274 | return retval; | 1274 | return retval; |
| 1275 | } | 1275 | } |
diff --git a/drivers/staging/line6/control.c b/drivers/staging/line6/control.c index 040e25ca6d33..67e23b6e2d35 100644 --- a/drivers/staging/line6/control.c +++ b/drivers/staging/line6/control.c | |||
| @@ -266,210 +266,210 @@ VARIAX_PARAM_R(float, mix2); | |||
| 266 | VARIAX_PARAM_R(float, mix1); | 266 | VARIAX_PARAM_R(float, mix1); |
| 267 | VARIAX_PARAM_R(int, pickup_wiring); | 267 | VARIAX_PARAM_R(int, pickup_wiring); |
| 268 | 268 | ||
| 269 | static DEVICE_ATTR(tweak, S_IWUGO | S_IRUGO, pod_get_tweak, pod_set_tweak); | 269 | static DEVICE_ATTR(tweak, S_IWUSR | S_IRUGO, pod_get_tweak, pod_set_tweak); |
| 270 | static DEVICE_ATTR(wah_position, S_IWUGO | S_IRUGO, pod_get_wah_position, | 270 | static DEVICE_ATTR(wah_position, S_IWUSR | S_IRUGO, pod_get_wah_position, |
| 271 | pod_set_wah_position); | 271 | pod_set_wah_position); |
| 272 | static DEVICE_ATTR(compression_gain, S_IWUGO | S_IRUGO, | 272 | static DEVICE_ATTR(compression_gain, S_IWUSR | S_IRUGO, |
| 273 | pod_get_compression_gain, pod_set_compression_gain); | 273 | pod_get_compression_gain, pod_set_compression_gain); |
| 274 | static DEVICE_ATTR(vol_pedal_position, S_IWUGO | S_IRUGO, | 274 | static DEVICE_ATTR(vol_pedal_position, S_IWUSR | S_IRUGO, |
| 275 | pod_get_vol_pedal_position, pod_set_vol_pedal_position); | 275 | pod_get_vol_pedal_position, pod_set_vol_pedal_position); |
| 276 | static DEVICE_ATTR(compression_threshold, S_IWUGO | S_IRUGO, | 276 | static DEVICE_ATTR(compression_threshold, S_IWUSR | S_IRUGO, |
| 277 | pod_get_compression_threshold, | 277 | pod_get_compression_threshold, |
| 278 | pod_set_compression_threshold); | 278 | pod_set_compression_threshold); |
| 279 | static DEVICE_ATTR(pan, S_IWUGO | S_IRUGO, pod_get_pan, pod_set_pan); | 279 | static DEVICE_ATTR(pan, S_IWUSR | S_IRUGO, pod_get_pan, pod_set_pan); |
| 280 | static DEVICE_ATTR(amp_model_setup, S_IWUGO | S_IRUGO, pod_get_amp_model_setup, | 280 | static DEVICE_ATTR(amp_model_setup, S_IWUSR | S_IRUGO, pod_get_amp_model_setup, |
| 281 | pod_set_amp_model_setup); | 281 | pod_set_amp_model_setup); |
| 282 | static DEVICE_ATTR(amp_model, S_IWUGO | S_IRUGO, pod_get_amp_model, | 282 | static DEVICE_ATTR(amp_model, S_IWUSR | S_IRUGO, pod_get_amp_model, |
| 283 | pod_set_amp_model); | 283 | pod_set_amp_model); |
| 284 | static DEVICE_ATTR(drive, S_IWUGO | S_IRUGO, pod_get_drive, pod_set_drive); | 284 | static DEVICE_ATTR(drive, S_IWUSR | S_IRUGO, pod_get_drive, pod_set_drive); |
| 285 | static DEVICE_ATTR(bass, S_IWUGO | S_IRUGO, pod_get_bass, pod_set_bass); | 285 | static DEVICE_ATTR(bass, S_IWUSR | S_IRUGO, pod_get_bass, pod_set_bass); |
| 286 | static DEVICE_ATTR(mid, S_IWUGO | S_IRUGO, pod_get_mid, pod_set_mid); | 286 | static DEVICE_ATTR(mid, S_IWUSR | S_IRUGO, pod_get_mid, pod_set_mid); |
| 287 | static DEVICE_ATTR(lowmid, S_IWUGO | S_IRUGO, pod_get_lowmid, pod_set_lowmid); | 287 | static DEVICE_ATTR(lowmid, S_IWUSR | S_IRUGO, pod_get_lowmid, pod_set_lowmid); |
| 288 | static DEVICE_ATTR(treble, S_IWUGO | S_IRUGO, pod_get_treble, pod_set_treble); | 288 | static DEVICE_ATTR(treble, S_IWUSR | S_IRUGO, pod_get_treble, pod_set_treble); |
| 289 | static DEVICE_ATTR(highmid, S_IWUGO | S_IRUGO, pod_get_highmid, | 289 | static DEVICE_ATTR(highmid, S_IWUSR | S_IRUGO, pod_get_highmid, |
| 290 | pod_set_highmid); | 290 | pod_set_highmid); |
| 291 | static DEVICE_ATTR(chan_vol, S_IWUGO | S_IRUGO, pod_get_chan_vol, | 291 | static DEVICE_ATTR(chan_vol, S_IWUSR | S_IRUGO, pod_get_chan_vol, |
| 292 | pod_set_chan_vol); | 292 | pod_set_chan_vol); |
| 293 | static DEVICE_ATTR(reverb_mix, S_IWUGO | S_IRUGO, pod_get_reverb_mix, | 293 | static DEVICE_ATTR(reverb_mix, S_IWUSR | S_IRUGO, pod_get_reverb_mix, |
| 294 | pod_set_reverb_mix); | 294 | pod_set_reverb_mix); |
| 295 | static DEVICE_ATTR(effect_setup, S_IWUGO | S_IRUGO, pod_get_effect_setup, | 295 | static DEVICE_ATTR(effect_setup, S_IWUSR | S_IRUGO, pod_get_effect_setup, |
| 296 | pod_set_effect_setup); | 296 | pod_set_effect_setup); |
| 297 | static DEVICE_ATTR(band_1_frequency, S_IWUGO | S_IRUGO, | 297 | static DEVICE_ATTR(band_1_frequency, S_IWUSR | S_IRUGO, |
| 298 | pod_get_band_1_frequency, pod_set_band_1_frequency); | 298 | pod_get_band_1_frequency, pod_set_band_1_frequency); |
| 299 | static DEVICE_ATTR(presence, S_IWUGO | S_IRUGO, pod_get_presence, | 299 | static DEVICE_ATTR(presence, S_IWUSR | S_IRUGO, pod_get_presence, |
| 300 | pod_set_presence); | 300 | pod_set_presence); |
| 301 | static DEVICE_ATTR2(treble__bass, treble, S_IWUGO | S_IRUGO, | 301 | static DEVICE_ATTR2(treble__bass, treble, S_IWUSR | S_IRUGO, |
| 302 | pod_get_treble__bass, pod_set_treble__bass); | 302 | pod_get_treble__bass, pod_set_treble__bass); |
| 303 | static DEVICE_ATTR(noise_gate_enable, S_IWUGO | S_IRUGO, | 303 | static DEVICE_ATTR(noise_gate_enable, S_IWUSR | S_IRUGO, |
| 304 | pod_get_noise_gate_enable, pod_set_noise_gate_enable); | 304 | pod_get_noise_gate_enable, pod_set_noise_gate_enable); |
| 305 | static DEVICE_ATTR(gate_threshold, S_IWUGO | S_IRUGO, pod_get_gate_threshold, | 305 | static DEVICE_ATTR(gate_threshold, S_IWUSR | S_IRUGO, pod_get_gate_threshold, |
| 306 | pod_set_gate_threshold); | 306 | pod_set_gate_threshold); |
| 307 | static DEVICE_ATTR(gate_decay_time, S_IWUGO | S_IRUGO, pod_get_gate_decay_time, | 307 | static DEVICE_ATTR(gate_decay_time, S_IWUSR | S_IRUGO, pod_get_gate_decay_time, |
| 308 | pod_set_gate_decay_time); | 308 | pod_set_gate_decay_time); |
| 309 | static DEVICE_ATTR(stomp_enable, S_IWUGO | S_IRUGO, pod_get_stomp_enable, | 309 | static DEVICE_ATTR(stomp_enable, S_IWUSR | S_IRUGO, pod_get_stomp_enable, |
| 310 | pod_set_stomp_enable); | 310 | pod_set_stomp_enable); |
| 311 | static DEVICE_ATTR(comp_enable, S_IWUGO | S_IRUGO, pod_get_comp_enable, | 311 | static DEVICE_ATTR(comp_enable, S_IWUSR | S_IRUGO, pod_get_comp_enable, |
| 312 | pod_set_comp_enable); | 312 | pod_set_comp_enable); |
| 313 | static DEVICE_ATTR(stomp_time, S_IWUGO | S_IRUGO, pod_get_stomp_time, | 313 | static DEVICE_ATTR(stomp_time, S_IWUSR | S_IRUGO, pod_get_stomp_time, |
| 314 | pod_set_stomp_time); | 314 | pod_set_stomp_time); |
| 315 | static DEVICE_ATTR(delay_enable, S_IWUGO | S_IRUGO, pod_get_delay_enable, | 315 | static DEVICE_ATTR(delay_enable, S_IWUSR | S_IRUGO, pod_get_delay_enable, |
| 316 | pod_set_delay_enable); | 316 | pod_set_delay_enable); |
| 317 | static DEVICE_ATTR(mod_param_1, S_IWUGO | S_IRUGO, pod_get_mod_param_1, | 317 | static DEVICE_ATTR(mod_param_1, S_IWUSR | S_IRUGO, pod_get_mod_param_1, |
| 318 | pod_set_mod_param_1); | 318 | pod_set_mod_param_1); |
| 319 | static DEVICE_ATTR(delay_param_1, S_IWUGO | S_IRUGO, pod_get_delay_param_1, | 319 | static DEVICE_ATTR(delay_param_1, S_IWUSR | S_IRUGO, pod_get_delay_param_1, |
| 320 | pod_set_delay_param_1); | 320 | pod_set_delay_param_1); |
| 321 | static DEVICE_ATTR(delay_param_1_note_value, S_IWUGO | S_IRUGO, | 321 | static DEVICE_ATTR(delay_param_1_note_value, S_IWUSR | S_IRUGO, |
| 322 | pod_get_delay_param_1_note_value, | 322 | pod_get_delay_param_1_note_value, |
| 323 | pod_set_delay_param_1_note_value); | 323 | pod_set_delay_param_1_note_value); |
| 324 | static DEVICE_ATTR2(band_2_frequency__bass, band_2_frequency, S_IWUGO | S_IRUGO, | 324 | static DEVICE_ATTR2(band_2_frequency__bass, band_2_frequency, S_IWUSR | S_IRUGO, |
| 325 | pod_get_band_2_frequency__bass, | 325 | pod_get_band_2_frequency__bass, |
| 326 | pod_set_band_2_frequency__bass); | 326 | pod_set_band_2_frequency__bass); |
| 327 | static DEVICE_ATTR(delay_param_2, S_IWUGO | S_IRUGO, pod_get_delay_param_2, | 327 | static DEVICE_ATTR(delay_param_2, S_IWUSR | S_IRUGO, pod_get_delay_param_2, |
| 328 | pod_set_delay_param_2); | 328 | pod_set_delay_param_2); |
| 329 | static DEVICE_ATTR(delay_volume_mix, S_IWUGO | S_IRUGO, | 329 | static DEVICE_ATTR(delay_volume_mix, S_IWUSR | S_IRUGO, |
| 330 | pod_get_delay_volume_mix, pod_set_delay_volume_mix); | 330 | pod_get_delay_volume_mix, pod_set_delay_volume_mix); |
| 331 | static DEVICE_ATTR(delay_param_3, S_IWUGO | S_IRUGO, pod_get_delay_param_3, | 331 | static DEVICE_ATTR(delay_param_3, S_IWUSR | S_IRUGO, pod_get_delay_param_3, |
| 332 | pod_set_delay_param_3); | 332 | pod_set_delay_param_3); |
| 333 | static DEVICE_ATTR(reverb_enable, S_IWUGO | S_IRUGO, pod_get_reverb_enable, | 333 | static DEVICE_ATTR(reverb_enable, S_IWUSR | S_IRUGO, pod_get_reverb_enable, |
| 334 | pod_set_reverb_enable); | 334 | pod_set_reverb_enable); |
| 335 | static DEVICE_ATTR(reverb_type, S_IWUGO | S_IRUGO, pod_get_reverb_type, | 335 | static DEVICE_ATTR(reverb_type, S_IWUSR | S_IRUGO, pod_get_reverb_type, |
| 336 | pod_set_reverb_type); | 336 | pod_set_reverb_type); |
| 337 | static DEVICE_ATTR(reverb_decay, S_IWUGO | S_IRUGO, pod_get_reverb_decay, | 337 | static DEVICE_ATTR(reverb_decay, S_IWUSR | S_IRUGO, pod_get_reverb_decay, |
| 338 | pod_set_reverb_decay); | 338 | pod_set_reverb_decay); |
| 339 | static DEVICE_ATTR(reverb_tone, S_IWUGO | S_IRUGO, pod_get_reverb_tone, | 339 | static DEVICE_ATTR(reverb_tone, S_IWUSR | S_IRUGO, pod_get_reverb_tone, |
| 340 | pod_set_reverb_tone); | 340 | pod_set_reverb_tone); |
| 341 | static DEVICE_ATTR(reverb_pre_delay, S_IWUGO | S_IRUGO, | 341 | static DEVICE_ATTR(reverb_pre_delay, S_IWUSR | S_IRUGO, |
| 342 | pod_get_reverb_pre_delay, pod_set_reverb_pre_delay); | 342 | pod_get_reverb_pre_delay, pod_set_reverb_pre_delay); |
| 343 | static DEVICE_ATTR(reverb_pre_post, S_IWUGO | S_IRUGO, pod_get_reverb_pre_post, | 343 | static DEVICE_ATTR(reverb_pre_post, S_IWUSR | S_IRUGO, pod_get_reverb_pre_post, |
| 344 | pod_set_reverb_pre_post); | 344 | pod_set_reverb_pre_post); |
| 345 | static DEVICE_ATTR(band_2_frequency, S_IWUGO | S_IRUGO, | 345 | static DEVICE_ATTR(band_2_frequency, S_IWUSR | S_IRUGO, |
| 346 | pod_get_band_2_frequency, pod_set_band_2_frequency); | 346 | pod_get_band_2_frequency, pod_set_band_2_frequency); |
| 347 | static DEVICE_ATTR2(band_3_frequency__bass, band_3_frequency, S_IWUGO | S_IRUGO, | 347 | static DEVICE_ATTR2(band_3_frequency__bass, band_3_frequency, S_IWUSR | S_IRUGO, |
| 348 | pod_get_band_3_frequency__bass, | 348 | pod_get_band_3_frequency__bass, |
| 349 | pod_set_band_3_frequency__bass); | 349 | pod_set_band_3_frequency__bass); |
| 350 | static DEVICE_ATTR(wah_enable, S_IWUGO | S_IRUGO, pod_get_wah_enable, | 350 | static DEVICE_ATTR(wah_enable, S_IWUSR | S_IRUGO, pod_get_wah_enable, |
| 351 | pod_set_wah_enable); | 351 | pod_set_wah_enable); |
| 352 | static DEVICE_ATTR(modulation_lo_cut, S_IWUGO | S_IRUGO, | 352 | static DEVICE_ATTR(modulation_lo_cut, S_IWUSR | S_IRUGO, |
| 353 | pod_get_modulation_lo_cut, pod_set_modulation_lo_cut); | 353 | pod_get_modulation_lo_cut, pod_set_modulation_lo_cut); |
| 354 | static DEVICE_ATTR(delay_reverb_lo_cut, S_IWUGO | S_IRUGO, | 354 | static DEVICE_ATTR(delay_reverb_lo_cut, S_IWUSR | S_IRUGO, |
| 355 | pod_get_delay_reverb_lo_cut, pod_set_delay_reverb_lo_cut); | 355 | pod_get_delay_reverb_lo_cut, pod_set_delay_reverb_lo_cut); |
| 356 | static DEVICE_ATTR(volume_pedal_minimum, S_IWUGO | S_IRUGO, | 356 | static DEVICE_ATTR(volume_pedal_minimum, S_IWUSR | S_IRUGO, |
| 357 | pod_get_volume_pedal_minimum, pod_set_volume_pedal_minimum); | 357 | pod_get_volume_pedal_minimum, pod_set_volume_pedal_minimum); |
| 358 | static DEVICE_ATTR(eq_pre_post, S_IWUGO | S_IRUGO, pod_get_eq_pre_post, | 358 | static DEVICE_ATTR(eq_pre_post, S_IWUSR | S_IRUGO, pod_get_eq_pre_post, |
| 359 | pod_set_eq_pre_post); | 359 | pod_set_eq_pre_post); |
| 360 | static DEVICE_ATTR(volume_pre_post, S_IWUGO | S_IRUGO, pod_get_volume_pre_post, | 360 | static DEVICE_ATTR(volume_pre_post, S_IWUSR | S_IRUGO, pod_get_volume_pre_post, |
| 361 | pod_set_volume_pre_post); | 361 | pod_set_volume_pre_post); |
| 362 | static DEVICE_ATTR(di_model, S_IWUGO | S_IRUGO, pod_get_di_model, | 362 | static DEVICE_ATTR(di_model, S_IWUSR | S_IRUGO, pod_get_di_model, |
| 363 | pod_set_di_model); | 363 | pod_set_di_model); |
| 364 | static DEVICE_ATTR(di_delay, S_IWUGO | S_IRUGO, pod_get_di_delay, | 364 | static DEVICE_ATTR(di_delay, S_IWUSR | S_IRUGO, pod_get_di_delay, |
| 365 | pod_set_di_delay); | 365 | pod_set_di_delay); |
| 366 | static DEVICE_ATTR(mod_enable, S_IWUGO | S_IRUGO, pod_get_mod_enable, | 366 | static DEVICE_ATTR(mod_enable, S_IWUSR | S_IRUGO, pod_get_mod_enable, |
| 367 | pod_set_mod_enable); | 367 | pod_set_mod_enable); |
| 368 | static DEVICE_ATTR(mod_param_1_note_value, S_IWUGO | S_IRUGO, | 368 | static DEVICE_ATTR(mod_param_1_note_value, S_IWUSR | S_IRUGO, |
| 369 | pod_get_mod_param_1_note_value, | 369 | pod_get_mod_param_1_note_value, |
| 370 | pod_set_mod_param_1_note_value); | 370 | pod_set_mod_param_1_note_value); |
| 371 | static DEVICE_ATTR(mod_param_2, S_IWUGO | S_IRUGO, pod_get_mod_param_2, | 371 | static DEVICE_ATTR(mod_param_2, S_IWUSR | S_IRUGO, pod_get_mod_param_2, |
| 372 | pod_set_mod_param_2); | 372 | pod_set_mod_param_2); |
| 373 | static DEVICE_ATTR(mod_param_3, S_IWUGO | S_IRUGO, pod_get_mod_param_3, | 373 | static DEVICE_ATTR(mod_param_3, S_IWUSR | S_IRUGO, pod_get_mod_param_3, |
| 374 | pod_set_mod_param_3); | 374 | pod_set_mod_param_3); |
| 375 | static DEVICE_ATTR(mod_param_4, S_IWUGO | S_IRUGO, pod_get_mod_param_4, | 375 | static DEVICE_ATTR(mod_param_4, S_IWUSR | S_IRUGO, pod_get_mod_param_4, |
| 376 | pod_set_mod_param_4); | 376 | pod_set_mod_param_4); |
| 377 | static DEVICE_ATTR(mod_param_5, S_IWUGO | S_IRUGO, pod_get_mod_param_5, | 377 | static DEVICE_ATTR(mod_param_5, S_IWUSR | S_IRUGO, pod_get_mod_param_5, |
| 378 | pod_set_mod_param_5); | 378 | pod_set_mod_param_5); |
| 379 | static DEVICE_ATTR(mod_volume_mix, S_IWUGO | S_IRUGO, pod_get_mod_volume_mix, | 379 | static DEVICE_ATTR(mod_volume_mix, S_IWUSR | S_IRUGO, pod_get_mod_volume_mix, |
| 380 | pod_set_mod_volume_mix); | 380 | pod_set_mod_volume_mix); |
| 381 | static DEVICE_ATTR(mod_pre_post, S_IWUGO | S_IRUGO, pod_get_mod_pre_post, | 381 | static DEVICE_ATTR(mod_pre_post, S_IWUSR | S_IRUGO, pod_get_mod_pre_post, |
| 382 | pod_set_mod_pre_post); | 382 | pod_set_mod_pre_post); |
| 383 | static DEVICE_ATTR(modulation_model, S_IWUGO | S_IRUGO, | 383 | static DEVICE_ATTR(modulation_model, S_IWUSR | S_IRUGO, |
| 384 | pod_get_modulation_model, pod_set_modulation_model); | 384 | pod_get_modulation_model, pod_set_modulation_model); |
| 385 | static DEVICE_ATTR(band_3_frequency, S_IWUGO | S_IRUGO, | 385 | static DEVICE_ATTR(band_3_frequency, S_IWUSR | S_IRUGO, |
| 386 | pod_get_band_3_frequency, pod_set_band_3_frequency); | 386 | pod_get_band_3_frequency, pod_set_band_3_frequency); |
| 387 | static DEVICE_ATTR2(band_4_frequency__bass, band_4_frequency, S_IWUGO | S_IRUGO, | 387 | static DEVICE_ATTR2(band_4_frequency__bass, band_4_frequency, S_IWUSR | S_IRUGO, |
| 388 | pod_get_band_4_frequency__bass, | 388 | pod_get_band_4_frequency__bass, |
| 389 | pod_set_band_4_frequency__bass); | 389 | pod_set_band_4_frequency__bass); |
| 390 | static DEVICE_ATTR(mod_param_1_double_precision, S_IWUGO | S_IRUGO, | 390 | static DEVICE_ATTR(mod_param_1_double_precision, S_IWUSR | S_IRUGO, |
| 391 | pod_get_mod_param_1_double_precision, | 391 | pod_get_mod_param_1_double_precision, |
| 392 | pod_set_mod_param_1_double_precision); | 392 | pod_set_mod_param_1_double_precision); |
| 393 | static DEVICE_ATTR(delay_param_1_double_precision, S_IWUGO | S_IRUGO, | 393 | static DEVICE_ATTR(delay_param_1_double_precision, S_IWUSR | S_IRUGO, |
| 394 | pod_get_delay_param_1_double_precision, | 394 | pod_get_delay_param_1_double_precision, |
| 395 | pod_set_delay_param_1_double_precision); | 395 | pod_set_delay_param_1_double_precision); |
| 396 | static DEVICE_ATTR(eq_enable, S_IWUGO | S_IRUGO, pod_get_eq_enable, | 396 | static DEVICE_ATTR(eq_enable, S_IWUSR | S_IRUGO, pod_get_eq_enable, |
| 397 | pod_set_eq_enable); | 397 | pod_set_eq_enable); |
| 398 | static DEVICE_ATTR(tap, S_IWUGO | S_IRUGO, pod_get_tap, pod_set_tap); | 398 | static DEVICE_ATTR(tap, S_IWUSR | S_IRUGO, pod_get_tap, pod_set_tap); |
| 399 | static DEVICE_ATTR(volume_tweak_pedal_assign, S_IWUGO | S_IRUGO, | 399 | static DEVICE_ATTR(volume_tweak_pedal_assign, S_IWUSR | S_IRUGO, |
| 400 | pod_get_volume_tweak_pedal_assign, | 400 | pod_get_volume_tweak_pedal_assign, |
| 401 | pod_set_volume_tweak_pedal_assign); | 401 | pod_set_volume_tweak_pedal_assign); |
| 402 | static DEVICE_ATTR(band_5_frequency, S_IWUGO | S_IRUGO, | 402 | static DEVICE_ATTR(band_5_frequency, S_IWUSR | S_IRUGO, |
| 403 | pod_get_band_5_frequency, pod_set_band_5_frequency); | 403 | pod_get_band_5_frequency, pod_set_band_5_frequency); |
| 404 | static DEVICE_ATTR(tuner, S_IWUGO | S_IRUGO, pod_get_tuner, pod_set_tuner); | 404 | static DEVICE_ATTR(tuner, S_IWUSR | S_IRUGO, pod_get_tuner, pod_set_tuner); |
| 405 | static DEVICE_ATTR(mic_selection, S_IWUGO | S_IRUGO, pod_get_mic_selection, | 405 | static DEVICE_ATTR(mic_selection, S_IWUSR | S_IRUGO, pod_get_mic_selection, |
| 406 | pod_set_mic_selection); | 406 | pod_set_mic_selection); |
| 407 | static DEVICE_ATTR(cabinet_model, S_IWUGO | S_IRUGO, pod_get_cabinet_model, | 407 | static DEVICE_ATTR(cabinet_model, S_IWUSR | S_IRUGO, pod_get_cabinet_model, |
| 408 | pod_set_cabinet_model); | 408 | pod_set_cabinet_model); |
| 409 | static DEVICE_ATTR(stomp_model, S_IWUGO | S_IRUGO, pod_get_stomp_model, | 409 | static DEVICE_ATTR(stomp_model, S_IWUSR | S_IRUGO, pod_get_stomp_model, |
| 410 | pod_set_stomp_model); | 410 | pod_set_stomp_model); |
| 411 | static DEVICE_ATTR(roomlevel, S_IWUGO | S_IRUGO, pod_get_roomlevel, | 411 | static DEVICE_ATTR(roomlevel, S_IWUSR | S_IRUGO, pod_get_roomlevel, |
| 412 | pod_set_roomlevel); | 412 | pod_set_roomlevel); |
| 413 | static DEVICE_ATTR(band_4_frequency, S_IWUGO | S_IRUGO, | 413 | static DEVICE_ATTR(band_4_frequency, S_IWUSR | S_IRUGO, |
| 414 | pod_get_band_4_frequency, pod_set_band_4_frequency); | 414 | pod_get_band_4_frequency, pod_set_band_4_frequency); |
| 415 | static DEVICE_ATTR(band_6_frequency, S_IWUGO | S_IRUGO, | 415 | static DEVICE_ATTR(band_6_frequency, S_IWUSR | S_IRUGO, |
| 416 | pod_get_band_6_frequency, pod_set_band_6_frequency); | 416 | pod_get_band_6_frequency, pod_set_band_6_frequency); |
| 417 | static DEVICE_ATTR(stomp_param_1_note_value, S_IWUGO | S_IRUGO, | 417 | static DEVICE_ATTR(stomp_param_1_note_value, S_IWUSR | S_IRUGO, |
| 418 | pod_get_stomp_param_1_note_value, | 418 | pod_get_stomp_param_1_note_value, |
| 419 | pod_set_stomp_param_1_note_value); | 419 | pod_set_stomp_param_1_note_value); |
| 420 | static DEVICE_ATTR(stomp_param_2, S_IWUGO | S_IRUGO, pod_get_stomp_param_2, | 420 | static DEVICE_ATTR(stomp_param_2, S_IWUSR | S_IRUGO, pod_get_stomp_param_2, |
| 421 | pod_set_stomp_param_2); | 421 | pod_set_stomp_param_2); |
| 422 | static DEVICE_ATTR(stomp_param_3, S_IWUGO | S_IRUGO, pod_get_stomp_param_3, | 422 | static DEVICE_ATTR(stomp_param_3, S_IWUSR | S_IRUGO, pod_get_stomp_param_3, |
| 423 | pod_set_stomp_param_3); | 423 | pod_set_stomp_param_3); |
| 424 | static DEVICE_ATTR(stomp_param_4, S_IWUGO | S_IRUGO, pod_get_stomp_param_4, | 424 | static DEVICE_ATTR(stomp_param_4, S_IWUSR | S_IRUGO, pod_get_stomp_param_4, |
| 425 | pod_set_stomp_param_4); | 425 | pod_set_stomp_param_4); |
| 426 | static DEVICE_ATTR(stomp_param_5, S_IWUGO | S_IRUGO, pod_get_stomp_param_5, | 426 | static DEVICE_ATTR(stomp_param_5, S_IWUSR | S_IRUGO, pod_get_stomp_param_5, |
| 427 | pod_set_stomp_param_5); | 427 | pod_set_stomp_param_5); |
| 428 | static DEVICE_ATTR(stomp_param_6, S_IWUGO | S_IRUGO, pod_get_stomp_param_6, | 428 | static DEVICE_ATTR(stomp_param_6, S_IWUSR | S_IRUGO, pod_get_stomp_param_6, |
| 429 | pod_set_stomp_param_6); | 429 | pod_set_stomp_param_6); |
| 430 | static DEVICE_ATTR(amp_switch_select, S_IWUGO | S_IRUGO, | 430 | static DEVICE_ATTR(amp_switch_select, S_IWUSR | S_IRUGO, |
| 431 | pod_get_amp_switch_select, pod_set_amp_switch_select); | 431 | pod_get_amp_switch_select, pod_set_amp_switch_select); |
| 432 | static DEVICE_ATTR(delay_param_4, S_IWUGO | S_IRUGO, pod_get_delay_param_4, | 432 | static DEVICE_ATTR(delay_param_4, S_IWUSR | S_IRUGO, pod_get_delay_param_4, |
| 433 | pod_set_delay_param_4); | 433 | pod_set_delay_param_4); |
| 434 | static DEVICE_ATTR(delay_param_5, S_IWUGO | S_IRUGO, pod_get_delay_param_5, | 434 | static DEVICE_ATTR(delay_param_5, S_IWUSR | S_IRUGO, pod_get_delay_param_5, |
| 435 | pod_set_delay_param_5); | 435 | pod_set_delay_param_5); |
| 436 | static DEVICE_ATTR(delay_pre_post, S_IWUGO | S_IRUGO, pod_get_delay_pre_post, | 436 | static DEVICE_ATTR(delay_pre_post, S_IWUSR | S_IRUGO, pod_get_delay_pre_post, |
| 437 | pod_set_delay_pre_post); | 437 | pod_set_delay_pre_post); |
| 438 | static DEVICE_ATTR(delay_model, S_IWUGO | S_IRUGO, pod_get_delay_model, | 438 | static DEVICE_ATTR(delay_model, S_IWUSR | S_IRUGO, pod_get_delay_model, |
| 439 | pod_set_delay_model); | 439 | pod_set_delay_model); |
| 440 | static DEVICE_ATTR(delay_verb_model, S_IWUGO | S_IRUGO, | 440 | static DEVICE_ATTR(delay_verb_model, S_IWUSR | S_IRUGO, |
| 441 | pod_get_delay_verb_model, pod_set_delay_verb_model); | 441 | pod_get_delay_verb_model, pod_set_delay_verb_model); |
| 442 | static DEVICE_ATTR(tempo_msb, S_IWUGO | S_IRUGO, pod_get_tempo_msb, | 442 | static DEVICE_ATTR(tempo_msb, S_IWUSR | S_IRUGO, pod_get_tempo_msb, |
| 443 | pod_set_tempo_msb); | 443 | pod_set_tempo_msb); |
| 444 | static DEVICE_ATTR(tempo_lsb, S_IWUGO | S_IRUGO, pod_get_tempo_lsb, | 444 | static DEVICE_ATTR(tempo_lsb, S_IWUSR | S_IRUGO, pod_get_tempo_lsb, |
| 445 | pod_set_tempo_lsb); | 445 | pod_set_tempo_lsb); |
| 446 | static DEVICE_ATTR(wah_model, S_IWUGO | S_IRUGO, pod_get_wah_model, | 446 | static DEVICE_ATTR(wah_model, S_IWUSR | S_IRUGO, pod_get_wah_model, |
| 447 | pod_set_wah_model); | 447 | pod_set_wah_model); |
| 448 | static DEVICE_ATTR(bypass_volume, S_IWUGO | S_IRUGO, pod_get_bypass_volume, | 448 | static DEVICE_ATTR(bypass_volume, S_IWUSR | S_IRUGO, pod_get_bypass_volume, |
| 449 | pod_set_bypass_volume); | 449 | pod_set_bypass_volume); |
| 450 | static DEVICE_ATTR(fx_loop_on_off, S_IWUGO | S_IRUGO, pod_get_fx_loop_on_off, | 450 | static DEVICE_ATTR(fx_loop_on_off, S_IWUSR | S_IRUGO, pod_get_fx_loop_on_off, |
| 451 | pod_set_fx_loop_on_off); | 451 | pod_set_fx_loop_on_off); |
| 452 | static DEVICE_ATTR(tweak_param_select, S_IWUGO | S_IRUGO, | 452 | static DEVICE_ATTR(tweak_param_select, S_IWUSR | S_IRUGO, |
| 453 | pod_get_tweak_param_select, pod_set_tweak_param_select); | 453 | pod_get_tweak_param_select, pod_set_tweak_param_select); |
| 454 | static DEVICE_ATTR(amp1_engage, S_IWUGO | S_IRUGO, pod_get_amp1_engage, | 454 | static DEVICE_ATTR(amp1_engage, S_IWUSR | S_IRUGO, pod_get_amp1_engage, |
| 455 | pod_set_amp1_engage); | 455 | pod_set_amp1_engage); |
| 456 | static DEVICE_ATTR(band_1_gain, S_IWUGO | S_IRUGO, pod_get_band_1_gain, | 456 | static DEVICE_ATTR(band_1_gain, S_IWUSR | S_IRUGO, pod_get_band_1_gain, |
| 457 | pod_set_band_1_gain); | 457 | pod_set_band_1_gain); |
| 458 | static DEVICE_ATTR2(band_2_gain__bass, band_2_gain, S_IWUGO | S_IRUGO, | 458 | static DEVICE_ATTR2(band_2_gain__bass, band_2_gain, S_IWUSR | S_IRUGO, |
| 459 | pod_get_band_2_gain__bass, pod_set_band_2_gain__bass); | 459 | pod_get_band_2_gain__bass, pod_set_band_2_gain__bass); |
| 460 | static DEVICE_ATTR(band_2_gain, S_IWUGO | S_IRUGO, pod_get_band_2_gain, | 460 | static DEVICE_ATTR(band_2_gain, S_IWUSR | S_IRUGO, pod_get_band_2_gain, |
| 461 | pod_set_band_2_gain); | 461 | pod_set_band_2_gain); |
| 462 | static DEVICE_ATTR2(band_3_gain__bass, band_3_gain, S_IWUGO | S_IRUGO, | 462 | static DEVICE_ATTR2(band_3_gain__bass, band_3_gain, S_IWUSR | S_IRUGO, |
| 463 | pod_get_band_3_gain__bass, pod_set_band_3_gain__bass); | 463 | pod_get_band_3_gain__bass, pod_set_band_3_gain__bass); |
| 464 | static DEVICE_ATTR(band_3_gain, S_IWUGO | S_IRUGO, pod_get_band_3_gain, | 464 | static DEVICE_ATTR(band_3_gain, S_IWUSR | S_IRUGO, pod_get_band_3_gain, |
| 465 | pod_set_band_3_gain); | 465 | pod_set_band_3_gain); |
| 466 | static DEVICE_ATTR2(band_4_gain__bass, band_4_gain, S_IWUGO | S_IRUGO, | 466 | static DEVICE_ATTR2(band_4_gain__bass, band_4_gain, S_IWUSR | S_IRUGO, |
| 467 | pod_get_band_4_gain__bass, pod_set_band_4_gain__bass); | 467 | pod_get_band_4_gain__bass, pod_set_band_4_gain__bass); |
| 468 | static DEVICE_ATTR2(band_5_gain__bass, band_5_gain, S_IWUGO | S_IRUGO, | 468 | static DEVICE_ATTR2(band_5_gain__bass, band_5_gain, S_IWUSR | S_IRUGO, |
| 469 | pod_get_band_5_gain__bass, pod_set_band_5_gain__bass); | 469 | pod_get_band_5_gain__bass, pod_set_band_5_gain__bass); |
| 470 | static DEVICE_ATTR(band_4_gain, S_IWUGO | S_IRUGO, pod_get_band_4_gain, | 470 | static DEVICE_ATTR(band_4_gain, S_IWUSR | S_IRUGO, pod_get_band_4_gain, |
| 471 | pod_set_band_4_gain); | 471 | pod_set_band_4_gain); |
| 472 | static DEVICE_ATTR2(band_6_gain__bass, band_6_gain, S_IWUGO | S_IRUGO, | 472 | static DEVICE_ATTR2(band_6_gain__bass, band_6_gain, S_IWUSR | S_IRUGO, |
| 473 | pod_get_band_6_gain__bass, pod_set_band_6_gain__bass); | 473 | pod_get_band_6_gain__bass, pod_set_band_6_gain__bass); |
| 474 | static DEVICE_ATTR(body, S_IRUGO, variax_get_body, line6_nop_write); | 474 | static DEVICE_ATTR(body, S_IRUGO, variax_get_body, line6_nop_write); |
| 475 | static DEVICE_ATTR(pickup1_enable, S_IRUGO, variax_get_pickup1_enable, | 475 | static DEVICE_ATTR(pickup1_enable, S_IRUGO, variax_get_pickup1_enable, |
diff --git a/drivers/staging/line6/midi.c b/drivers/staging/line6/midi.c index 4304dfe6c166..ab67e889d2c4 100644 --- a/drivers/staging/line6/midi.c +++ b/drivers/staging/line6/midi.c | |||
| @@ -350,9 +350,9 @@ static ssize_t midi_set_midi_mask_receive(struct device *dev, | |||
| 350 | return count; | 350 | return count; |
| 351 | } | 351 | } |
| 352 | 352 | ||
| 353 | static DEVICE_ATTR(midi_mask_transmit, S_IWUGO | S_IRUGO, | 353 | static DEVICE_ATTR(midi_mask_transmit, S_IWUSR | S_IRUGO, |
| 354 | midi_get_midi_mask_transmit, midi_set_midi_mask_transmit); | 354 | midi_get_midi_mask_transmit, midi_set_midi_mask_transmit); |
| 355 | static DEVICE_ATTR(midi_mask_receive, S_IWUGO | S_IRUGO, | 355 | static DEVICE_ATTR(midi_mask_receive, S_IWUSR | S_IRUGO, |
| 356 | midi_get_midi_mask_receive, midi_set_midi_mask_receive); | 356 | midi_get_midi_mask_receive, midi_set_midi_mask_receive); |
| 357 | 357 | ||
| 358 | /* MIDI device destructor */ | 358 | /* MIDI device destructor */ |
diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c index e54770e34d2e..b9c55f9eb501 100644 --- a/drivers/staging/line6/pcm.c +++ b/drivers/staging/line6/pcm.c | |||
| @@ -79,9 +79,9 @@ static ssize_t pcm_set_impulse_period(struct device *dev, | |||
| 79 | return count; | 79 | return count; |
| 80 | } | 80 | } |
| 81 | 81 | ||
| 82 | static DEVICE_ATTR(impulse_volume, S_IWUGO | S_IRUGO, pcm_get_impulse_volume, | 82 | static DEVICE_ATTR(impulse_volume, S_IWUSR | S_IRUGO, pcm_get_impulse_volume, |
| 83 | pcm_set_impulse_volume); | 83 | pcm_set_impulse_volume); |
| 84 | static DEVICE_ATTR(impulse_period, S_IWUGO | S_IRUGO, pcm_get_impulse_period, | 84 | static DEVICE_ATTR(impulse_period, S_IWUSR | S_IRUGO, pcm_get_impulse_period, |
| 85 | pcm_set_impulse_period); | 85 | pcm_set_impulse_period); |
| 86 | 86 | ||
| 87 | #endif | 87 | #endif |
diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c index 22e2cedcacf7..d9b30212585c 100644 --- a/drivers/staging/line6/pod.c +++ b/drivers/staging/line6/pod.c | |||
| @@ -1051,48 +1051,48 @@ POD_GET_SYSTEM_PARAM(tuner_pitch, 1); | |||
| 1051 | #undef GET_SYSTEM_PARAM | 1051 | #undef GET_SYSTEM_PARAM |
| 1052 | 1052 | ||
| 1053 | /* POD special files: */ | 1053 | /* POD special files: */ |
| 1054 | static DEVICE_ATTR(channel, S_IWUGO | S_IRUGO, pod_get_channel, | 1054 | static DEVICE_ATTR(channel, S_IWUSR | S_IRUGO, pod_get_channel, |
| 1055 | pod_set_channel); | 1055 | pod_set_channel); |
| 1056 | static DEVICE_ATTR(clip, S_IRUGO, pod_wait_for_clip, line6_nop_write); | 1056 | static DEVICE_ATTR(clip, S_IRUGO, pod_wait_for_clip, line6_nop_write); |
| 1057 | static DEVICE_ATTR(device_id, S_IRUGO, pod_get_device_id, line6_nop_write); | 1057 | static DEVICE_ATTR(device_id, S_IRUGO, pod_get_device_id, line6_nop_write); |
| 1058 | static DEVICE_ATTR(dirty, S_IRUGO, pod_get_dirty, line6_nop_write); | 1058 | static DEVICE_ATTR(dirty, S_IRUGO, pod_get_dirty, line6_nop_write); |
| 1059 | static DEVICE_ATTR(dump, S_IWUGO | S_IRUGO, pod_get_dump, pod_set_dump); | 1059 | static DEVICE_ATTR(dump, S_IWUSR | S_IRUGO, pod_get_dump, pod_set_dump); |
| 1060 | static DEVICE_ATTR(dump_buf, S_IWUGO | S_IRUGO, pod_get_dump_buf, | 1060 | static DEVICE_ATTR(dump_buf, S_IWUSR | S_IRUGO, pod_get_dump_buf, |
| 1061 | pod_set_dump_buf); | 1061 | pod_set_dump_buf); |
| 1062 | static DEVICE_ATTR(finish, S_IWUGO, line6_nop_read, pod_set_finish); | 1062 | static DEVICE_ATTR(finish, S_IWUSR, line6_nop_read, pod_set_finish); |
| 1063 | static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version, | 1063 | static DEVICE_ATTR(firmware_version, S_IRUGO, pod_get_firmware_version, |
| 1064 | line6_nop_write); | 1064 | line6_nop_write); |
| 1065 | static DEVICE_ATTR(midi_postprocess, S_IWUGO | S_IRUGO, | 1065 | static DEVICE_ATTR(midi_postprocess, S_IWUSR | S_IRUGO, |
| 1066 | pod_get_midi_postprocess, pod_set_midi_postprocess); | 1066 | pod_get_midi_postprocess, pod_set_midi_postprocess); |
| 1067 | static DEVICE_ATTR(monitor_level, S_IWUGO | S_IRUGO, pod_get_monitor_level, | 1067 | static DEVICE_ATTR(monitor_level, S_IWUSR | S_IRUGO, pod_get_monitor_level, |
| 1068 | pod_set_monitor_level); | 1068 | pod_set_monitor_level); |
| 1069 | static DEVICE_ATTR(name, S_IRUGO, pod_get_name, line6_nop_write); | 1069 | static DEVICE_ATTR(name, S_IRUGO, pod_get_name, line6_nop_write); |
| 1070 | static DEVICE_ATTR(name_buf, S_IRUGO, pod_get_name_buf, line6_nop_write); | 1070 | static DEVICE_ATTR(name_buf, S_IRUGO, pod_get_name_buf, line6_nop_write); |
| 1071 | static DEVICE_ATTR(retrieve_amp_setup, S_IWUGO, line6_nop_read, | 1071 | static DEVICE_ATTR(retrieve_amp_setup, S_IWUSR, line6_nop_read, |
| 1072 | pod_set_retrieve_amp_setup); | 1072 | pod_set_retrieve_amp_setup); |
| 1073 | static DEVICE_ATTR(retrieve_channel, S_IWUGO, line6_nop_read, | 1073 | static DEVICE_ATTR(retrieve_channel, S_IWUSR, line6_nop_read, |
| 1074 | pod_set_retrieve_channel); | 1074 | pod_set_retrieve_channel); |
| 1075 | static DEVICE_ATTR(retrieve_effects_setup, S_IWUGO, line6_nop_read, | 1075 | static DEVICE_ATTR(retrieve_effects_setup, S_IWUSR, line6_nop_read, |
| 1076 | pod_set_retrieve_effects_setup); | 1076 | pod_set_retrieve_effects_setup); |
| 1077 | static DEVICE_ATTR(routing, S_IWUGO | S_IRUGO, pod_get_routing, | 1077 | static DEVICE_ATTR(routing, S_IWUSR | S_IRUGO, pod_get_routing, |
| 1078 | pod_set_routing); | 1078 | pod_set_routing); |
| 1079 | static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number, | 1079 | static DEVICE_ATTR(serial_number, S_IRUGO, pod_get_serial_number, |
| 1080 | line6_nop_write); | 1080 | line6_nop_write); |
| 1081 | static DEVICE_ATTR(store_amp_setup, S_IWUGO, line6_nop_read, | 1081 | static DEVICE_ATTR(store_amp_setup, S_IWUSR, line6_nop_read, |
| 1082 | pod_set_store_amp_setup); | 1082 | pod_set_store_amp_setup); |
| 1083 | static DEVICE_ATTR(store_channel, S_IWUGO, line6_nop_read, | 1083 | static DEVICE_ATTR(store_channel, S_IWUSR, line6_nop_read, |
| 1084 | pod_set_store_channel); | 1084 | pod_set_store_channel); |
| 1085 | static DEVICE_ATTR(store_effects_setup, S_IWUGO, line6_nop_read, | 1085 | static DEVICE_ATTR(store_effects_setup, S_IWUSR, line6_nop_read, |
| 1086 | pod_set_store_effects_setup); | 1086 | pod_set_store_effects_setup); |
| 1087 | static DEVICE_ATTR(tuner_freq, S_IWUGO | S_IRUGO, pod_get_tuner_freq, | 1087 | static DEVICE_ATTR(tuner_freq, S_IWUSR | S_IRUGO, pod_get_tuner_freq, |
| 1088 | pod_set_tuner_freq); | 1088 | pod_set_tuner_freq); |
| 1089 | static DEVICE_ATTR(tuner_mute, S_IWUGO | S_IRUGO, pod_get_tuner_mute, | 1089 | static DEVICE_ATTR(tuner_mute, S_IWUSR | S_IRUGO, pod_get_tuner_mute, |
| 1090 | pod_set_tuner_mute); | 1090 | pod_set_tuner_mute); |
| 1091 | static DEVICE_ATTR(tuner_note, S_IRUGO, pod_get_tuner_note, line6_nop_write); | 1091 | static DEVICE_ATTR(tuner_note, S_IRUGO, pod_get_tuner_note, line6_nop_write); |
| 1092 | static DEVICE_ATTR(tuner_pitch, S_IRUGO, pod_get_tuner_pitch, line6_nop_write); | 1092 | static DEVICE_ATTR(tuner_pitch, S_IRUGO, pod_get_tuner_pitch, line6_nop_write); |
| 1093 | 1093 | ||
| 1094 | #ifdef CONFIG_LINE6_USB_RAW | 1094 | #ifdef CONFIG_LINE6_USB_RAW |
| 1095 | static DEVICE_ATTR(raw, S_IWUGO, line6_nop_read, line6_set_raw); | 1095 | static DEVICE_ATTR(raw, S_IWUSR, line6_nop_read, line6_set_raw); |
| 1096 | #endif | 1096 | #endif |
| 1097 | 1097 | ||
| 1098 | /* control info callback */ | 1098 | /* control info callback */ |
diff --git a/drivers/staging/line6/toneport.c b/drivers/staging/line6/toneport.c index 6a10b0f9749a..879e6992bbc6 100644 --- a/drivers/staging/line6/toneport.c +++ b/drivers/staging/line6/toneport.c | |||
| @@ -154,9 +154,9 @@ static ssize_t toneport_set_led_green(struct device *dev, | |||
| 154 | return count; | 154 | return count; |
| 155 | } | 155 | } |
| 156 | 156 | ||
| 157 | static DEVICE_ATTR(led_red, S_IWUGO | S_IRUGO, line6_nop_read, | 157 | static DEVICE_ATTR(led_red, S_IWUSR | S_IRUGO, line6_nop_read, |
| 158 | toneport_set_led_red); | 158 | toneport_set_led_red); |
| 159 | static DEVICE_ATTR(led_green, S_IWUGO | S_IRUGO, line6_nop_read, | 159 | static DEVICE_ATTR(led_green, S_IWUSR | S_IRUGO, line6_nop_read, |
| 160 | toneport_set_led_green); | 160 | toneport_set_led_green); |
| 161 | 161 | ||
| 162 | static int toneport_send_cmd(struct usb_device *usbdev, int cmd1, int cmd2) | 162 | static int toneport_send_cmd(struct usb_device *usbdev, int cmd1, int cmd2) |
diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c index 894eee7f2317..81241cdf1be9 100644 --- a/drivers/staging/line6/variax.c +++ b/drivers/staging/line6/variax.c | |||
| @@ -549,21 +549,21 @@ static ssize_t variax_set_raw2(struct device *dev, | |||
| 549 | #endif | 549 | #endif |
| 550 | 550 | ||
| 551 | /* Variax workbench special files: */ | 551 | /* Variax workbench special files: */ |
| 552 | static DEVICE_ATTR(model, S_IWUGO | S_IRUGO, variax_get_model, | 552 | static DEVICE_ATTR(model, S_IWUSR | S_IRUGO, variax_get_model, |
| 553 | variax_set_model); | 553 | variax_set_model); |
| 554 | static DEVICE_ATTR(volume, S_IWUGO | S_IRUGO, variax_get_volume, | 554 | static DEVICE_ATTR(volume, S_IWUSR | S_IRUGO, variax_get_volume, |
| 555 | variax_set_volume); | 555 | variax_set_volume); |
| 556 | static DEVICE_ATTR(tone, S_IWUGO | S_IRUGO, variax_get_tone, variax_set_tone); | 556 | static DEVICE_ATTR(tone, S_IWUSR | S_IRUGO, variax_get_tone, variax_set_tone); |
| 557 | static DEVICE_ATTR(name, S_IRUGO, variax_get_name, line6_nop_write); | 557 | static DEVICE_ATTR(name, S_IRUGO, variax_get_name, line6_nop_write); |
| 558 | static DEVICE_ATTR(bank, S_IRUGO, variax_get_bank, line6_nop_write); | 558 | static DEVICE_ATTR(bank, S_IRUGO, variax_get_bank, line6_nop_write); |
| 559 | static DEVICE_ATTR(dump, S_IRUGO, variax_get_dump, line6_nop_write); | 559 | static DEVICE_ATTR(dump, S_IRUGO, variax_get_dump, line6_nop_write); |
| 560 | static DEVICE_ATTR(active, S_IWUGO | S_IRUGO, variax_get_active, | 560 | static DEVICE_ATTR(active, S_IWUSR | S_IRUGO, variax_get_active, |
| 561 | variax_set_active); | 561 | variax_set_active); |
| 562 | static DEVICE_ATTR(guitar, S_IRUGO, variax_get_guitar, line6_nop_write); | 562 | static DEVICE_ATTR(guitar, S_IRUGO, variax_get_guitar, line6_nop_write); |
| 563 | 563 | ||
| 564 | #ifdef CONFIG_LINE6_USB_RAW | 564 | #ifdef CONFIG_LINE6_USB_RAW |
| 565 | static DEVICE_ATTR(raw, S_IWUGO, line6_nop_read, line6_set_raw); | 565 | static DEVICE_ATTR(raw, S_IWUSR, line6_nop_read, line6_set_raw); |
| 566 | static DEVICE_ATTR(raw2, S_IWUGO, line6_nop_read, variax_set_raw2); | 566 | static DEVICE_ATTR(raw2, S_IWUSR, line6_nop_read, variax_set_raw2); |
| 567 | #endif | 567 | #endif |
| 568 | 568 | ||
| 569 | /* | 569 | /* |
diff --git a/drivers/staging/quickstart/quickstart.c b/drivers/staging/quickstart/quickstart.c index d746715d3d89..d83bec876d2e 100644 --- a/drivers/staging/quickstart/quickstart.c +++ b/drivers/staging/quickstart/quickstart.c | |||
| @@ -355,7 +355,6 @@ static int quickstart_acpi_remove(struct acpi_device *device, int type) | |||
| 355 | static void quickstart_exit(void) | 355 | static void quickstart_exit(void) |
| 356 | { | 356 | { |
| 357 | input_unregister_device(quickstart_input); | 357 | input_unregister_device(quickstart_input); |
| 358 | input_free_device(quickstart_input); | ||
| 359 | 358 | ||
| 360 | device_remove_file(&pf_device->dev, &dev_attr_pressed_button); | 359 | device_remove_file(&pf_device->dev, &dev_attr_pressed_button); |
| 361 | device_remove_file(&pf_device->dev, &dev_attr_buttons); | 360 | device_remove_file(&pf_device->dev, &dev_attr_buttons); |
| @@ -375,6 +374,7 @@ static int __init quickstart_init_input(void) | |||
| 375 | { | 374 | { |
| 376 | struct quickstart_btn **ptr = &quickstart_data.btn_lst; | 375 | struct quickstart_btn **ptr = &quickstart_data.btn_lst; |
| 377 | int count; | 376 | int count; |
| 377 | int ret; | ||
| 378 | 378 | ||
| 379 | quickstart_input = input_allocate_device(); | 379 | quickstart_input = input_allocate_device(); |
| 380 | 380 | ||
| @@ -391,7 +391,13 @@ static int __init quickstart_init_input(void) | |||
| 391 | ptr = &((*ptr)->next); | 391 | ptr = &((*ptr)->next); |
| 392 | } | 392 | } |
| 393 | 393 | ||
| 394 | return input_register_device(quickstart_input); | 394 | ret = input_register_device(quickstart_input); |
| 395 | if (ret) { | ||
| 396 | input_free_device(quickstart_input); | ||
| 397 | return ret; | ||
| 398 | } | ||
| 399 | |||
| 400 | return 0; | ||
| 395 | } | 401 | } |
| 396 | 402 | ||
| 397 | static int __init quickstart_init(void) | 403 | static int __init quickstart_init(void) |
diff --git a/drivers/staging/rt2860/usb_main_dev.c b/drivers/staging/rt2860/usb_main_dev.c index ddacfc6c4861..cd15daae5412 100644 --- a/drivers/staging/rt2860/usb_main_dev.c +++ b/drivers/staging/rt2860/usb_main_dev.c | |||
| @@ -182,6 +182,7 @@ struct usb_device_id rtusb_usb_id[] = { | |||
| 182 | {USB_DEVICE(0x2001, 0x3C09)}, /* D-Link */ | 182 | {USB_DEVICE(0x2001, 0x3C09)}, /* D-Link */ |
| 183 | {USB_DEVICE(0x2001, 0x3C0A)}, /* D-Link 3072 */ | 183 | {USB_DEVICE(0x2001, 0x3C0A)}, /* D-Link 3072 */ |
| 184 | {USB_DEVICE(0x2019, 0xED14)}, /* Planex Communications, Inc. */ | 184 | {USB_DEVICE(0x2019, 0xED14)}, /* Planex Communications, Inc. */ |
| 185 | {USB_DEVICE(0x0411, 0x015D)}, /* Buffalo Airstation WLI-UC-GN */ | ||
| 185 | {} /* Terminating entry */ | 186 | {} /* Terminating entry */ |
| 186 | }; | 187 | }; |
| 187 | 188 | ||
diff --git a/drivers/staging/rtl8187se/r8185b_init.c b/drivers/staging/rtl8187se/r8185b_init.c index 46000d72f4c4..3bdf9b31cc4e 100644 --- a/drivers/staging/rtl8187se/r8185b_init.c +++ b/drivers/staging/rtl8187se/r8185b_init.c | |||
| @@ -264,8 +264,12 @@ HwHSSIThreeWire( | |||
| 264 | 264 | ||
| 265 | udelay(10); | 265 | udelay(10); |
| 266 | } | 266 | } |
| 267 | if (TryCnt == TC_3W_POLL_MAX_TRY_CNT) | 267 | if (TryCnt == TC_3W_POLL_MAX_TRY_CNT) { |
| 268 | panic("HwThreeWire(): CmdReg: %#X RE|WE bits are not clear!!\n", u1bTmp); | 268 | printk(KERN_ERR "rtl8187se: HwThreeWire(): CmdReg:" |
| 269 | " %#X RE|WE bits are not clear!!\n", u1bTmp); | ||
| 270 | dump_stack(); | ||
| 271 | return 0; | ||
| 272 | } | ||
| 269 | 273 | ||
| 270 | /* RTL8187S HSSI Read/Write Function */ | 274 | /* RTL8187S HSSI Read/Write Function */ |
| 271 | u1bTmp = read_nic_byte(dev, RF_SW_CONFIG); | 275 | u1bTmp = read_nic_byte(dev, RF_SW_CONFIG); |
| @@ -298,13 +302,23 @@ HwHSSIThreeWire( | |||
| 298 | int idx; | 302 | int idx; |
| 299 | int ByteCnt = nDataBufBitCnt / 8; | 303 | int ByteCnt = nDataBufBitCnt / 8; |
| 300 | /* printk("%d\n",nDataBufBitCnt); */ | 304 | /* printk("%d\n",nDataBufBitCnt); */ |
| 301 | if ((nDataBufBitCnt % 8) != 0) | 305 | if ((nDataBufBitCnt % 8) != 0) { |
| 302 | panic("HwThreeWire(): nDataBufBitCnt(%d) should be multiple of 8!!!\n", | 306 | printk(KERN_ERR "rtl8187se: " |
| 303 | nDataBufBitCnt); | 307 | "HwThreeWire(): nDataBufBitCnt(%d)" |
| 308 | " should be multiple of 8!!!\n", | ||
| 309 | nDataBufBitCnt); | ||
| 310 | dump_stack(); | ||
| 311 | nDataBufBitCnt += 8; | ||
| 312 | nDataBufBitCnt &= ~7; | ||
| 313 | } | ||
| 304 | 314 | ||
| 305 | if (nDataBufBitCnt > 64) | 315 | if (nDataBufBitCnt > 64) { |
| 306 | panic("HwThreeWire(): nDataBufBitCnt(%d) should <= 64!!!\n", | 316 | printk(KERN_ERR "rtl8187se: HwThreeWire():" |
| 307 | nDataBufBitCnt); | 317 | " nDataBufBitCnt(%d) should <= 64!!!\n", |
| 318 | nDataBufBitCnt); | ||
| 319 | dump_stack(); | ||
| 320 | nDataBufBitCnt = 64; | ||
| 321 | } | ||
| 308 | 322 | ||
| 309 | for (idx = 0; idx < ByteCnt; idx++) | 323 | for (idx = 0; idx < ByteCnt; idx++) |
| 310 | write_nic_byte(dev, (SW_3W_DB0+idx), *(pDataBuf+idx)); | 324 | write_nic_byte(dev, (SW_3W_DB0+idx), *(pDataBuf+idx)); |
diff --git a/drivers/staging/rtl8712/usb_halinit.c b/drivers/staging/rtl8712/usb_halinit.c index f6569dce3012..0e9483bbabe1 100644 --- a/drivers/staging/rtl8712/usb_halinit.c +++ b/drivers/staging/rtl8712/usb_halinit.c | |||
| @@ -37,7 +37,7 @@ u8 r8712_usb_hal_bus_init(struct _adapter *padapter) | |||
| 37 | { | 37 | { |
| 38 | u8 val8 = 0; | 38 | u8 val8 = 0; |
| 39 | u8 ret = _SUCCESS; | 39 | u8 ret = _SUCCESS; |
| 40 | u8 PollingCnt = 20; | 40 | int PollingCnt = 20; |
| 41 | struct registry_priv *pregistrypriv = &padapter->registrypriv; | 41 | struct registry_priv *pregistrypriv = &padapter->registrypriv; |
| 42 | 42 | ||
| 43 | if (pregistrypriv->chip_version == RTL8712_FPGA) { | 43 | if (pregistrypriv->chip_version == RTL8712_FPGA) { |
diff --git a/drivers/staging/samsung-laptop/samsung-laptop.c b/drivers/staging/samsung-laptop/samsung-laptop.c index eb44b60e1eb5..ac2bf11e1119 100644 --- a/drivers/staging/samsung-laptop/samsung-laptop.c +++ b/drivers/staging/samsung-laptop/samsung-laptop.c | |||
| @@ -356,7 +356,7 @@ static ssize_t set_silent_state(struct device *dev, | |||
| 356 | } | 356 | } |
| 357 | return count; | 357 | return count; |
| 358 | } | 358 | } |
| 359 | static DEVICE_ATTR(silent, S_IWUGO | S_IRUGO, | 359 | static DEVICE_ATTR(silent, S_IWUSR | S_IRUGO, |
| 360 | get_silent_state, set_silent_state); | 360 | get_silent_state, set_silent_state); |
| 361 | 361 | ||
| 362 | 362 | ||
diff --git a/drivers/staging/speakup/fakekey.c b/drivers/staging/speakup/fakekey.c index adb93f21c0d6..65b231178f05 100644 --- a/drivers/staging/speakup/fakekey.c +++ b/drivers/staging/speakup/fakekey.c | |||
| @@ -62,7 +62,6 @@ void speakup_remove_virtual_keyboard(void) | |||
| 62 | { | 62 | { |
| 63 | if (virt_keyboard != NULL) { | 63 | if (virt_keyboard != NULL) { |
| 64 | input_unregister_device(virt_keyboard); | 64 | input_unregister_device(virt_keyboard); |
| 65 | input_free_device(virt_keyboard); | ||
| 66 | virt_keyboard = NULL; | 65 | virt_keyboard = NULL; |
| 67 | } | 66 | } |
| 68 | } | 67 | } |
diff --git a/drivers/staging/spectra/ffsport.c b/drivers/staging/spectra/ffsport.c index c7932da03c56..63a9d0adf32d 100644 --- a/drivers/staging/spectra/ffsport.c +++ b/drivers/staging/spectra/ffsport.c | |||
| @@ -656,7 +656,7 @@ static int SBD_setup_device(struct spectra_nand_dev *dev, int which) | |||
| 656 | /* Here we force report 512 byte hardware sector size to Kernel */ | 656 | /* Here we force report 512 byte hardware sector size to Kernel */ |
| 657 | blk_queue_logical_block_size(dev->queue, 512); | 657 | blk_queue_logical_block_size(dev->queue, 512); |
| 658 | 658 | ||
| 659 | blk_queue_ordered(dev->queue, QUEUE_ORDERED_DRAIN_FLUSH); | 659 | blk_queue_flush(dev->queue, REQ_FLUSH); |
| 660 | 660 | ||
| 661 | dev->thread = kthread_run(spectra_trans_thread, dev, "nand_thd"); | 661 | dev->thread = kthread_run(spectra_trans_thread, dev, "nand_thd"); |
| 662 | if (IS_ERR(dev->thread)) { | 662 | if (IS_ERR(dev->thread)) { |
diff --git a/drivers/staging/udlfb/udlfb.c b/drivers/staging/udlfb/udlfb.c index fed25105970a..b7ac16005265 100644 --- a/drivers/staging/udlfb/udlfb.c +++ b/drivers/staging/udlfb/udlfb.c | |||
| @@ -1441,7 +1441,7 @@ static struct device_attribute fb_device_attrs[] = { | |||
| 1441 | __ATTR_RO(metrics_bytes_identical), | 1441 | __ATTR_RO(metrics_bytes_identical), |
| 1442 | __ATTR_RO(metrics_bytes_sent), | 1442 | __ATTR_RO(metrics_bytes_sent), |
| 1443 | __ATTR_RO(metrics_cpu_kcycles_used), | 1443 | __ATTR_RO(metrics_cpu_kcycles_used), |
| 1444 | __ATTR(metrics_reset, S_IWUGO, NULL, metrics_reset_store), | 1444 | __ATTR(metrics_reset, S_IWUSR, NULL, metrics_reset_store), |
| 1445 | }; | 1445 | }; |
| 1446 | 1446 | ||
| 1447 | /* | 1447 | /* |
diff --git a/drivers/staging/winbond/sysdef.h b/drivers/staging/winbond/sysdef.h index 9195adf98e14..d0d71f69bc8c 100644 --- a/drivers/staging/winbond/sysdef.h +++ b/drivers/staging/winbond/sysdef.h | |||
| @@ -2,6 +2,9 @@ | |||
| 2 | 2 | ||
| 3 | #ifndef SYS_DEF_H | 3 | #ifndef SYS_DEF_H |
| 4 | #define SYS_DEF_H | 4 | #define SYS_DEF_H |
| 5 | |||
| 6 | #include <linux/delay.h> | ||
| 7 | |||
| 5 | #define WB_LINUX | 8 | #define WB_LINUX |
| 6 | #define WB_LINUX_WPA_PSK | 9 | #define WB_LINUX_WPA_PSK |
| 7 | 10 | ||
diff --git a/drivers/staging/zram/zram_sysfs.c b/drivers/staging/zram/zram_sysfs.c index 6c574a994d11..6b3cf00b0ff4 100644 --- a/drivers/staging/zram/zram_sysfs.c +++ b/drivers/staging/zram/zram_sysfs.c | |||
| @@ -189,10 +189,10 @@ static ssize_t mem_used_total_show(struct device *dev, | |||
| 189 | return sprintf(buf, "%llu\n", val); | 189 | return sprintf(buf, "%llu\n", val); |
| 190 | } | 190 | } |
| 191 | 191 | ||
| 192 | static DEVICE_ATTR(disksize, S_IRUGO | S_IWUGO, | 192 | static DEVICE_ATTR(disksize, S_IRUGO | S_IWUSR, |
| 193 | disksize_show, disksize_store); | 193 | disksize_show, disksize_store); |
| 194 | static DEVICE_ATTR(initstate, S_IRUGO, initstate_show, NULL); | 194 | static DEVICE_ATTR(initstate, S_IRUGO, initstate_show, NULL); |
| 195 | static DEVICE_ATTR(reset, S_IWUGO, NULL, reset_store); | 195 | static DEVICE_ATTR(reset, S_IWUSR, NULL, reset_store); |
| 196 | static DEVICE_ATTR(num_reads, S_IRUGO, num_reads_show, NULL); | 196 | static DEVICE_ATTR(num_reads, S_IRUGO, num_reads_show, NULL); |
| 197 | static DEVICE_ATTR(num_writes, S_IRUGO, num_writes_show, NULL); | 197 | static DEVICE_ATTR(num_writes, S_IRUGO, num_writes_show, NULL); |
| 198 | static DEVICE_ATTR(invalid_io, S_IRUGO, invalid_io_show, NULL); | 198 | static DEVICE_ATTR(invalid_io, S_IRUGO, invalid_io_show, NULL); |
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c index c05c5af5aa04..35480dd57a30 100644 --- a/drivers/tty/tty_io.c +++ b/drivers/tty/tty_io.c | |||
| @@ -559,6 +559,9 @@ void __tty_hangup(struct tty_struct *tty) | |||
| 559 | 559 | ||
| 560 | tty_lock(); | 560 | tty_lock(); |
| 561 | 561 | ||
| 562 | /* some functions below drop BTM, so we need this bit */ | ||
| 563 | set_bit(TTY_HUPPING, &tty->flags); | ||
| 564 | |||
| 562 | /* inuse_filps is protected by the single tty lock, | 565 | /* inuse_filps is protected by the single tty lock, |
| 563 | this really needs to change if we want to flush the | 566 | this really needs to change if we want to flush the |
| 564 | workqueue with the lock held */ | 567 | workqueue with the lock held */ |
| @@ -578,6 +581,10 @@ void __tty_hangup(struct tty_struct *tty) | |||
| 578 | } | 581 | } |
| 579 | spin_unlock(&tty_files_lock); | 582 | spin_unlock(&tty_files_lock); |
| 580 | 583 | ||
| 584 | /* | ||
| 585 | * it drops BTM and thus races with reopen | ||
| 586 | * we protect the race by TTY_HUPPING | ||
| 587 | */ | ||
| 581 | tty_ldisc_hangup(tty); | 588 | tty_ldisc_hangup(tty); |
| 582 | 589 | ||
| 583 | read_lock(&tasklist_lock); | 590 | read_lock(&tasklist_lock); |
| @@ -615,7 +622,6 @@ void __tty_hangup(struct tty_struct *tty) | |||
| 615 | tty->session = NULL; | 622 | tty->session = NULL; |
| 616 | tty->pgrp = NULL; | 623 | tty->pgrp = NULL; |
| 617 | tty->ctrl_status = 0; | 624 | tty->ctrl_status = 0; |
| 618 | set_bit(TTY_HUPPED, &tty->flags); | ||
| 619 | spin_unlock_irqrestore(&tty->ctrl_lock, flags); | 625 | spin_unlock_irqrestore(&tty->ctrl_lock, flags); |
| 620 | 626 | ||
| 621 | /* Account for the p->signal references we killed */ | 627 | /* Account for the p->signal references we killed */ |
| @@ -641,6 +647,7 @@ void __tty_hangup(struct tty_struct *tty) | |||
| 641 | * can't yet guarantee all that. | 647 | * can't yet guarantee all that. |
| 642 | */ | 648 | */ |
| 643 | set_bit(TTY_HUPPED, &tty->flags); | 649 | set_bit(TTY_HUPPED, &tty->flags); |
| 650 | clear_bit(TTY_HUPPING, &tty->flags); | ||
| 644 | tty_ldisc_enable(tty); | 651 | tty_ldisc_enable(tty); |
| 645 | 652 | ||
| 646 | tty_unlock(); | 653 | tty_unlock(); |
| @@ -1310,7 +1317,9 @@ static int tty_reopen(struct tty_struct *tty) | |||
| 1310 | { | 1317 | { |
| 1311 | struct tty_driver *driver = tty->driver; | 1318 | struct tty_driver *driver = tty->driver; |
| 1312 | 1319 | ||
| 1313 | if (test_bit(TTY_CLOSING, &tty->flags)) | 1320 | if (test_bit(TTY_CLOSING, &tty->flags) || |
| 1321 | test_bit(TTY_HUPPING, &tty->flags) || | ||
| 1322 | test_bit(TTY_LDISC_CHANGING, &tty->flags)) | ||
| 1314 | return -EIO; | 1323 | return -EIO; |
| 1315 | 1324 | ||
| 1316 | if (driver->type == TTY_DRIVER_TYPE_PTY && | 1325 | if (driver->type == TTY_DRIVER_TYPE_PTY && |
diff --git a/drivers/tty/tty_ldisc.c b/drivers/tty/tty_ldisc.c index d8e96b005023..4214d58276f7 100644 --- a/drivers/tty/tty_ldisc.c +++ b/drivers/tty/tty_ldisc.c | |||
| @@ -454,6 +454,8 @@ static int tty_ldisc_open(struct tty_struct *tty, struct tty_ldisc *ld) | |||
| 454 | /* BTM here locks versus a hangup event */ | 454 | /* BTM here locks versus a hangup event */ |
| 455 | WARN_ON(!tty_locked()); | 455 | WARN_ON(!tty_locked()); |
| 456 | ret = ld->ops->open(tty); | 456 | ret = ld->ops->open(tty); |
| 457 | if (ret) | ||
| 458 | clear_bit(TTY_LDISC_OPEN, &tty->flags); | ||
| 457 | return ret; | 459 | return ret; |
| 458 | } | 460 | } |
| 459 | return 0; | 461 | return 0; |
diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c index a858d2b87b94..51fe1795d5a8 100644 --- a/drivers/uio/uio.c +++ b/drivers/uio/uio.c | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | * | 3 | * |
| 4 | * Copyright(C) 2005, Benedikt Spranger <b.spranger@linutronix.de> | 4 | * Copyright(C) 2005, Benedikt Spranger <b.spranger@linutronix.de> |
| 5 | * Copyright(C) 2005, Thomas Gleixner <tglx@linutronix.de> | 5 | * Copyright(C) 2005, Thomas Gleixner <tglx@linutronix.de> |
| 6 | * Copyright(C) 2006, Hans J. Koch <hjk@linutronix.de> | 6 | * Copyright(C) 2006, Hans J. Koch <hjk@hansjkoch.de> |
| 7 | * Copyright(C) 2006, Greg Kroah-Hartman <greg@kroah.com> | 7 | * Copyright(C) 2006, Greg Kroah-Hartman <greg@kroah.com> |
| 8 | * | 8 | * |
| 9 | * Userspace IO | 9 | * Userspace IO |
diff --git a/drivers/uio/uio_cif.c b/drivers/uio/uio_cif.c index a8ea2f19a0cc..a84a451159ed 100644 --- a/drivers/uio/uio_cif.c +++ b/drivers/uio/uio_cif.c | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * UIO Hilscher CIF card driver | 2 | * UIO Hilscher CIF card driver |
| 3 | * | 3 | * |
| 4 | * (C) 2007 Hans J. Koch <hjk@linutronix.de> | 4 | * (C) 2007 Hans J. Koch <hjk@hansjkoch.de> |
| 5 | * Original code (C) 2005 Benedikt Spranger <b.spranger@linutronix.de> | 5 | * Original code (C) 2005 Benedikt Spranger <b.spranger@linutronix.de> |
| 6 | * | 6 | * |
| 7 | * Licensed under GPL version 2 only. | 7 | * Licensed under GPL version 2 only. |
diff --git a/drivers/uio/uio_netx.c b/drivers/uio/uio_netx.c index 5a18e9f7b836..5ffdb483b015 100644 --- a/drivers/uio/uio_netx.c +++ b/drivers/uio/uio_netx.c | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * UIO driver for Hilscher NetX based fieldbus cards (cifX, comX). | 2 | * UIO driver for Hilscher NetX based fieldbus cards (cifX, comX). |
| 3 | * See http://www.hilscher.com for details. | 3 | * See http://www.hilscher.com for details. |
| 4 | * | 4 | * |
| 5 | * (C) 2007 Hans J. Koch <hjk@linutronix.de> | 5 | * (C) 2007 Hans J. Koch <hjk@hansjkoch.de> |
| 6 | * (C) 2008 Manuel Traut <manut@linutronix.de> | 6 | * (C) 2008 Manuel Traut <manut@linutronix.de> |
| 7 | * | 7 | * |
| 8 | * Licensed under GPL version 2 only. | 8 | * Licensed under GPL version 2 only. |
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index 61800f77dac8..ced846ac4141 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c | |||
| @@ -1330,6 +1330,8 @@ static int map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb, | |||
| 1330 | */ | 1330 | */ |
| 1331 | 1331 | ||
| 1332 | if (usb_endpoint_xfer_control(&urb->ep->desc)) { | 1332 | if (usb_endpoint_xfer_control(&urb->ep->desc)) { |
| 1333 | if (hcd->self.uses_pio_for_control) | ||
| 1334 | return ret; | ||
| 1333 | if (hcd->self.uses_dma) { | 1335 | if (hcd->self.uses_dma) { |
| 1334 | urb->setup_dma = dma_map_single( | 1336 | urb->setup_dma = dma_map_single( |
| 1335 | hcd->self.controller, | 1337 | hcd->self.controller, |
diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c index 01bb72b71832..655f3c9f88bf 100644 --- a/drivers/usb/host/ehci-pci.c +++ b/drivers/usb/host/ehci-pci.c | |||
| @@ -161,6 +161,18 @@ static int ehci_pci_setup(struct usb_hcd *hcd) | |||
| 161 | if (pdev->revision < 0xa4) | 161 | if (pdev->revision < 0xa4) |
| 162 | ehci->no_selective_suspend = 1; | 162 | ehci->no_selective_suspend = 1; |
| 163 | break; | 163 | break; |
| 164 | |||
| 165 | /* MCP89 chips on the MacBookAir3,1 give EPROTO when | ||
| 166 | * fetching device descriptors unless LPM is disabled. | ||
| 167 | * There are also intermittent problems enumerating | ||
| 168 | * devices with PPCD enabled. | ||
| 169 | */ | ||
| 170 | case 0x0d9d: | ||
| 171 | ehci_info(ehci, "disable lpm/ppcd for nvidia mcp89"); | ||
| 172 | ehci->has_lpm = 0; | ||
| 173 | ehci->has_ppcd = 0; | ||
| 174 | ehci->command &= ~CMD_PPCEE; | ||
| 175 | break; | ||
| 164 | } | 176 | } |
| 165 | break; | 177 | break; |
| 166 | case PCI_VENDOR_ID_VIA: | 178 | case PCI_VENDOR_ID_VIA: |
diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c index fef5a1f9d483..5d963e350494 100644 --- a/drivers/usb/host/xhci-hub.c +++ b/drivers/usb/host/xhci-hub.c | |||
| @@ -229,6 +229,13 @@ void xhci_ring_device(struct xhci_hcd *xhci, int slot_id) | |||
| 229 | static void xhci_disable_port(struct xhci_hcd *xhci, u16 wIndex, | 229 | static void xhci_disable_port(struct xhci_hcd *xhci, u16 wIndex, |
| 230 | u32 __iomem *addr, u32 port_status) | 230 | u32 __iomem *addr, u32 port_status) |
| 231 | { | 231 | { |
| 232 | /* Don't allow the USB core to disable SuperSpeed ports. */ | ||
| 233 | if (xhci->port_array[wIndex] == 0x03) { | ||
| 234 | xhci_dbg(xhci, "Ignoring request to disable " | ||
| 235 | "SuperSpeed port.\n"); | ||
| 236 | return; | ||
| 237 | } | ||
| 238 | |||
| 232 | /* Write 1 to disable the port */ | 239 | /* Write 1 to disable the port */ |
| 233 | xhci_writel(xhci, port_status | PORT_PE, addr); | 240 | xhci_writel(xhci, port_status | PORT_PE, addr); |
| 234 | port_status = xhci_readl(xhci, addr); | 241 | port_status = xhci_readl(xhci, addr); |
diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c index d178761c3981..0fae58ef8afe 100644 --- a/drivers/usb/host/xhci-mem.c +++ b/drivers/usb/host/xhci-mem.c | |||
| @@ -1443,6 +1443,13 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci) | |||
| 1443 | xhci->dcbaa = NULL; | 1443 | xhci->dcbaa = NULL; |
| 1444 | 1444 | ||
| 1445 | scratchpad_free(xhci); | 1445 | scratchpad_free(xhci); |
| 1446 | |||
| 1447 | xhci->num_usb2_ports = 0; | ||
| 1448 | xhci->num_usb3_ports = 0; | ||
| 1449 | kfree(xhci->usb2_ports); | ||
| 1450 | kfree(xhci->usb3_ports); | ||
| 1451 | kfree(xhci->port_array); | ||
| 1452 | |||
| 1446 | xhci->page_size = 0; | 1453 | xhci->page_size = 0; |
| 1447 | xhci->page_shift = 0; | 1454 | xhci->page_shift = 0; |
| 1448 | xhci->bus_suspended = 0; | 1455 | xhci->bus_suspended = 0; |
| @@ -1627,6 +1634,161 @@ static void xhci_set_hc_event_deq(struct xhci_hcd *xhci) | |||
| 1627 | &xhci->ir_set->erst_dequeue); | 1634 | &xhci->ir_set->erst_dequeue); |
| 1628 | } | 1635 | } |
| 1629 | 1636 | ||
| 1637 | static void xhci_add_in_port(struct xhci_hcd *xhci, unsigned int num_ports, | ||
| 1638 | u32 __iomem *addr, u8 major_revision) | ||
| 1639 | { | ||
| 1640 | u32 temp, port_offset, port_count; | ||
| 1641 | int i; | ||
| 1642 | |||
| 1643 | if (major_revision > 0x03) { | ||
| 1644 | xhci_warn(xhci, "Ignoring unknown port speed, " | ||
| 1645 | "Ext Cap %p, revision = 0x%x\n", | ||
| 1646 | addr, major_revision); | ||
| 1647 | /* Ignoring port protocol we can't understand. FIXME */ | ||
| 1648 | return; | ||
| 1649 | } | ||
| 1650 | |||
| 1651 | /* Port offset and count in the third dword, see section 7.2 */ | ||
| 1652 | temp = xhci_readl(xhci, addr + 2); | ||
| 1653 | port_offset = XHCI_EXT_PORT_OFF(temp); | ||
| 1654 | port_count = XHCI_EXT_PORT_COUNT(temp); | ||
| 1655 | xhci_dbg(xhci, "Ext Cap %p, port offset = %u, " | ||
| 1656 | "count = %u, revision = 0x%x\n", | ||
| 1657 | addr, port_offset, port_count, major_revision); | ||
| 1658 | /* Port count includes the current port offset */ | ||
| 1659 | if (port_offset == 0 || (port_offset + port_count - 1) > num_ports) | ||
| 1660 | /* WTF? "Valid values are ‘1’ to MaxPorts" */ | ||
| 1661 | return; | ||
| 1662 | port_offset--; | ||
| 1663 | for (i = port_offset; i < (port_offset + port_count); i++) { | ||
| 1664 | /* Duplicate entry. Ignore the port if the revisions differ. */ | ||
| 1665 | if (xhci->port_array[i] != 0) { | ||
| 1666 | xhci_warn(xhci, "Duplicate port entry, Ext Cap %p," | ||
| 1667 | " port %u\n", addr, i); | ||
| 1668 | xhci_warn(xhci, "Port was marked as USB %u, " | ||
| 1669 | "duplicated as USB %u\n", | ||
| 1670 | xhci->port_array[i], major_revision); | ||
| 1671 | /* Only adjust the roothub port counts if we haven't | ||
| 1672 | * found a similar duplicate. | ||
| 1673 | */ | ||
| 1674 | if (xhci->port_array[i] != major_revision && | ||
| 1675 | xhci->port_array[i] != (u8) -1) { | ||
| 1676 | if (xhci->port_array[i] == 0x03) | ||
| 1677 | xhci->num_usb3_ports--; | ||
| 1678 | else | ||
| 1679 | xhci->num_usb2_ports--; | ||
| 1680 | xhci->port_array[i] = (u8) -1; | ||
| 1681 | } | ||
| 1682 | /* FIXME: Should we disable the port? */ | ||
| 1683 | } | ||
| 1684 | xhci->port_array[i] = major_revision; | ||
| 1685 | if (major_revision == 0x03) | ||
| 1686 | xhci->num_usb3_ports++; | ||
| 1687 | else | ||
| 1688 | xhci->num_usb2_ports++; | ||
| 1689 | } | ||
| 1690 | /* FIXME: Should we disable ports not in the Extended Capabilities? */ | ||
| 1691 | } | ||
| 1692 | |||
| 1693 | /* | ||
| 1694 | * Scan the Extended Capabilities for the "Supported Protocol Capabilities" that | ||
| 1695 | * specify what speeds each port is supposed to be. We can't count on the port | ||
| 1696 | * speed bits in the PORTSC register being correct until a device is connected, | ||
| 1697 | * but we need to set up the two fake roothubs with the correct number of USB | ||
| 1698 | * 3.0 and USB 2.0 ports at host controller initialization time. | ||
| 1699 | */ | ||
| 1700 | static int xhci_setup_port_arrays(struct xhci_hcd *xhci, gfp_t flags) | ||
| 1701 | { | ||
| 1702 | u32 __iomem *addr; | ||
| 1703 | u32 offset; | ||
| 1704 | unsigned int num_ports; | ||
| 1705 | int i, port_index; | ||
| 1706 | |||
| 1707 | addr = &xhci->cap_regs->hcc_params; | ||
| 1708 | offset = XHCI_HCC_EXT_CAPS(xhci_readl(xhci, addr)); | ||
| 1709 | if (offset == 0) { | ||
| 1710 | xhci_err(xhci, "No Extended Capability registers, " | ||
| 1711 | "unable to set up roothub.\n"); | ||
| 1712 | return -ENODEV; | ||
| 1713 | } | ||
| 1714 | |||
| 1715 | num_ports = HCS_MAX_PORTS(xhci->hcs_params1); | ||
| 1716 | xhci->port_array = kzalloc(sizeof(*xhci->port_array)*num_ports, flags); | ||
| 1717 | if (!xhci->port_array) | ||
| 1718 | return -ENOMEM; | ||
| 1719 | |||
| 1720 | /* | ||
| 1721 | * For whatever reason, the first capability offset is from the | ||
| 1722 | * capability register base, not from the HCCPARAMS register. | ||
| 1723 | * See section 5.3.6 for offset calculation. | ||
| 1724 | */ | ||
| 1725 | addr = &xhci->cap_regs->hc_capbase + offset; | ||
| 1726 | while (1) { | ||
| 1727 | u32 cap_id; | ||
| 1728 | |||
| 1729 | cap_id = xhci_readl(xhci, addr); | ||
| 1730 | if (XHCI_EXT_CAPS_ID(cap_id) == XHCI_EXT_CAPS_PROTOCOL) | ||
| 1731 | xhci_add_in_port(xhci, num_ports, addr, | ||
| 1732 | (u8) XHCI_EXT_PORT_MAJOR(cap_id)); | ||
| 1733 | offset = XHCI_EXT_CAPS_NEXT(cap_id); | ||
| 1734 | if (!offset || (xhci->num_usb2_ports + xhci->num_usb3_ports) | ||
| 1735 | == num_ports) | ||
| 1736 | break; | ||
| 1737 | /* | ||
| 1738 | * Once you're into the Extended Capabilities, the offset is | ||
| 1739 | * always relative to the register holding the offset. | ||
| 1740 | */ | ||
| 1741 | addr += offset; | ||
| 1742 | } | ||
| 1743 | |||
| 1744 | if (xhci->num_usb2_ports == 0 && xhci->num_usb3_ports == 0) { | ||
| 1745 | xhci_warn(xhci, "No ports on the roothubs?\n"); | ||
| 1746 | return -ENODEV; | ||
| 1747 | } | ||
| 1748 | xhci_dbg(xhci, "Found %u USB 2.0 ports and %u USB 3.0 ports.\n", | ||
| 1749 | xhci->num_usb2_ports, xhci->num_usb3_ports); | ||
| 1750 | /* | ||
| 1751 | * Note we could have all USB 3.0 ports, or all USB 2.0 ports. | ||
| 1752 | * Not sure how the USB core will handle a hub with no ports... | ||
| 1753 | */ | ||
| 1754 | if (xhci->num_usb2_ports) { | ||
| 1755 | xhci->usb2_ports = kmalloc(sizeof(*xhci->usb2_ports)* | ||
| 1756 | xhci->num_usb2_ports, flags); | ||
| 1757 | if (!xhci->usb2_ports) | ||
| 1758 | return -ENOMEM; | ||
| 1759 | |||
| 1760 | port_index = 0; | ||
| 1761 | for (i = 0; i < num_ports; i++) | ||
| 1762 | if (xhci->port_array[i] != 0x03) { | ||
| 1763 | xhci->usb2_ports[port_index] = | ||
| 1764 | &xhci->op_regs->port_status_base + | ||
| 1765 | NUM_PORT_REGS*i; | ||
| 1766 | xhci_dbg(xhci, "USB 2.0 port at index %u, " | ||
| 1767 | "addr = %p\n", i, | ||
| 1768 | xhci->usb2_ports[port_index]); | ||
| 1769 | port_index++; | ||
| 1770 | } | ||
| 1771 | } | ||
| 1772 | if (xhci->num_usb3_ports) { | ||
| 1773 | xhci->usb3_ports = kmalloc(sizeof(*xhci->usb3_ports)* | ||
| 1774 | xhci->num_usb3_ports, flags); | ||
| 1775 | if (!xhci->usb3_ports) | ||
| 1776 | return -ENOMEM; | ||
| 1777 | |||
| 1778 | port_index = 0; | ||
| 1779 | for (i = 0; i < num_ports; i++) | ||
| 1780 | if (xhci->port_array[i] == 0x03) { | ||
| 1781 | xhci->usb3_ports[port_index] = | ||
| 1782 | &xhci->op_regs->port_status_base + | ||
| 1783 | NUM_PORT_REGS*i; | ||
| 1784 | xhci_dbg(xhci, "USB 3.0 port at index %u, " | ||
| 1785 | "addr = %p\n", i, | ||
| 1786 | xhci->usb3_ports[port_index]); | ||
| 1787 | port_index++; | ||
| 1788 | } | ||
| 1789 | } | ||
| 1790 | return 0; | ||
| 1791 | } | ||
| 1630 | 1792 | ||
| 1631 | int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags) | 1793 | int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags) |
| 1632 | { | 1794 | { |
| @@ -1809,6 +1971,8 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags) | |||
| 1809 | 1971 | ||
| 1810 | if (scratchpad_alloc(xhci, flags)) | 1972 | if (scratchpad_alloc(xhci, flags)) |
| 1811 | goto fail; | 1973 | goto fail; |
| 1974 | if (xhci_setup_port_arrays(xhci, flags)) | ||
| 1975 | goto fail; | ||
| 1812 | 1976 | ||
| 1813 | return 0; | 1977 | return 0; |
| 1814 | 1978 | ||
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 06fca0835b52..45e4a3108cc3 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c | |||
| @@ -1549,6 +1549,15 @@ static int xhci_configure_endpoint(struct xhci_hcd *xhci, | |||
| 1549 | cmd_completion = command->completion; | 1549 | cmd_completion = command->completion; |
| 1550 | cmd_status = &command->status; | 1550 | cmd_status = &command->status; |
| 1551 | command->command_trb = xhci->cmd_ring->enqueue; | 1551 | command->command_trb = xhci->cmd_ring->enqueue; |
| 1552 | |||
| 1553 | /* Enqueue pointer can be left pointing to the link TRB, | ||
| 1554 | * we must handle that | ||
| 1555 | */ | ||
| 1556 | if ((command->command_trb->link.control & TRB_TYPE_BITMASK) | ||
| 1557 | == TRB_TYPE(TRB_LINK)) | ||
| 1558 | command->command_trb = | ||
| 1559 | xhci->cmd_ring->enq_seg->next->trbs; | ||
| 1560 | |||
| 1552 | list_add_tail(&command->cmd_list, &virt_dev->cmd_list); | 1561 | list_add_tail(&command->cmd_list, &virt_dev->cmd_list); |
| 1553 | } else { | 1562 | } else { |
| 1554 | in_ctx = virt_dev->in_ctx; | 1563 | in_ctx = virt_dev->in_ctx; |
| @@ -2272,6 +2281,15 @@ int xhci_discover_or_reset_device(struct usb_hcd *hcd, struct usb_device *udev) | |||
| 2272 | /* Attempt to submit the Reset Device command to the command ring */ | 2281 | /* Attempt to submit the Reset Device command to the command ring */ |
| 2273 | spin_lock_irqsave(&xhci->lock, flags); | 2282 | spin_lock_irqsave(&xhci->lock, flags); |
| 2274 | reset_device_cmd->command_trb = xhci->cmd_ring->enqueue; | 2283 | reset_device_cmd->command_trb = xhci->cmd_ring->enqueue; |
| 2284 | |||
| 2285 | /* Enqueue pointer can be left pointing to the link TRB, | ||
| 2286 | * we must handle that | ||
| 2287 | */ | ||
| 2288 | if ((reset_device_cmd->command_trb->link.control & TRB_TYPE_BITMASK) | ||
| 2289 | == TRB_TYPE(TRB_LINK)) | ||
| 2290 | reset_device_cmd->command_trb = | ||
| 2291 | xhci->cmd_ring->enq_seg->next->trbs; | ||
| 2292 | |||
| 2275 | list_add_tail(&reset_device_cmd->cmd_list, &virt_dev->cmd_list); | 2293 | list_add_tail(&reset_device_cmd->cmd_list, &virt_dev->cmd_list); |
| 2276 | ret = xhci_queue_reset_device(xhci, slot_id); | 2294 | ret = xhci_queue_reset_device(xhci, slot_id); |
| 2277 | if (ret) { | 2295 | if (ret) { |
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h index 85e65647d445..170c367112d2 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h | |||
| @@ -454,6 +454,24 @@ struct xhci_doorbell_array { | |||
| 454 | 454 | ||
| 455 | 455 | ||
| 456 | /** | 456 | /** |
| 457 | * struct xhci_protocol_caps | ||
| 458 | * @revision: major revision, minor revision, capability ID, | ||
| 459 | * and next capability pointer. | ||
| 460 | * @name_string: Four ASCII characters to say which spec this xHC | ||
| 461 | * follows, typically "USB ". | ||
| 462 | * @port_info: Port offset, count, and protocol-defined information. | ||
| 463 | */ | ||
| 464 | struct xhci_protocol_caps { | ||
| 465 | u32 revision; | ||
| 466 | u32 name_string; | ||
| 467 | u32 port_info; | ||
| 468 | }; | ||
| 469 | |||
| 470 | #define XHCI_EXT_PORT_MAJOR(x) (((x) >> 24) & 0xff) | ||
| 471 | #define XHCI_EXT_PORT_OFF(x) ((x) & 0xff) | ||
| 472 | #define XHCI_EXT_PORT_COUNT(x) (((x) >> 8) & 0xff) | ||
| 473 | |||
| 474 | /** | ||
| 457 | * struct xhci_container_ctx | 475 | * struct xhci_container_ctx |
| 458 | * @type: Type of context. Used to calculated offsets to contained contexts. | 476 | * @type: Type of context. Used to calculated offsets to contained contexts. |
| 459 | * @size: Size of the context data | 477 | * @size: Size of the context data |
| @@ -1240,6 +1258,14 @@ struct xhci_hcd { | |||
| 1240 | u32 suspended_ports[8]; /* which ports are | 1258 | u32 suspended_ports[8]; /* which ports are |
| 1241 | suspended */ | 1259 | suspended */ |
| 1242 | unsigned long resume_done[MAX_HC_PORTS]; | 1260 | unsigned long resume_done[MAX_HC_PORTS]; |
| 1261 | /* Is each xHCI roothub port a USB 3.0, USB 2.0, or USB 1.1 port? */ | ||
| 1262 | u8 *port_array; | ||
| 1263 | /* Array of pointers to USB 3.0 PORTSC registers */ | ||
| 1264 | u32 __iomem **usb3_ports; | ||
| 1265 | unsigned int num_usb3_ports; | ||
| 1266 | /* Array of pointers to USB 2.0 PORTSC registers */ | ||
| 1267 | u32 __iomem **usb2_ports; | ||
| 1268 | unsigned int num_usb2_ports; | ||
| 1243 | }; | 1269 | }; |
| 1244 | 1270 | ||
| 1245 | /* For testing purposes */ | 1271 | /* For testing purposes */ |
diff --git a/drivers/usb/misc/yurex.c b/drivers/usb/misc/yurex.c index 719c6180b31f..ac5bfd619e62 100644 --- a/drivers/usb/misc/yurex.c +++ b/drivers/usb/misc/yurex.c | |||
| @@ -536,6 +536,7 @@ static const struct file_operations yurex_fops = { | |||
| 536 | .open = yurex_open, | 536 | .open = yurex_open, |
| 537 | .release = yurex_release, | 537 | .release = yurex_release, |
| 538 | .fasync = yurex_fasync, | 538 | .fasync = yurex_fasync, |
| 539 | .llseek = default_llseek, | ||
| 539 | }; | 540 | }; |
| 540 | 541 | ||
| 541 | 542 | ||
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index e6669fc3b804..99beebce8550 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c | |||
| @@ -2116,12 +2116,15 @@ bad_config: | |||
| 2116 | * Otherwise, wait till the gadget driver hooks up. | 2116 | * Otherwise, wait till the gadget driver hooks up. |
| 2117 | */ | 2117 | */ |
| 2118 | if (!is_otg_enabled(musb) && is_host_enabled(musb)) { | 2118 | if (!is_otg_enabled(musb) && is_host_enabled(musb)) { |
| 2119 | struct usb_hcd *hcd = musb_to_hcd(musb); | ||
| 2120 | |||
| 2119 | MUSB_HST_MODE(musb); | 2121 | MUSB_HST_MODE(musb); |
| 2120 | musb->xceiv->default_a = 1; | 2122 | musb->xceiv->default_a = 1; |
| 2121 | musb->xceiv->state = OTG_STATE_A_IDLE; | 2123 | musb->xceiv->state = OTG_STATE_A_IDLE; |
| 2122 | 2124 | ||
| 2123 | status = usb_add_hcd(musb_to_hcd(musb), -1, 0); | 2125 | status = usb_add_hcd(musb_to_hcd(musb), -1, 0); |
| 2124 | 2126 | ||
| 2127 | hcd->self.uses_pio_for_control = 1; | ||
| 2125 | DBG(1, "%s mode, status %d, devctl %02x %c\n", | 2128 | DBG(1, "%s mode, status %d, devctl %02x %c\n", |
| 2126 | "HOST", status, | 2129 | "HOST", status, |
| 2127 | musb_readb(musb->mregs, MUSB_DEVCTL), | 2130 | musb_readb(musb->mregs, MUSB_DEVCTL), |
diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c index 36cfd060dbe5..9d6ade82b9f2 100644 --- a/drivers/usb/musb/musb_gadget.c +++ b/drivers/usb/musb/musb_gadget.c | |||
| @@ -92,6 +92,59 @@ | |||
| 92 | 92 | ||
| 93 | /* ----------------------------------------------------------------------- */ | 93 | /* ----------------------------------------------------------------------- */ |
| 94 | 94 | ||
| 95 | /* Maps the buffer to dma */ | ||
| 96 | |||
| 97 | static inline void map_dma_buffer(struct musb_request *request, | ||
| 98 | struct musb *musb) | ||
| 99 | { | ||
| 100 | if (request->request.dma == DMA_ADDR_INVALID) { | ||
| 101 | request->request.dma = dma_map_single( | ||
| 102 | musb->controller, | ||
| 103 | request->request.buf, | ||
| 104 | request->request.length, | ||
| 105 | request->tx | ||
| 106 | ? DMA_TO_DEVICE | ||
| 107 | : DMA_FROM_DEVICE); | ||
| 108 | request->mapped = 1; | ||
| 109 | } else { | ||
| 110 | dma_sync_single_for_device(musb->controller, | ||
| 111 | request->request.dma, | ||
| 112 | request->request.length, | ||
| 113 | request->tx | ||
| 114 | ? DMA_TO_DEVICE | ||
| 115 | : DMA_FROM_DEVICE); | ||
| 116 | request->mapped = 0; | ||
| 117 | } | ||
| 118 | } | ||
| 119 | |||
| 120 | /* Unmap the buffer from dma and maps it back to cpu */ | ||
| 121 | static inline void unmap_dma_buffer(struct musb_request *request, | ||
| 122 | struct musb *musb) | ||
| 123 | { | ||
| 124 | if (request->request.dma == DMA_ADDR_INVALID) { | ||
| 125 | DBG(20, "not unmapping a never mapped buffer\n"); | ||
| 126 | return; | ||
| 127 | } | ||
| 128 | if (request->mapped) { | ||
| 129 | dma_unmap_single(musb->controller, | ||
| 130 | request->request.dma, | ||
| 131 | request->request.length, | ||
| 132 | request->tx | ||
| 133 | ? DMA_TO_DEVICE | ||
| 134 | : DMA_FROM_DEVICE); | ||
| 135 | request->request.dma = DMA_ADDR_INVALID; | ||
| 136 | request->mapped = 0; | ||
| 137 | } else { | ||
| 138 | dma_sync_single_for_cpu(musb->controller, | ||
| 139 | request->request.dma, | ||
| 140 | request->request.length, | ||
| 141 | request->tx | ||
| 142 | ? DMA_TO_DEVICE | ||
| 143 | : DMA_FROM_DEVICE); | ||
| 144 | |||
| 145 | } | ||
| 146 | } | ||
| 147 | |||
| 95 | /* | 148 | /* |
| 96 | * Immediately complete a request. | 149 | * Immediately complete a request. |
| 97 | * | 150 | * |
| @@ -119,24 +172,8 @@ __acquires(ep->musb->lock) | |||
| 119 | 172 | ||
| 120 | ep->busy = 1; | 173 | ep->busy = 1; |
| 121 | spin_unlock(&musb->lock); | 174 | spin_unlock(&musb->lock); |
| 122 | if (is_dma_capable()) { | 175 | if (is_dma_capable() && ep->dma) |
| 123 | if (req->mapped) { | 176 | unmap_dma_buffer(req, musb); |
| 124 | dma_unmap_single(musb->controller, | ||
| 125 | req->request.dma, | ||
| 126 | req->request.length, | ||
| 127 | req->tx | ||
| 128 | ? DMA_TO_DEVICE | ||
| 129 | : DMA_FROM_DEVICE); | ||
| 130 | req->request.dma = DMA_ADDR_INVALID; | ||
| 131 | req->mapped = 0; | ||
| 132 | } else if (req->request.dma != DMA_ADDR_INVALID) | ||
| 133 | dma_sync_single_for_cpu(musb->controller, | ||
| 134 | req->request.dma, | ||
| 135 | req->request.length, | ||
| 136 | req->tx | ||
| 137 | ? DMA_TO_DEVICE | ||
| 138 | : DMA_FROM_DEVICE); | ||
| 139 | } | ||
| 140 | if (request->status == 0) | 177 | if (request->status == 0) |
| 141 | DBG(5, "%s done request %p, %d/%d\n", | 178 | DBG(5, "%s done request %p, %d/%d\n", |
| 142 | ep->end_point.name, request, | 179 | ep->end_point.name, request, |
| @@ -395,6 +432,13 @@ static void txstate(struct musb *musb, struct musb_request *req) | |||
| 395 | #endif | 432 | #endif |
| 396 | 433 | ||
| 397 | if (!use_dma) { | 434 | if (!use_dma) { |
| 435 | /* | ||
| 436 | * Unmap the dma buffer back to cpu if dma channel | ||
| 437 | * programming fails | ||
| 438 | */ | ||
| 439 | if (is_dma_capable() && musb_ep->dma) | ||
| 440 | unmap_dma_buffer(req, musb); | ||
| 441 | |||
| 398 | musb_write_fifo(musb_ep->hw_ep, fifo_count, | 442 | musb_write_fifo(musb_ep->hw_ep, fifo_count, |
| 399 | (u8 *) (request->buf + request->actual)); | 443 | (u8 *) (request->buf + request->actual)); |
| 400 | request->actual += fifo_count; | 444 | request->actual += fifo_count; |
| @@ -713,6 +757,21 @@ static void rxstate(struct musb *musb, struct musb_request *req) | |||
| 713 | return; | 757 | return; |
| 714 | } | 758 | } |
| 715 | #endif | 759 | #endif |
| 760 | /* | ||
| 761 | * Unmap the dma buffer back to cpu if dma channel | ||
| 762 | * programming fails. This buffer is mapped if the | ||
| 763 | * channel allocation is successful | ||
| 764 | */ | ||
| 765 | if (is_dma_capable() && musb_ep->dma) { | ||
| 766 | unmap_dma_buffer(req, musb); | ||
| 767 | |||
| 768 | /* | ||
| 769 | * Clear DMAENAB and AUTOCLEAR for the | ||
| 770 | * PIO mode transfer | ||
| 771 | */ | ||
| 772 | csr &= ~(MUSB_RXCSR_DMAENAB | MUSB_RXCSR_AUTOCLEAR); | ||
| 773 | musb_writew(epio, MUSB_RXCSR, csr); | ||
| 774 | } | ||
| 716 | 775 | ||
| 717 | musb_read_fifo(musb_ep->hw_ep, fifo_count, (u8 *) | 776 | musb_read_fifo(musb_ep->hw_ep, fifo_count, (u8 *) |
| 718 | (request->buf + request->actual)); | 777 | (request->buf + request->actual)); |
| @@ -837,7 +896,9 @@ void musb_g_rx(struct musb *musb, u8 epnum) | |||
| 837 | if (!request) | 896 | if (!request) |
| 838 | return; | 897 | return; |
| 839 | } | 898 | } |
| 899 | #if defined(CONFIG_USB_INVENTRA_DMA) || defined(CONFIG_USB_TUSB_OMAP_DMA) | ||
| 840 | exit: | 900 | exit: |
| 901 | #endif | ||
| 841 | /* Analyze request */ | 902 | /* Analyze request */ |
| 842 | rxstate(musb, to_musb_request(request)); | 903 | rxstate(musb, to_musb_request(request)); |
| 843 | } | 904 | } |
| @@ -1150,26 +1211,9 @@ static int musb_gadget_queue(struct usb_ep *ep, struct usb_request *req, | |||
| 1150 | request->epnum = musb_ep->current_epnum; | 1211 | request->epnum = musb_ep->current_epnum; |
| 1151 | request->tx = musb_ep->is_in; | 1212 | request->tx = musb_ep->is_in; |
| 1152 | 1213 | ||
| 1153 | if (is_dma_capable() && musb_ep->dma) { | 1214 | if (is_dma_capable() && musb_ep->dma) |
| 1154 | if (request->request.dma == DMA_ADDR_INVALID) { | 1215 | map_dma_buffer(request, musb); |
| 1155 | request->request.dma = dma_map_single( | 1216 | else |
| 1156 | musb->controller, | ||
| 1157 | request->request.buf, | ||
| 1158 | request->request.length, | ||
| 1159 | request->tx | ||
| 1160 | ? DMA_TO_DEVICE | ||
| 1161 | : DMA_FROM_DEVICE); | ||
| 1162 | request->mapped = 1; | ||
| 1163 | } else { | ||
| 1164 | dma_sync_single_for_device(musb->controller, | ||
| 1165 | request->request.dma, | ||
| 1166 | request->request.length, | ||
| 1167 | request->tx | ||
| 1168 | ? DMA_TO_DEVICE | ||
| 1169 | : DMA_FROM_DEVICE); | ||
| 1170 | request->mapped = 0; | ||
| 1171 | } | ||
| 1172 | } else | ||
| 1173 | request->mapped = 0; | 1217 | request->mapped = 0; |
| 1174 | 1218 | ||
| 1175 | spin_lock_irqsave(&musb->lock, lockflags); | 1219 | spin_lock_irqsave(&musb->lock, lockflags); |
| @@ -1789,6 +1833,8 @@ int usb_gadget_probe_driver(struct usb_gadget_driver *driver, | |||
| 1789 | spin_unlock_irqrestore(&musb->lock, flags); | 1833 | spin_unlock_irqrestore(&musb->lock, flags); |
| 1790 | 1834 | ||
| 1791 | if (is_otg_enabled(musb)) { | 1835 | if (is_otg_enabled(musb)) { |
| 1836 | struct usb_hcd *hcd = musb_to_hcd(musb); | ||
| 1837 | |||
| 1792 | DBG(3, "OTG startup...\n"); | 1838 | DBG(3, "OTG startup...\n"); |
| 1793 | 1839 | ||
| 1794 | /* REVISIT: funcall to other code, which also | 1840 | /* REVISIT: funcall to other code, which also |
| @@ -1803,6 +1849,8 @@ int usb_gadget_probe_driver(struct usb_gadget_driver *driver, | |||
| 1803 | musb->gadget_driver = NULL; | 1849 | musb->gadget_driver = NULL; |
| 1804 | musb->g.dev.driver = NULL; | 1850 | musb->g.dev.driver = NULL; |
| 1805 | spin_unlock_irqrestore(&musb->lock, flags); | 1851 | spin_unlock_irqrestore(&musb->lock, flags); |
| 1852 | } else { | ||
| 1853 | hcd->self.uses_pio_for_control = 1; | ||
| 1806 | } | 1854 | } |
| 1807 | } | 1855 | } |
| 1808 | } | 1856 | } |
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 76f8b3556672..6a50965e23f2 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
| @@ -201,6 +201,7 @@ static struct usb_device_id id_table_combined [] = { | |||
| 201 | { USB_DEVICE(FTDI_VID, FTDI_MTXORB_5_PID) }, | 201 | { USB_DEVICE(FTDI_VID, FTDI_MTXORB_5_PID) }, |
| 202 | { USB_DEVICE(FTDI_VID, FTDI_MTXORB_6_PID) }, | 202 | { USB_DEVICE(FTDI_VID, FTDI_MTXORB_6_PID) }, |
| 203 | { USB_DEVICE(FTDI_VID, FTDI_R2000KU_TRUE_RNG) }, | 203 | { USB_DEVICE(FTDI_VID, FTDI_R2000KU_TRUE_RNG) }, |
| 204 | { USB_DEVICE(FTDI_VID, FTDI_VARDAAN_PID) }, | ||
| 204 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0100_PID) }, | 205 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0100_PID) }, |
| 205 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0101_PID) }, | 206 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0101_PID) }, |
| 206 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0102_PID) }, | 207 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0102_PID) }, |
| @@ -696,6 +697,7 @@ static struct usb_device_id id_table_combined [] = { | |||
| 696 | .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk }, | 697 | .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk }, |
| 697 | { USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) }, | 698 | { USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) }, |
| 698 | { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_SERIAL_VX7_PID) }, | 699 | { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_SERIAL_VX7_PID) }, |
| 700 | { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_CT29B_PID) }, | ||
| 699 | { USB_DEVICE(FTDI_VID, FTDI_MAXSTREAM_PID) }, | 701 | { USB_DEVICE(FTDI_VID, FTDI_MAXSTREAM_PID) }, |
| 700 | { USB_DEVICE(FTDI_VID, FTDI_PHI_FISCO_PID) }, | 702 | { USB_DEVICE(FTDI_VID, FTDI_PHI_FISCO_PID) }, |
| 701 | { USB_DEVICE(TML_VID, TML_USB_SERIAL_PID) }, | 703 | { USB_DEVICE(TML_VID, TML_USB_SERIAL_PID) }, |
diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h index 263f62551197..1286f1e23d8c 100644 --- a/drivers/usb/serial/ftdi_sio_ids.h +++ b/drivers/usb/serial/ftdi_sio_ids.h | |||
| @@ -114,6 +114,9 @@ | |||
| 114 | /* Lenz LI-USB Computer Interface. */ | 114 | /* Lenz LI-USB Computer Interface. */ |
| 115 | #define FTDI_LENZ_LIUSB_PID 0xD780 | 115 | #define FTDI_LENZ_LIUSB_PID 0xD780 |
| 116 | 116 | ||
| 117 | /* Vardaan Enterprises Serial Interface VEUSB422R3 */ | ||
| 118 | #define FTDI_VARDAAN_PID 0xF070 | ||
| 119 | |||
| 117 | /* | 120 | /* |
| 118 | * Xsens Technologies BV products (http://www.xsens.com). | 121 | * Xsens Technologies BV products (http://www.xsens.com). |
| 119 | */ | 122 | */ |
| @@ -721,6 +724,7 @@ | |||
| 721 | */ | 724 | */ |
| 722 | #define RTSYSTEMS_VID 0x2100 /* Vendor ID */ | 725 | #define RTSYSTEMS_VID 0x2100 /* Vendor ID */ |
| 723 | #define RTSYSTEMS_SERIAL_VX7_PID 0x9e52 /* Serial converter for VX-7 Radios using FT232RL */ | 726 | #define RTSYSTEMS_SERIAL_VX7_PID 0x9e52 /* Serial converter for VX-7 Radios using FT232RL */ |
| 727 | #define RTSYSTEMS_CT29B_PID 0x9e54 /* CT29B Radio Cable */ | ||
| 724 | 728 | ||
| 725 | /* | 729 | /* |
| 726 | * Bayer Ascensia Contour blood glucose meter USB-converter cable. | 730 | * Bayer Ascensia Contour blood glucose meter USB-converter cable. |
diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c index 861223f2af6e..6954de50c0ff 100644 --- a/drivers/usb/serial/usb-serial.c +++ b/drivers/usb/serial/usb-serial.c | |||
| @@ -51,6 +51,7 @@ static struct usb_driver usb_serial_driver = { | |||
| 51 | .suspend = usb_serial_suspend, | 51 | .suspend = usb_serial_suspend, |
| 52 | .resume = usb_serial_resume, | 52 | .resume = usb_serial_resume, |
| 53 | .no_dynamic_id = 1, | 53 | .no_dynamic_id = 1, |
| 54 | .supports_autosuspend = 1, | ||
| 54 | }; | 55 | }; |
| 55 | 56 | ||
| 56 | /* There is no MODULE_DEVICE_TABLE for usbserial.c. Instead | 57 | /* There is no MODULE_DEVICE_TABLE for usbserial.c. Instead |
| @@ -1343,6 +1344,8 @@ int usb_serial_register(struct usb_serial_driver *driver) | |||
| 1343 | return -ENODEV; | 1344 | return -ENODEV; |
| 1344 | 1345 | ||
| 1345 | fixup_generic(driver); | 1346 | fixup_generic(driver); |
| 1347 | if (driver->usb_driver) | ||
| 1348 | driver->usb_driver->supports_autosuspend = 1; | ||
| 1346 | 1349 | ||
| 1347 | if (!driver->description) | 1350 | if (!driver->description) |
| 1348 | driver->description = driver->driver.name; | 1351 | driver->description = driver->driver.name; |
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index 4a291045ebac..a5ad77ef4266 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig | |||
| @@ -558,6 +558,9 @@ config IT8712F_WDT | |||
| 558 | This is the driver for the built-in watchdog timer on the IT8712F | 558 | This is the driver for the built-in watchdog timer on the IT8712F |
| 559 | Super I/0 chipset used on many motherboards. | 559 | Super I/0 chipset used on many motherboards. |
| 560 | 560 | ||
| 561 | If the driver does not work, then make sure that the game port in | ||
| 562 | the BIOS is enabled. | ||
| 563 | |||
| 561 | To compile this driver as a module, choose M here: the | 564 | To compile this driver as a module, choose M here: the |
| 562 | module will be called it8712f_wdt. | 565 | module will be called it8712f_wdt. |
| 563 | 566 | ||
diff --git a/drivers/watchdog/bcm63xx_wdt.c b/drivers/watchdog/bcm63xx_wdt.c index a1debc89356b..3c5045a206dd 100644 --- a/drivers/watchdog/bcm63xx_wdt.c +++ b/drivers/watchdog/bcm63xx_wdt.c | |||
| @@ -18,7 +18,6 @@ | |||
| 18 | #include <linux/miscdevice.h> | 18 | #include <linux/miscdevice.h> |
| 19 | #include <linux/module.h> | 19 | #include <linux/module.h> |
| 20 | #include <linux/moduleparam.h> | 20 | #include <linux/moduleparam.h> |
| 21 | #include <linux/reboot.h> | ||
| 22 | #include <linux/types.h> | 21 | #include <linux/types.h> |
| 23 | #include <linux/uaccess.h> | 22 | #include <linux/uaccess.h> |
| 24 | #include <linux/watchdog.h> | 23 | #include <linux/watchdog.h> |
| @@ -220,14 +219,6 @@ static long bcm63xx_wdt_ioctl(struct file *file, unsigned int cmd, | |||
| 220 | } | 219 | } |
| 221 | } | 220 | } |
| 222 | 221 | ||
| 223 | static int bcm63xx_wdt_notify_sys(struct notifier_block *this, | ||
| 224 | unsigned long code, void *unused) | ||
| 225 | { | ||
| 226 | if (code == SYS_DOWN || code == SYS_HALT) | ||
| 227 | bcm63xx_wdt_pause(); | ||
| 228 | return NOTIFY_DONE; | ||
| 229 | } | ||
| 230 | |||
| 231 | static const struct file_operations bcm63xx_wdt_fops = { | 222 | static const struct file_operations bcm63xx_wdt_fops = { |
| 232 | .owner = THIS_MODULE, | 223 | .owner = THIS_MODULE, |
| 233 | .llseek = no_llseek, | 224 | .llseek = no_llseek, |
| @@ -243,12 +234,8 @@ static struct miscdevice bcm63xx_wdt_miscdev = { | |||
| 243 | .fops = &bcm63xx_wdt_fops, | 234 | .fops = &bcm63xx_wdt_fops, |
| 244 | }; | 235 | }; |
| 245 | 236 | ||
| 246 | static struct notifier_block bcm63xx_wdt_notifier = { | ||
| 247 | .notifier_call = bcm63xx_wdt_notify_sys, | ||
| 248 | }; | ||
| 249 | 237 | ||
| 250 | 238 | static int __devinit bcm63xx_wdt_probe(struct platform_device *pdev) | |
| 251 | static int bcm63xx_wdt_probe(struct platform_device *pdev) | ||
| 252 | { | 239 | { |
| 253 | int ret; | 240 | int ret; |
| 254 | struct resource *r; | 241 | struct resource *r; |
| @@ -280,16 +267,10 @@ static int bcm63xx_wdt_probe(struct platform_device *pdev) | |||
| 280 | wdt_time); | 267 | wdt_time); |
| 281 | } | 268 | } |
| 282 | 269 | ||
| 283 | ret = register_reboot_notifier(&bcm63xx_wdt_notifier); | ||
| 284 | if (ret) { | ||
| 285 | dev_err(&pdev->dev, "failed to register reboot_notifier\n"); | ||
| 286 | goto unregister_timer; | ||
| 287 | } | ||
| 288 | |||
| 289 | ret = misc_register(&bcm63xx_wdt_miscdev); | 270 | ret = misc_register(&bcm63xx_wdt_miscdev); |
| 290 | if (ret < 0) { | 271 | if (ret < 0) { |
| 291 | dev_err(&pdev->dev, "failed to register watchdog device\n"); | 272 | dev_err(&pdev->dev, "failed to register watchdog device\n"); |
| 292 | goto unregister_reboot_notifier; | 273 | goto unregister_timer; |
| 293 | } | 274 | } |
| 294 | 275 | ||
| 295 | dev_info(&pdev->dev, " started, timer margin: %d sec\n", | 276 | dev_info(&pdev->dev, " started, timer margin: %d sec\n", |
| @@ -297,8 +278,6 @@ static int bcm63xx_wdt_probe(struct platform_device *pdev) | |||
| 297 | 278 | ||
| 298 | return 0; | 279 | return 0; |
| 299 | 280 | ||
| 300 | unregister_reboot_notifier: | ||
| 301 | unregister_reboot_notifier(&bcm63xx_wdt_notifier); | ||
| 302 | unregister_timer: | 281 | unregister_timer: |
| 303 | bcm63xx_timer_unregister(TIMER_WDT_ID); | 282 | bcm63xx_timer_unregister(TIMER_WDT_ID); |
| 304 | unmap: | 283 | unmap: |
| @@ -306,25 +285,28 @@ unmap: | |||
| 306 | return ret; | 285 | return ret; |
| 307 | } | 286 | } |
| 308 | 287 | ||
| 309 | static int bcm63xx_wdt_remove(struct platform_device *pdev) | 288 | static int __devexit bcm63xx_wdt_remove(struct platform_device *pdev) |
| 310 | { | 289 | { |
| 311 | if (!nowayout) | 290 | if (!nowayout) |
| 312 | bcm63xx_wdt_pause(); | 291 | bcm63xx_wdt_pause(); |
| 313 | 292 | ||
| 314 | misc_deregister(&bcm63xx_wdt_miscdev); | 293 | misc_deregister(&bcm63xx_wdt_miscdev); |
| 315 | |||
| 316 | iounmap(bcm63xx_wdt_device.regs); | ||
| 317 | |||
| 318 | unregister_reboot_notifier(&bcm63xx_wdt_notifier); | ||
| 319 | bcm63xx_timer_unregister(TIMER_WDT_ID); | 294 | bcm63xx_timer_unregister(TIMER_WDT_ID); |
| 320 | 295 | iounmap(bcm63xx_wdt_device.regs); | |
| 321 | return 0; | 296 | return 0; |
| 322 | } | 297 | } |
| 323 | 298 | ||
| 299 | static void bcm63xx_wdt_shutdown(struct platform_device *pdev) | ||
| 300 | { | ||
| 301 | bcm63xx_wdt_pause(); | ||
| 302 | } | ||
| 303 | |||
| 324 | static struct platform_driver bcm63xx_wdt = { | 304 | static struct platform_driver bcm63xx_wdt = { |
| 325 | .probe = bcm63xx_wdt_probe, | 305 | .probe = bcm63xx_wdt_probe, |
| 326 | .remove = bcm63xx_wdt_remove, | 306 | .remove = __devexit_p(bcm63xx_wdt_remove), |
| 307 | .shutdown = bcm63xx_wdt_shutdown, | ||
| 327 | .driver = { | 308 | .driver = { |
| 309 | .owner = THIS_MODULE, | ||
| 328 | .name = "bcm63xx-wdt", | 310 | .name = "bcm63xx-wdt", |
| 329 | } | 311 | } |
| 330 | }; | 312 | }; |
diff --git a/drivers/watchdog/gef_wdt.c b/drivers/watchdog/gef_wdt.c index 9c21d19043a6..f6bd6f10fcec 100644 --- a/drivers/watchdog/gef_wdt.c +++ b/drivers/watchdog/gef_wdt.c | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | #include <linux/module.h> | 30 | #include <linux/module.h> |
| 31 | #include <linux/miscdevice.h> | 31 | #include <linux/miscdevice.h> |
| 32 | #include <linux/watchdog.h> | 32 | #include <linux/watchdog.h> |
| 33 | #include <linux/fs.h> | ||
| 33 | #include <linux/of.h> | 34 | #include <linux/of.h> |
| 34 | #include <linux/of_platform.h> | 35 | #include <linux/of_platform.h> |
| 35 | #include <linux/io.h> | 36 | #include <linux/io.h> |
diff --git a/drivers/watchdog/iTCO_wdt.c b/drivers/watchdog/iTCO_wdt.c index f7e90fe47b71..b8838d2c67a6 100644 --- a/drivers/watchdog/iTCO_wdt.c +++ b/drivers/watchdog/iTCO_wdt.c | |||
| @@ -32,6 +32,7 @@ | |||
| 32 | * document number 322169-001, 322170-003: 5 Series, 3400 Series (PCH) | 32 | * document number 322169-001, 322170-003: 5 Series, 3400 Series (PCH) |
| 33 | * document number 320066-003, 320257-008: EP80597 (IICH) | 33 | * document number 320066-003, 320257-008: EP80597 (IICH) |
| 34 | * document number TBD : Cougar Point (CPT) | 34 | * document number TBD : Cougar Point (CPT) |
| 35 | * document number TBD : Patsburg (PBG) | ||
| 35 | */ | 36 | */ |
| 36 | 37 | ||
| 37 | /* | 38 | /* |
| @@ -146,7 +147,8 @@ enum iTCO_chipsets { | |||
| 146 | TCO_CPT29, /* Cougar Point */ | 147 | TCO_CPT29, /* Cougar Point */ |
| 147 | TCO_CPT30, /* Cougar Point */ | 148 | TCO_CPT30, /* Cougar Point */ |
| 148 | TCO_CPT31, /* Cougar Point */ | 149 | TCO_CPT31, /* Cougar Point */ |
| 149 | TCO_PBG, /* Patsburg */ | 150 | TCO_PBG1, /* Patsburg */ |
| 151 | TCO_PBG2, /* Patsburg */ | ||
| 150 | }; | 152 | }; |
| 151 | 153 | ||
| 152 | static struct { | 154 | static struct { |
| @@ -235,6 +237,7 @@ static struct { | |||
| 235 | {"Cougar Point", 2}, | 237 | {"Cougar Point", 2}, |
| 236 | {"Cougar Point", 2}, | 238 | {"Cougar Point", 2}, |
| 237 | {"Patsburg", 2}, | 239 | {"Patsburg", 2}, |
| 240 | {"Patsburg", 2}, | ||
| 238 | {NULL, 0} | 241 | {NULL, 0} |
| 239 | }; | 242 | }; |
| 240 | 243 | ||
| @@ -350,7 +353,8 @@ static struct pci_device_id iTCO_wdt_pci_tbl[] = { | |||
| 350 | { ITCO_PCI_DEVICE(0x1c5d, TCO_CPT29)}, | 353 | { ITCO_PCI_DEVICE(0x1c5d, TCO_CPT29)}, |
| 351 | { ITCO_PCI_DEVICE(0x1c5e, TCO_CPT30)}, | 354 | { ITCO_PCI_DEVICE(0x1c5e, TCO_CPT30)}, |
| 352 | { ITCO_PCI_DEVICE(0x1c5f, TCO_CPT31)}, | 355 | { ITCO_PCI_DEVICE(0x1c5f, TCO_CPT31)}, |
| 353 | { ITCO_PCI_DEVICE(0x1d40, TCO_PBG)}, | 356 | { ITCO_PCI_DEVICE(0x1d40, TCO_PBG1)}, |
| 357 | { ITCO_PCI_DEVICE(0x1d41, TCO_PBG2)}, | ||
| 354 | { 0, }, /* End of list */ | 358 | { 0, }, /* End of list */ |
| 355 | }; | 359 | }; |
| 356 | MODULE_DEVICE_TABLE(pci, iTCO_wdt_pci_tbl); | 360 | MODULE_DEVICE_TABLE(pci, iTCO_wdt_pci_tbl); |
diff --git a/fs/reiserfs/xattr_acl.c b/fs/reiserfs/xattr_acl.c index 536d697a8a28..90d2fcb67a31 100644 --- a/fs/reiserfs/xattr_acl.c +++ b/fs/reiserfs/xattr_acl.c | |||
| @@ -472,7 +472,9 @@ int reiserfs_acl_chmod(struct inode *inode) | |||
| 472 | struct reiserfs_transaction_handle th; | 472 | struct reiserfs_transaction_handle th; |
| 473 | size_t size = reiserfs_xattr_nblocks(inode, | 473 | size_t size = reiserfs_xattr_nblocks(inode, |
| 474 | reiserfs_acl_size(clone->a_count)); | 474 | reiserfs_acl_size(clone->a_count)); |
| 475 | reiserfs_write_lock(inode->i_sb); | 475 | int depth; |
| 476 | |||
| 477 | depth = reiserfs_write_lock_once(inode->i_sb); | ||
| 476 | error = journal_begin(&th, inode->i_sb, size * 2); | 478 | error = journal_begin(&th, inode->i_sb, size * 2); |
| 477 | if (!error) { | 479 | if (!error) { |
| 478 | int error2; | 480 | int error2; |
| @@ -482,7 +484,7 @@ int reiserfs_acl_chmod(struct inode *inode) | |||
| 482 | if (error2) | 484 | if (error2) |
| 483 | error = error2; | 485 | error = error2; |
| 484 | } | 486 | } |
| 485 | reiserfs_write_unlock(inode->i_sb); | 487 | reiserfs_write_unlock_once(inode->i_sb, depth); |
| 486 | } | 488 | } |
| 487 | posix_acl_release(clone); | 489 | posix_acl_release(clone); |
| 488 | return error; | 490 | return error; |
diff --git a/include/linux/cpu.h b/include/linux/cpu.h index 4823af64e9db..5f09323ee880 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h | |||
| @@ -10,11 +10,6 @@ | |||
| 10 | * | 10 | * |
| 11 | * CPUs are exported via sysfs in the class/cpu/devices/ | 11 | * CPUs are exported via sysfs in the class/cpu/devices/ |
| 12 | * directory. | 12 | * directory. |
| 13 | * | ||
| 14 | * Per-cpu interfaces can be implemented using a struct device_interface. | ||
| 15 | * See the following for how to do this: | ||
| 16 | * - drivers/base/intf.c | ||
| 17 | * - Documentation/driver-model/interface.txt | ||
| 18 | */ | 13 | */ |
| 19 | #ifndef _LINUX_CPU_H_ | 14 | #ifndef _LINUX_CPU_H_ |
| 20 | #define _LINUX_CPU_H_ | 15 | #define _LINUX_CPU_H_ |
diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h index 4307231bd22f..31c237a00c48 100644 --- a/include/linux/memory_hotplug.h +++ b/include/linux/memory_hotplug.h | |||
| @@ -161,6 +161,9 @@ extern void register_page_bootmem_info_node(struct pglist_data *pgdat); | |||
| 161 | extern void put_page_bootmem(struct page *page); | 161 | extern void put_page_bootmem(struct page *page); |
| 162 | #endif | 162 | #endif |
| 163 | 163 | ||
| 164 | void lock_memory_hotplug(void); | ||
| 165 | void unlock_memory_hotplug(void); | ||
| 166 | |||
| 164 | #else /* ! CONFIG_MEMORY_HOTPLUG */ | 167 | #else /* ! CONFIG_MEMORY_HOTPLUG */ |
| 165 | /* | 168 | /* |
| 166 | * Stub functions for when hotplug is off | 169 | * Stub functions for when hotplug is off |
| @@ -192,6 +195,9 @@ static inline void register_page_bootmem_info_node(struct pglist_data *pgdat) | |||
| 192 | { | 195 | { |
| 193 | } | 196 | } |
| 194 | 197 | ||
| 198 | static inline void lock_memory_hotplug(void) {} | ||
| 199 | static inline void unlock_memory_hotplug(void) {} | ||
| 200 | |||
| 195 | #endif /* ! CONFIG_MEMORY_HOTPLUG */ | 201 | #endif /* ! CONFIG_MEMORY_HOTPLUG */ |
| 196 | 202 | ||
| 197 | #ifdef CONFIG_MEMORY_HOTREMOVE | 203 | #ifdef CONFIG_MEMORY_HOTREMOVE |
diff --git a/include/linux/node.h b/include/linux/node.h index 06292dac3eab..1466945cc9ef 100644 --- a/include/linux/node.h +++ b/include/linux/node.h | |||
| @@ -10,11 +10,6 @@ | |||
| 10 | * | 10 | * |
| 11 | * Nodes are exported via driverfs in the class/node/devices/ | 11 | * Nodes are exported via driverfs in the class/node/devices/ |
| 12 | * directory. | 12 | * directory. |
| 13 | * | ||
| 14 | * Per-node interfaces can be implemented using a struct device_interface. | ||
| 15 | * See the following for how to do this: | ||
| 16 | * - drivers/base/intf.c | ||
| 17 | * - Documentation/driver-model/interface.txt | ||
| 18 | */ | 13 | */ |
| 19 | #ifndef _LINUX_NODE_H_ | 14 | #ifndef _LINUX_NODE_H_ |
| 20 | #define _LINUX_NODE_H_ | 15 | #define _LINUX_NODE_H_ |
diff --git a/include/linux/tty.h b/include/linux/tty.h index 032d79ff1d9d..54e4eaaa0561 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
| @@ -366,6 +366,7 @@ struct tty_file_private { | |||
| 366 | #define TTY_HUPPED 18 /* Post driver->hangup() */ | 366 | #define TTY_HUPPED 18 /* Post driver->hangup() */ |
| 367 | #define TTY_FLUSHING 19 /* Flushing to ldisc in progress */ | 367 | #define TTY_FLUSHING 19 /* Flushing to ldisc in progress */ |
| 368 | #define TTY_FLUSHPENDING 20 /* Queued buffer flush pending */ | 368 | #define TTY_FLUSHPENDING 20 /* Queued buffer flush pending */ |
| 369 | #define TTY_HUPPING 21 /* ->hangup() in progress */ | ||
| 369 | 370 | ||
| 370 | #define TTY_WRITE_FLUSH(tty) tty_write_flush((tty)) | 371 | #define TTY_WRITE_FLUSH(tty) tty_write_flush((tty)) |
| 371 | 372 | ||
diff --git a/include/linux/uio_driver.h b/include/linux/uio_driver.h index d6188e5a52df..665517c05eaf 100644 --- a/include/linux/uio_driver.h +++ b/include/linux/uio_driver.h | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | * | 3 | * |
| 4 | * Copyright(C) 2005, Benedikt Spranger <b.spranger@linutronix.de> | 4 | * Copyright(C) 2005, Benedikt Spranger <b.spranger@linutronix.de> |
| 5 | * Copyright(C) 2005, Thomas Gleixner <tglx@linutronix.de> | 5 | * Copyright(C) 2005, Thomas Gleixner <tglx@linutronix.de> |
| 6 | * Copyright(C) 2006, Hans J. Koch <hjk@linutronix.de> | 6 | * Copyright(C) 2006, Hans J. Koch <hjk@hansjkoch.de> |
| 7 | * Copyright(C) 2006, Greg Kroah-Hartman <greg@kroah.com> | 7 | * Copyright(C) 2006, Greg Kroah-Hartman <greg@kroah.com> |
| 8 | * | 8 | * |
| 9 | * Userspace IO driver. | 9 | * Userspace IO driver. |
diff --git a/include/linux/usb.h b/include/linux/usb.h index 24300d8a1bc1..a28eb2592577 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
| @@ -313,6 +313,10 @@ struct usb_bus { | |||
| 313 | int busnum; /* Bus number (in order of reg) */ | 313 | int busnum; /* Bus number (in order of reg) */ |
| 314 | const char *bus_name; /* stable id (PCI slot_name etc) */ | 314 | const char *bus_name; /* stable id (PCI slot_name etc) */ |
| 315 | u8 uses_dma; /* Does the host controller use DMA? */ | 315 | u8 uses_dma; /* Does the host controller use DMA? */ |
| 316 | u8 uses_pio_for_control; /* | ||
| 317 | * Does the host controller use PIO | ||
| 318 | * for control transfers? | ||
| 319 | */ | ||
| 316 | u8 otg_port; /* 0, or number of OTG/HNP port */ | 320 | u8 otg_port; /* 0, or number of OTG/HNP port */ |
| 317 | unsigned is_b_host:1; /* true during some HNP roleswitches */ | 321 | unsigned is_b_host:1; /* true during some HNP roleswitches */ |
| 318 | unsigned b_hnp_enable:1; /* OTG: did A-Host enable HNP? */ | 322 | unsigned b_hnp_enable:1; /* OTG: did A-Host enable HNP? */ |
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h index a03dcf62ca9d..44b54f619ac6 100644 --- a/include/linux/vmalloc.h +++ b/include/linux/vmalloc.h | |||
| @@ -7,8 +7,6 @@ | |||
| 7 | 7 | ||
| 8 | struct vm_area_struct; /* vma defining user mapping in mm_types.h */ | 8 | struct vm_area_struct; /* vma defining user mapping in mm_types.h */ |
| 9 | 9 | ||
| 10 | extern bool vmap_lazy_unmap; | ||
| 11 | |||
| 12 | /* bits in flags of vmalloc's vm_struct below */ | 10 | /* bits in flags of vmalloc's vm_struct below */ |
| 13 | #define VM_IOREMAP 0x00000001 /* ioremap() and friends */ | 11 | #define VM_IOREMAP 0x00000001 /* ioremap() and friends */ |
| 14 | #define VM_ALLOC 0x00000002 /* vmalloc() */ | 12 | #define VM_ALLOC 0x00000002 /* vmalloc() */ |
diff --git a/kernel/exit.c b/kernel/exit.c index 21aa7b3001fb..676149a4ac5f 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
| @@ -914,6 +914,15 @@ NORET_TYPE void do_exit(long code) | |||
| 914 | if (unlikely(!tsk->pid)) | 914 | if (unlikely(!tsk->pid)) |
| 915 | panic("Attempted to kill the idle task!"); | 915 | panic("Attempted to kill the idle task!"); |
| 916 | 916 | ||
| 917 | /* | ||
| 918 | * If do_exit is called because this processes oopsed, it's possible | ||
| 919 | * that get_fs() was left as KERNEL_DS, so reset it to USER_DS before | ||
| 920 | * continuing. Amongst other possible reasons, this is to prevent | ||
| 921 | * mm_release()->clear_child_tid() from writing to a user-controlled | ||
| 922 | * kernel address. | ||
| 923 | */ | ||
| 924 | set_fs(USER_DS); | ||
| 925 | |||
| 917 | tracehook_report_exit(&code); | 926 | tracehook_report_exit(&code); |
| 918 | 927 | ||
| 919 | validate_creds_for_do_exit(tsk); | 928 | validate_creds_for_do_exit(tsk); |
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index c4a3558589ab..85855240933d 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
| @@ -2738,7 +2738,8 @@ out_page_table_lock: | |||
| 2738 | unlock_page(pagecache_page); | 2738 | unlock_page(pagecache_page); |
| 2739 | put_page(pagecache_page); | 2739 | put_page(pagecache_page); |
| 2740 | } | 2740 | } |
| 2741 | unlock_page(page); | 2741 | if (page != pagecache_page) |
| 2742 | unlock_page(page); | ||
| 2742 | 2743 | ||
| 2743 | out_mutex: | 2744 | out_mutex: |
| 2744 | mutex_unlock(&hugetlb_instantiation_mutex); | 2745 | mutex_unlock(&hugetlb_instantiation_mutex); |
| @@ -1724,8 +1724,13 @@ static int ksm_memory_callback(struct notifier_block *self, | |||
| 1724 | /* | 1724 | /* |
| 1725 | * Keep it very simple for now: just lock out ksmd and | 1725 | * Keep it very simple for now: just lock out ksmd and |
| 1726 | * MADV_UNMERGEABLE while any memory is going offline. | 1726 | * MADV_UNMERGEABLE while any memory is going offline. |
| 1727 | * mutex_lock_nested() is necessary because lockdep was alarmed | ||
| 1728 | * that here we take ksm_thread_mutex inside notifier chain | ||
| 1729 | * mutex, and later take notifier chain mutex inside | ||
| 1730 | * ksm_thread_mutex to unlock it. But that's safe because both | ||
| 1731 | * are inside mem_hotplug_mutex. | ||
| 1727 | */ | 1732 | */ |
| 1728 | mutex_lock(&ksm_thread_mutex); | 1733 | mutex_lock_nested(&ksm_thread_mutex, SINGLE_DEPTH_NESTING); |
| 1729 | break; | 1734 | break; |
| 1730 | 1735 | ||
| 1731 | case MEM_OFFLINE: | 1736 | case MEM_OFFLINE: |
diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 124324134ff6..46ab2c044b0e 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c | |||
| @@ -51,6 +51,7 @@ | |||
| 51 | #include <linux/slab.h> | 51 | #include <linux/slab.h> |
| 52 | #include <linux/swapops.h> | 52 | #include <linux/swapops.h> |
| 53 | #include <linux/hugetlb.h> | 53 | #include <linux/hugetlb.h> |
| 54 | #include <linux/memory_hotplug.h> | ||
| 54 | #include "internal.h" | 55 | #include "internal.h" |
| 55 | 56 | ||
| 56 | int sysctl_memory_failure_early_kill __read_mostly = 0; | 57 | int sysctl_memory_failure_early_kill __read_mostly = 0; |
| @@ -1230,11 +1231,10 @@ static int get_any_page(struct page *p, unsigned long pfn, int flags) | |||
| 1230 | return 1; | 1231 | return 1; |
| 1231 | 1232 | ||
| 1232 | /* | 1233 | /* |
| 1233 | * The lock_system_sleep prevents a race with memory hotplug, | 1234 | * The lock_memory_hotplug prevents a race with memory hotplug. |
| 1234 | * because the isolation assumes there's only a single user. | ||
| 1235 | * This is a big hammer, a better would be nicer. | 1235 | * This is a big hammer, a better would be nicer. |
| 1236 | */ | 1236 | */ |
| 1237 | lock_system_sleep(); | 1237 | lock_memory_hotplug(); |
| 1238 | 1238 | ||
| 1239 | /* | 1239 | /* |
| 1240 | * Isolate the page, so that it doesn't get reallocated if it | 1240 | * Isolate the page, so that it doesn't get reallocated if it |
| @@ -1264,7 +1264,7 @@ static int get_any_page(struct page *p, unsigned long pfn, int flags) | |||
| 1264 | ret = 1; | 1264 | ret = 1; |
| 1265 | } | 1265 | } |
| 1266 | unset_migratetype_isolate(p); | 1266 | unset_migratetype_isolate(p); |
| 1267 | unlock_system_sleep(); | 1267 | unlock_memory_hotplug(); |
| 1268 | return ret; | 1268 | return ret; |
| 1269 | } | 1269 | } |
| 1270 | 1270 | ||
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 9260314a221e..2c6523af5473 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c | |||
| @@ -34,6 +34,23 @@ | |||
| 34 | 34 | ||
| 35 | #include "internal.h" | 35 | #include "internal.h" |
| 36 | 36 | ||
| 37 | DEFINE_MUTEX(mem_hotplug_mutex); | ||
| 38 | |||
| 39 | void lock_memory_hotplug(void) | ||
| 40 | { | ||
| 41 | mutex_lock(&mem_hotplug_mutex); | ||
| 42 | |||
| 43 | /* for exclusive hibernation if CONFIG_HIBERNATION=y */ | ||
| 44 | lock_system_sleep(); | ||
| 45 | } | ||
| 46 | |||
| 47 | void unlock_memory_hotplug(void) | ||
| 48 | { | ||
| 49 | unlock_system_sleep(); | ||
| 50 | mutex_unlock(&mem_hotplug_mutex); | ||
| 51 | } | ||
| 52 | |||
| 53 | |||
| 37 | /* add this memory to iomem resource */ | 54 | /* add this memory to iomem resource */ |
| 38 | static struct resource *register_memory_resource(u64 start, u64 size) | 55 | static struct resource *register_memory_resource(u64 start, u64 size) |
| 39 | { | 56 | { |
| @@ -493,7 +510,7 @@ int mem_online_node(int nid) | |||
| 493 | pg_data_t *pgdat; | 510 | pg_data_t *pgdat; |
| 494 | int ret; | 511 | int ret; |
| 495 | 512 | ||
| 496 | lock_system_sleep(); | 513 | lock_memory_hotplug(); |
| 497 | pgdat = hotadd_new_pgdat(nid, 0); | 514 | pgdat = hotadd_new_pgdat(nid, 0); |
| 498 | if (pgdat) { | 515 | if (pgdat) { |
| 499 | ret = -ENOMEM; | 516 | ret = -ENOMEM; |
| @@ -504,7 +521,7 @@ int mem_online_node(int nid) | |||
| 504 | BUG_ON(ret); | 521 | BUG_ON(ret); |
| 505 | 522 | ||
| 506 | out: | 523 | out: |
| 507 | unlock_system_sleep(); | 524 | unlock_memory_hotplug(); |
| 508 | return ret; | 525 | return ret; |
| 509 | } | 526 | } |
| 510 | 527 | ||
| @@ -516,7 +533,7 @@ int __ref add_memory(int nid, u64 start, u64 size) | |||
| 516 | struct resource *res; | 533 | struct resource *res; |
| 517 | int ret; | 534 | int ret; |
| 518 | 535 | ||
| 519 | lock_system_sleep(); | 536 | lock_memory_hotplug(); |
| 520 | 537 | ||
| 521 | res = register_memory_resource(start, size); | 538 | res = register_memory_resource(start, size); |
| 522 | ret = -EEXIST; | 539 | ret = -EEXIST; |
| @@ -563,7 +580,7 @@ error: | |||
| 563 | release_memory_resource(res); | 580 | release_memory_resource(res); |
| 564 | 581 | ||
| 565 | out: | 582 | out: |
| 566 | unlock_system_sleep(); | 583 | unlock_memory_hotplug(); |
| 567 | return ret; | 584 | return ret; |
| 568 | } | 585 | } |
| 569 | EXPORT_SYMBOL_GPL(add_memory); | 586 | EXPORT_SYMBOL_GPL(add_memory); |
| @@ -791,7 +808,7 @@ static int offline_pages(unsigned long start_pfn, | |||
| 791 | if (!test_pages_in_a_zone(start_pfn, end_pfn)) | 808 | if (!test_pages_in_a_zone(start_pfn, end_pfn)) |
| 792 | return -EINVAL; | 809 | return -EINVAL; |
| 793 | 810 | ||
| 794 | lock_system_sleep(); | 811 | lock_memory_hotplug(); |
| 795 | 812 | ||
| 796 | zone = page_zone(pfn_to_page(start_pfn)); | 813 | zone = page_zone(pfn_to_page(start_pfn)); |
| 797 | node = zone_to_nid(zone); | 814 | node = zone_to_nid(zone); |
| @@ -880,7 +897,7 @@ repeat: | |||
| 880 | writeback_set_ratelimit(); | 897 | writeback_set_ratelimit(); |
| 881 | 898 | ||
| 882 | memory_notify(MEM_OFFLINE, &arg); | 899 | memory_notify(MEM_OFFLINE, &arg); |
| 883 | unlock_system_sleep(); | 900 | unlock_memory_hotplug(); |
| 884 | return 0; | 901 | return 0; |
| 885 | 902 | ||
| 886 | failed_removal: | 903 | failed_removal: |
| @@ -891,7 +908,7 @@ failed_removal: | |||
| 891 | undo_isolate_page_range(start_pfn, end_pfn); | 908 | undo_isolate_page_range(start_pfn, end_pfn); |
| 892 | 909 | ||
| 893 | out: | 910 | out: |
| 894 | unlock_system_sleep(); | 911 | unlock_memory_hotplug(); |
| 895 | return ret; | 912 | return ret; |
| 896 | } | 913 | } |
| 897 | 914 | ||
diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 4a57f135b76e..11ff260fb282 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c | |||
| @@ -1307,15 +1307,18 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode, | |||
| 1307 | goto out; | 1307 | goto out; |
| 1308 | 1308 | ||
| 1309 | /* Find the mm_struct */ | 1309 | /* Find the mm_struct */ |
| 1310 | rcu_read_lock(); | ||
| 1310 | read_lock(&tasklist_lock); | 1311 | read_lock(&tasklist_lock); |
| 1311 | task = pid ? find_task_by_vpid(pid) : current; | 1312 | task = pid ? find_task_by_vpid(pid) : current; |
| 1312 | if (!task) { | 1313 | if (!task) { |
| 1313 | read_unlock(&tasklist_lock); | 1314 | read_unlock(&tasklist_lock); |
| 1315 | rcu_read_unlock(); | ||
| 1314 | err = -ESRCH; | 1316 | err = -ESRCH; |
| 1315 | goto out; | 1317 | goto out; |
| 1316 | } | 1318 | } |
| 1317 | mm = get_task_mm(task); | 1319 | mm = get_task_mm(task); |
| 1318 | read_unlock(&tasklist_lock); | 1320 | read_unlock(&tasklist_lock); |
| 1321 | rcu_read_unlock(); | ||
| 1319 | 1322 | ||
| 1320 | err = -EINVAL; | 1323 | err = -EINVAL; |
| 1321 | if (!mm) | 1324 | if (!mm) |
diff --git a/mm/vmalloc.c b/mm/vmalloc.c index a3d66b3dc5cb..eb5cc7d00c5a 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c | |||
| @@ -31,8 +31,6 @@ | |||
| 31 | #include <asm/tlbflush.h> | 31 | #include <asm/tlbflush.h> |
| 32 | #include <asm/shmparam.h> | 32 | #include <asm/shmparam.h> |
| 33 | 33 | ||
| 34 | bool vmap_lazy_unmap __read_mostly = true; | ||
| 35 | |||
| 36 | /*** Page table manipulation functions ***/ | 34 | /*** Page table manipulation functions ***/ |
| 37 | 35 | ||
| 38 | static void vunmap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end) | 36 | static void vunmap_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end) |
| @@ -503,9 +501,6 @@ static unsigned long lazy_max_pages(void) | |||
| 503 | { | 501 | { |
| 504 | unsigned int log; | 502 | unsigned int log; |
| 505 | 503 | ||
| 506 | if (!vmap_lazy_unmap) | ||
| 507 | return 0; | ||
| 508 | |||
| 509 | log = fls(num_online_cpus()); | 504 | log = fls(num_online_cpus()); |
| 510 | 505 | ||
| 511 | return log * (32UL * 1024 * 1024 / PAGE_SIZE); | 506 | return log * (32UL * 1024 * 1024 / PAGE_SIZE); |
| @@ -566,7 +561,6 @@ static void __purge_vmap_area_lazy(unsigned long *start, unsigned long *end, | |||
| 566 | if (va->va_end > *end) | 561 | if (va->va_end > *end) |
| 567 | *end = va->va_end; | 562 | *end = va->va_end; |
| 568 | nr += (va->va_end - va->va_start) >> PAGE_SHIFT; | 563 | nr += (va->va_end - va->va_start) >> PAGE_SHIFT; |
| 569 | unmap_vmap_area(va); | ||
| 570 | list_add_tail(&va->purge_list, &valist); | 564 | list_add_tail(&va->purge_list, &valist); |
| 571 | va->flags |= VM_LAZY_FREEING; | 565 | va->flags |= VM_LAZY_FREEING; |
| 572 | va->flags &= ~VM_LAZY_FREE; | 566 | va->flags &= ~VM_LAZY_FREE; |
| @@ -611,10 +605,11 @@ static void purge_vmap_area_lazy(void) | |||
| 611 | } | 605 | } |
| 612 | 606 | ||
| 613 | /* | 607 | /* |
| 614 | * Free and unmap a vmap area, caller ensuring flush_cache_vunmap had been | 608 | * Free a vmap area, caller ensuring that the area has been unmapped |
| 615 | * called for the correct range previously. | 609 | * and flush_cache_vunmap had been called for the correct range |
| 610 | * previously. | ||
| 616 | */ | 611 | */ |
| 617 | static void free_unmap_vmap_area_noflush(struct vmap_area *va) | 612 | static void free_vmap_area_noflush(struct vmap_area *va) |
| 618 | { | 613 | { |
| 619 | va->flags |= VM_LAZY_FREE; | 614 | va->flags |= VM_LAZY_FREE; |
| 620 | atomic_add((va->va_end - va->va_start) >> PAGE_SHIFT, &vmap_lazy_nr); | 615 | atomic_add((va->va_end - va->va_start) >> PAGE_SHIFT, &vmap_lazy_nr); |
| @@ -623,6 +618,16 @@ static void free_unmap_vmap_area_noflush(struct vmap_area *va) | |||
| 623 | } | 618 | } |
| 624 | 619 | ||
| 625 | /* | 620 | /* |
| 621 | * Free and unmap a vmap area, caller ensuring flush_cache_vunmap had been | ||
| 622 | * called for the correct range previously. | ||
| 623 | */ | ||
| 624 | static void free_unmap_vmap_area_noflush(struct vmap_area *va) | ||
| 625 | { | ||
| 626 | unmap_vmap_area(va); | ||
| 627 | free_vmap_area_noflush(va); | ||
| 628 | } | ||
| 629 | |||
| 630 | /* | ||
| 626 | * Free and unmap a vmap area | 631 | * Free and unmap a vmap area |
| 627 | */ | 632 | */ |
| 628 | static void free_unmap_vmap_area(struct vmap_area *va) | 633 | static void free_unmap_vmap_area(struct vmap_area *va) |
| @@ -798,7 +803,7 @@ static void free_vmap_block(struct vmap_block *vb) | |||
| 798 | spin_unlock(&vmap_block_tree_lock); | 803 | spin_unlock(&vmap_block_tree_lock); |
| 799 | BUG_ON(tmp != vb); | 804 | BUG_ON(tmp != vb); |
| 800 | 805 | ||
| 801 | free_unmap_vmap_area_noflush(vb->va); | 806 | free_vmap_area_noflush(vb->va); |
| 802 | call_rcu(&vb->rcu_head, rcu_free_vb); | 807 | call_rcu(&vb->rcu_head, rcu_free_vb); |
| 803 | } | 808 | } |
| 804 | 809 | ||
| @@ -936,6 +941,8 @@ static void vb_free(const void *addr, unsigned long size) | |||
| 936 | rcu_read_unlock(); | 941 | rcu_read_unlock(); |
| 937 | BUG_ON(!vb); | 942 | BUG_ON(!vb); |
| 938 | 943 | ||
| 944 | vunmap_page_range((unsigned long)addr, (unsigned long)addr + size); | ||
| 945 | |||
| 939 | spin_lock(&vb->lock); | 946 | spin_lock(&vb->lock); |
| 940 | BUG_ON(bitmap_allocate_region(vb->dirty_map, offset >> PAGE_SHIFT, order)); | 947 | BUG_ON(bitmap_allocate_region(vb->dirty_map, offset >> PAGE_SHIFT, order)); |
| 941 | 948 | ||
| @@ -988,7 +995,6 @@ void vm_unmap_aliases(void) | |||
| 988 | 995 | ||
| 989 | s = vb->va->va_start + (i << PAGE_SHIFT); | 996 | s = vb->va->va_start + (i << PAGE_SHIFT); |
| 990 | e = vb->va->va_start + (j << PAGE_SHIFT); | 997 | e = vb->va->va_start + (j << PAGE_SHIFT); |
| 991 | vunmap_page_range(s, e); | ||
| 992 | flush = 1; | 998 | flush = 1; |
| 993 | 999 | ||
| 994 | if (s < start) | 1000 | if (s < start) |
diff --git a/mm/vmstat.c b/mm/vmstat.c index 42eac4d33216..8f62f17ee1c7 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c | |||
| @@ -750,8 +750,6 @@ static const char * const vmstat_text[] = { | |||
| 750 | "nr_shmem", | 750 | "nr_shmem", |
| 751 | "nr_dirtied", | 751 | "nr_dirtied", |
| 752 | "nr_written", | 752 | "nr_written", |
| 753 | "nr_dirty_threshold", | ||
| 754 | "nr_dirty_background_threshold", | ||
| 755 | 753 | ||
| 756 | #ifdef CONFIG_NUMA | 754 | #ifdef CONFIG_NUMA |
| 757 | "numa_hit", | 755 | "numa_hit", |
| @@ -761,6 +759,8 @@ static const char * const vmstat_text[] = { | |||
| 761 | "numa_local", | 759 | "numa_local", |
| 762 | "numa_other", | 760 | "numa_other", |
| 763 | #endif | 761 | #endif |
| 762 | "nr_dirty_threshold", | ||
| 763 | "nr_dirty_background_threshold", | ||
| 764 | 764 | ||
| 765 | #ifdef CONFIG_VM_EVENT_COUNTERS | 765 | #ifdef CONFIG_VM_EVENT_COUNTERS |
| 766 | "pgpgin", | 766 | "pgpgin", |
diff --git a/net/mac80211/Kconfig b/net/mac80211/Kconfig index 4d6f8653ec88..8e8ea9cb7093 100644 --- a/net/mac80211/Kconfig +++ b/net/mac80211/Kconfig | |||
| @@ -92,7 +92,7 @@ config MAC80211_MESH | |||
| 92 | config MAC80211_LEDS | 92 | config MAC80211_LEDS |
| 93 | bool "Enable LED triggers" | 93 | bool "Enable LED triggers" |
| 94 | depends on MAC80211 | 94 | depends on MAC80211 |
| 95 | select NEW_LEDS | 95 | depends on LEDS_CLASS |
| 96 | select LEDS_TRIGGERS | 96 | select LEDS_TRIGGERS |
| 97 | ---help--- | 97 | ---help--- |
| 98 | This option enables a few LED triggers for different | 98 | This option enables a few LED triggers for different |
