aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2005-10-22 02:51:34 -0400
committerPaul Mackerras <paulus@samba.org>2005-10-22 02:51:34 -0400
commit985990137e81ca9fd6561cd0f7d1a9695ec57d5a (patch)
tree7a67493285623a7356ba7065cada6728993d1a3b /drivers
parent834289447542b7ec55c0847486616d4d53ddf891 (diff)
parent63172cb3d5ef762dcb60a292bc7f016b85cf6e1f (diff)
Merge changes from linux-2.6 by hand
Diffstat (limited to 'drivers')
-rw-r--r--drivers/acpi/event.c5
-rw-r--r--drivers/acpi/glue.c8
-rw-r--r--drivers/char/.gitignore3
-rw-r--r--drivers/char/drm/drm_vm.c3
-rw-r--r--drivers/char/drm/mga_dma.c22
-rw-r--r--drivers/char/drm/mga_drv.h2
-rw-r--r--drivers/char/drm/mga_state.c2
-rw-r--r--drivers/char/mbcs.c3
-rw-r--r--drivers/char/n_r3964.c8
-rw-r--r--drivers/ieee1394/ohci1394.c6
-rw-r--r--drivers/ieee1394/raw1394.c100
-rw-r--r--drivers/input/keyboard/Kconfig2
-rw-r--r--drivers/input/keyboard/spitzkbd.c2
-rw-r--r--drivers/input/misc/uinput.c4
-rw-r--r--drivers/md/md.c4
-rw-r--r--drivers/media/radio/radio-cadet.c2
-rw-r--r--drivers/media/video/vpx3220.c32
-rw-r--r--drivers/message/fusion/mptsas.c12
-rw-r--r--drivers/net/e100.c224
-rw-r--r--drivers/net/wireless/Kconfig2
-rw-r--r--drivers/net/wireless/orinoco.c5
-rw-r--r--drivers/pci/.gitignore4
-rw-r--r--drivers/pci/quirks.c4
-rw-r--r--drivers/pcmcia/soc_common.c14
-rw-r--r--drivers/scsi/Kconfig5
-rw-r--r--drivers/scsi/aacraid/linit.c2
-rw-r--r--drivers/scsi/qlogicpti.c39
-rw-r--r--drivers/scsi/sata_nv.c14
-rw-r--r--drivers/scsi/scsi_error.c2
-rw-r--r--drivers/serial/8250_pnp.c4
-rw-r--r--drivers/serial/imx.c39
-rw-r--r--drivers/serial/pxa.c2
-rw-r--r--drivers/serial/s3c2410.c15
-rw-r--r--drivers/serial/sh-sci.c2
-rw-r--r--drivers/usb/host/isp116x-hcd.c3
-rw-r--r--drivers/usb/input/hid-core.c3
-rw-r--r--drivers/usb/serial/generic.c2
-rw-r--r--drivers/video/console/vgacon.c9
-rw-r--r--drivers/video/logo/.gitignore7
-rw-r--r--drivers/video/sa1100fb.c2
-rw-r--r--drivers/video/vesafb.c6
-rw-r--r--drivers/w1/w1.c3
42 files changed, 286 insertions, 346 deletions
diff --git a/drivers/acpi/event.c b/drivers/acpi/event.c
index bfa8b76de403..2dbb1b0f11d5 100644
--- a/drivers/acpi/event.c
+++ b/drivers/acpi/event.c
@@ -58,9 +58,8 @@ acpi_system_read_event(struct file *file, char __user * buffer, size_t count,
58 return_VALUE(-EAGAIN); 58 return_VALUE(-EAGAIN);
59 59
60 result = acpi_bus_receive_event(&event); 60 result = acpi_bus_receive_event(&event);
61 if (result) { 61 if (result)
62 return_VALUE(-EIO); 62 return_VALUE(result);
63 }
64 63
65 chars_remaining = sprintf(str, "%s %s %08x %08x\n", 64 chars_remaining = sprintf(str, "%s %s %08x %08x\n",
66 event.device_class ? event. 65 event.device_class ? event.
diff --git a/drivers/acpi/glue.c b/drivers/acpi/glue.c
index e36c5da2b31a..3937adf4e5e5 100644
--- a/drivers/acpi/glue.c
+++ b/drivers/acpi/glue.c
@@ -96,7 +96,7 @@ struct acpi_find_pci_root {
96static acpi_status 96static acpi_status
97do_root_bridge_busnr_callback(struct acpi_resource *resource, void *data) 97do_root_bridge_busnr_callback(struct acpi_resource *resource, void *data)
98{ 98{
99 int *busnr = (int *)data; 99 unsigned long *busnr = (unsigned long *)data;
100 struct acpi_resource_address64 address; 100 struct acpi_resource_address64 address;
101 101
102 if (resource->id != ACPI_RSTYPE_ADDRESS16 && 102 if (resource->id != ACPI_RSTYPE_ADDRESS16 &&
@@ -115,13 +115,13 @@ do_root_bridge_busnr_callback(struct acpi_resource *resource, void *data)
115static int get_root_bridge_busnr(acpi_handle handle) 115static int get_root_bridge_busnr(acpi_handle handle)
116{ 116{
117 acpi_status status; 117 acpi_status status;
118 int bus, bbn; 118 unsigned long bus, bbn;
119 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; 119 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
120 120
121 acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer); 121 acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer);
122 122
123 status = acpi_evaluate_integer(handle, METHOD_NAME__BBN, NULL, 123 status = acpi_evaluate_integer(handle, METHOD_NAME__BBN, NULL,
124 (unsigned long *)&bbn); 124 &bbn);
125 if (status == AE_NOT_FOUND) { 125 if (status == AE_NOT_FOUND) {
126 /* Assume bus = 0 */ 126 /* Assume bus = 0 */
127 printk(KERN_INFO PREFIX 127 printk(KERN_INFO PREFIX
@@ -153,7 +153,7 @@ static int get_root_bridge_busnr(acpi_handle handle)
153 } 153 }
154 exit: 154 exit:
155 acpi_os_free(buffer.pointer); 155 acpi_os_free(buffer.pointer);
156 return bbn; 156 return (int)bbn;
157} 157}
158 158
159static acpi_status 159static acpi_status
diff --git a/drivers/char/.gitignore b/drivers/char/.gitignore
new file mode 100644
index 000000000000..2b6b1d772ed7
--- /dev/null
+++ b/drivers/char/.gitignore
@@ -0,0 +1,3 @@
1consolemap_deftbl.c
2defkeymap.c
3
diff --git a/drivers/char/drm/drm_vm.c b/drivers/char/drm/drm_vm.c
index ced4215e2275..39ea96e42c5b 100644
--- a/drivers/char/drm/drm_vm.c
+++ b/drivers/char/drm/drm_vm.c
@@ -148,7 +148,8 @@ static __inline__ struct page *drm_do_vm_shm_nopage(struct vm_area_struct *vma,
148 148
149 offset = address - vma->vm_start; 149 offset = address - vma->vm_start;
150 i = (unsigned long)map->handle + offset; 150 i = (unsigned long)map->handle + offset;
151 page = vmalloc_to_page((void *)i); 151 page = (map->type == _DRM_CONSISTENT) ?
152 virt_to_page((void *)i) : vmalloc_to_page((void *)i);
152 if (!page) 153 if (!page)
153 return NOPAGE_OOM; 154 return NOPAGE_OOM;
154 get_page(page); 155 get_page(page);
diff --git a/drivers/char/drm/mga_dma.c b/drivers/char/drm/mga_dma.c
index fc7d4a594bca..c8e1b6c83636 100644
--- a/drivers/char/drm/mga_dma.c
+++ b/drivers/char/drm/mga_dma.c
@@ -437,7 +437,7 @@ static int mga_do_agp_dma_bootstrap(drm_device_t * dev,
437 drm_mga_dma_bootstrap_t * dma_bs) 437 drm_mga_dma_bootstrap_t * dma_bs)
438{ 438{
439 drm_mga_private_t * const dev_priv = (drm_mga_private_t *) dev->dev_private; 439 drm_mga_private_t * const dev_priv = (drm_mga_private_t *) dev->dev_private;
440 const unsigned int warp_size = mga_warp_microcode_size(dev_priv); 440 unsigned int warp_size = mga_warp_microcode_size(dev_priv);
441 int err; 441 int err;
442 unsigned offset; 442 unsigned offset;
443 const unsigned secondary_size = dma_bs->secondary_bin_count 443 const unsigned secondary_size = dma_bs->secondary_bin_count
@@ -499,6 +499,12 @@ static int mga_do_agp_dma_bootstrap(drm_device_t * dev,
499 return err; 499 return err;
500 } 500 }
501 501
502 /* Make drm_addbufs happy by not trying to create a mapping for less
503 * than a page.
504 */
505 if (warp_size < PAGE_SIZE)
506 warp_size = PAGE_SIZE;
507
502 offset = 0; 508 offset = 0;
503 err = drm_addmap( dev, offset, warp_size, 509 err = drm_addmap( dev, offset, warp_size,
504 _DRM_AGP, _DRM_READ_ONLY, & dev_priv->warp ); 510 _DRM_AGP, _DRM_READ_ONLY, & dev_priv->warp );
@@ -587,7 +593,7 @@ static int mga_do_pci_dma_bootstrap(drm_device_t * dev,
587 drm_mga_dma_bootstrap_t * dma_bs) 593 drm_mga_dma_bootstrap_t * dma_bs)
588{ 594{
589 drm_mga_private_t * const dev_priv = (drm_mga_private_t *) dev->dev_private; 595 drm_mga_private_t * const dev_priv = (drm_mga_private_t *) dev->dev_private;
590 const unsigned int warp_size = mga_warp_microcode_size(dev_priv); 596 unsigned int warp_size = mga_warp_microcode_size(dev_priv);
591 unsigned int primary_size; 597 unsigned int primary_size;
592 unsigned int bin_count; 598 unsigned int bin_count;
593 int err; 599 int err;
@@ -599,6 +605,12 @@ static int mga_do_pci_dma_bootstrap(drm_device_t * dev,
599 return DRM_ERR(EFAULT); 605 return DRM_ERR(EFAULT);
600 } 606 }
601 607
608 /* Make drm_addbufs happy by not trying to create a mapping for less
609 * than a page.
610 */
611 if (warp_size < PAGE_SIZE)
612 warp_size = PAGE_SIZE;
613
602 /* The proper alignment is 0x100 for this mapping */ 614 /* The proper alignment is 0x100 for this mapping */
603 err = drm_addmap(dev, 0, warp_size, _DRM_CONSISTENT, 615 err = drm_addmap(dev, 0, warp_size, _DRM_CONSISTENT,
604 _DRM_READ_ONLY, &dev_priv->warp); 616 _DRM_READ_ONLY, &dev_priv->warp);
@@ -812,6 +824,10 @@ static int mga_do_init_dma( drm_device_t *dev, drm_mga_init_t *init )
812 } 824 }
813 825
814 if (! dev_priv->used_new_dma_init) { 826 if (! dev_priv->used_new_dma_init) {
827
828 dev_priv->dma_access = MGA_PAGPXFER;
829 dev_priv->wagp_enable = MGA_WAGP_ENABLE;
830
815 dev_priv->status = drm_core_findmap(dev, init->status_offset); 831 dev_priv->status = drm_core_findmap(dev, init->status_offset);
816 if (!dev_priv->status) { 832 if (!dev_priv->status) {
817 DRM_ERROR("failed to find status page!\n"); 833 DRM_ERROR("failed to find status page!\n");
@@ -928,7 +944,7 @@ static int mga_do_cleanup_dma( drm_device_t *dev )
928 drm_mga_private_t *dev_priv = dev->dev_private; 944 drm_mga_private_t *dev_priv = dev->dev_private;
929 945
930 if ((dev_priv->warp != NULL) 946 if ((dev_priv->warp != NULL)
931 && (dev_priv->mmio->type != _DRM_CONSISTENT)) 947 && (dev_priv->warp->type != _DRM_CONSISTENT))
932 drm_core_ioremapfree(dev_priv->warp, dev); 948 drm_core_ioremapfree(dev_priv->warp, dev);
933 949
934 if ((dev_priv->primary != NULL) 950 if ((dev_priv->primary != NULL)
diff --git a/drivers/char/drm/mga_drv.h b/drivers/char/drm/mga_drv.h
index b22fdbd4f830..6059c5a5b105 100644
--- a/drivers/char/drm/mga_drv.h
+++ b/drivers/char/drm/mga_drv.h
@@ -227,7 +227,7 @@ static inline u32 _MGA_READ(u32 *addr)
227#define MGA_EMIT_STATE( dev_priv, dirty ) \ 227#define MGA_EMIT_STATE( dev_priv, dirty ) \
228do { \ 228do { \
229 if ( (dirty) & ~MGA_UPLOAD_CLIPRECTS ) { \ 229 if ( (dirty) & ~MGA_UPLOAD_CLIPRECTS ) { \
230 if ( dev_priv->chipset == MGA_CARD_TYPE_G400 ) { \ 230 if ( dev_priv->chipset >= MGA_CARD_TYPE_G400 ) { \
231 mga_g400_emit_state( dev_priv ); \ 231 mga_g400_emit_state( dev_priv ); \
232 } else { \ 232 } else { \
233 mga_g200_emit_state( dev_priv ); \ 233 mga_g200_emit_state( dev_priv ); \
diff --git a/drivers/char/drm/mga_state.c b/drivers/char/drm/mga_state.c
index 05bbb4719376..6ac5e006226f 100644
--- a/drivers/char/drm/mga_state.c
+++ b/drivers/char/drm/mga_state.c
@@ -53,7 +53,7 @@ static void mga_emit_clip_rect( drm_mga_private_t *dev_priv,
53 53
54 /* Force reset of DWGCTL on G400 (eliminates clip disable bit). 54 /* Force reset of DWGCTL on G400 (eliminates clip disable bit).
55 */ 55 */
56 if (dev_priv->chipset == MGA_CARD_TYPE_G400) { 56 if (dev_priv->chipset >= MGA_CARD_TYPE_G400) {
57 DMA_BLOCK(MGA_DWGCTL, ctx->dwgctl, 57 DMA_BLOCK(MGA_DWGCTL, ctx->dwgctl,
58 MGA_LEN + MGA_EXEC, 0x80000000, 58 MGA_LEN + MGA_EXEC, 0x80000000,
59 MGA_DWGCTL, ctx->dwgctl, 59 MGA_DWGCTL, ctx->dwgctl,
diff --git a/drivers/char/mbcs.c b/drivers/char/mbcs.c
index 3fa64c631108..c268ee04b2aa 100644
--- a/drivers/char/mbcs.c
+++ b/drivers/char/mbcs.c
@@ -830,6 +830,9 @@ static int __init mbcs_init(void)
830{ 830{
831 int rv; 831 int rv;
832 832
833 if (!ia64_platform_is("sn2"))
834 return -ENODEV;
835
833 // Put driver into chrdevs[]. Get major number. 836 // Put driver into chrdevs[]. Get major number.
834 rv = register_chrdev(mbcs_major, DEVICE_NAME, &mbcs_ops); 837 rv = register_chrdev(mbcs_major, DEVICE_NAME, &mbcs_ops);
835 if (rv < 0) { 838 if (rv < 0) {
diff --git a/drivers/char/n_r3964.c b/drivers/char/n_r3964.c
index 97d6dc24b800..853c98cee64f 100644
--- a/drivers/char/n_r3964.c
+++ b/drivers/char/n_r3964.c
@@ -695,7 +695,7 @@ static void receive_char(struct r3964_info *pInfo, const unsigned char c)
695 { 695 {
696 TRACE_PE("IDLE - got STX but no space in rx_queue!"); 696 TRACE_PE("IDLE - got STX but no space in rx_queue!");
697 pInfo->state=R3964_WAIT_FOR_RX_BUF; 697 pInfo->state=R3964_WAIT_FOR_RX_BUF;
698 mod_timer(&pInfo->tmr, R3964_TO_NO_BUF); 698 mod_timer(&pInfo->tmr, jiffies + R3964_TO_NO_BUF);
699 break; 699 break;
700 } 700 }
701start_receiving: 701start_receiving:
@@ -705,7 +705,7 @@ start_receiving:
705 pInfo->last_rx = 0; 705 pInfo->last_rx = 0;
706 pInfo->flags &= ~R3964_ERROR; 706 pInfo->flags &= ~R3964_ERROR;
707 pInfo->state=R3964_RECEIVING; 707 pInfo->state=R3964_RECEIVING;
708 mod_timer(&pInfo->tmr, R3964_TO_ZVZ); 708 mod_timer(&pInfo->tmr, jiffies + R3964_TO_ZVZ);
709 pInfo->nRetry = 0; 709 pInfo->nRetry = 0;
710 put_char(pInfo, DLE); 710 put_char(pInfo, DLE);
711 flush(pInfo); 711 flush(pInfo);
@@ -732,7 +732,7 @@ start_receiving:
732 if(pInfo->flags & R3964_BCC) 732 if(pInfo->flags & R3964_BCC)
733 { 733 {
734 pInfo->state = R3964_WAIT_FOR_BCC; 734 pInfo->state = R3964_WAIT_FOR_BCC;
735 mod_timer(&pInfo->tmr, R3964_TO_ZVZ); 735 mod_timer(&pInfo->tmr, jiffies + R3964_TO_ZVZ);
736 } 736 }
737 else 737 else
738 { 738 {
@@ -744,7 +744,7 @@ start_receiving:
744 pInfo->last_rx = c; 744 pInfo->last_rx = c;
745char_to_buf: 745char_to_buf:
746 pInfo->rx_buf[pInfo->rx_position++] = c; 746 pInfo->rx_buf[pInfo->rx_position++] = c;
747 mod_timer(&pInfo->tmr, R3964_TO_ZVZ); 747 mod_timer(&pInfo->tmr, jiffies + R3964_TO_ZVZ);
748 } 748 }
749 } 749 }
750 /* else: overflow-msg? BUF_SIZE>MTU; should not happen? */ 750 /* else: overflow-msg? BUF_SIZE>MTU; should not happen? */
diff --git a/drivers/ieee1394/ohci1394.c b/drivers/ieee1394/ohci1394.c
index 6a6acbd80af4..4cf9b8f3e336 100644
--- a/drivers/ieee1394/ohci1394.c
+++ b/drivers/ieee1394/ohci1394.c
@@ -2283,8 +2283,9 @@ static void ohci_schedule_iso_tasklets(struct ti_ohci *ohci,
2283{ 2283{
2284 struct ohci1394_iso_tasklet *t; 2284 struct ohci1394_iso_tasklet *t;
2285 unsigned long mask; 2285 unsigned long mask;
2286 unsigned long flags;
2286 2287
2287 spin_lock(&ohci->iso_tasklet_list_lock); 2288 spin_lock_irqsave(&ohci->iso_tasklet_list_lock, flags);
2288 2289
2289 list_for_each_entry(t, &ohci->iso_tasklet_list, link) { 2290 list_for_each_entry(t, &ohci->iso_tasklet_list, link) {
2290 mask = 1 << t->context; 2291 mask = 1 << t->context;
@@ -2295,8 +2296,7 @@ static void ohci_schedule_iso_tasklets(struct ti_ohci *ohci,
2295 tasklet_schedule(&t->tasklet); 2296 tasklet_schedule(&t->tasklet);
2296 } 2297 }
2297 2298
2298 spin_unlock(&ohci->iso_tasklet_list_lock); 2299 spin_unlock_irqrestore(&ohci->iso_tasklet_list_lock, flags);
2299
2300} 2300}
2301 2301
2302static irqreturn_t ohci_irq_handler(int irq, void *dev_id, 2302static irqreturn_t ohci_irq_handler(int irq, void *dev_id,
diff --git a/drivers/ieee1394/raw1394.c b/drivers/ieee1394/raw1394.c
index 315f5ca8bedb..0470f77a9cd1 100644
--- a/drivers/ieee1394/raw1394.c
+++ b/drivers/ieee1394/raw1394.c
@@ -412,6 +412,7 @@ static void fcp_request(struct hpsb_host *host, int nodeid, int direction,
412static ssize_t raw1394_read(struct file *file, char __user * buffer, 412static ssize_t raw1394_read(struct file *file, char __user * buffer,
413 size_t count, loff_t * offset_is_ignored) 413 size_t count, loff_t * offset_is_ignored)
414{ 414{
415 unsigned long flags;
415 struct file_info *fi = (struct file_info *)file->private_data; 416 struct file_info *fi = (struct file_info *)file->private_data;
416 struct list_head *lh; 417 struct list_head *lh;
417 struct pending_request *req; 418 struct pending_request *req;
@@ -435,10 +436,10 @@ static ssize_t raw1394_read(struct file *file, char __user * buffer,
435 } 436 }
436 } 437 }
437 438
438 spin_lock_irq(&fi->reqlists_lock); 439 spin_lock_irqsave(&fi->reqlists_lock, flags);
439 lh = fi->req_complete.next; 440 lh = fi->req_complete.next;
440 list_del(lh); 441 list_del(lh);
441 spin_unlock_irq(&fi->reqlists_lock); 442 spin_unlock_irqrestore(&fi->reqlists_lock, flags);
442 443
443 req = list_entry(lh, struct pending_request, list); 444 req = list_entry(lh, struct pending_request, list);
444 445
@@ -486,6 +487,7 @@ static int state_opened(struct file_info *fi, struct pending_request *req)
486 487
487static int state_initialized(struct file_info *fi, struct pending_request *req) 488static int state_initialized(struct file_info *fi, struct pending_request *req)
488{ 489{
490 unsigned long flags;
489 struct host_info *hi; 491 struct host_info *hi;
490 struct raw1394_khost_list *khl; 492 struct raw1394_khost_list *khl;
491 493
@@ -499,7 +501,7 @@ static int state_initialized(struct file_info *fi, struct pending_request *req)
499 501
500 switch (req->req.type) { 502 switch (req->req.type) {
501 case RAW1394_REQ_LIST_CARDS: 503 case RAW1394_REQ_LIST_CARDS:
502 spin_lock_irq(&host_info_lock); 504 spin_lock_irqsave(&host_info_lock, flags);
503 khl = kmalloc(sizeof(struct raw1394_khost_list) * host_count, 505 khl = kmalloc(sizeof(struct raw1394_khost_list) * host_count,
504 SLAB_ATOMIC); 506 SLAB_ATOMIC);
505 507
@@ -513,7 +515,7 @@ static int state_initialized(struct file_info *fi, struct pending_request *req)
513 khl++; 515 khl++;
514 } 516 }
515 } 517 }
516 spin_unlock_irq(&host_info_lock); 518 spin_unlock_irqrestore(&host_info_lock, flags);
517 519
518 if (khl != NULL) { 520 if (khl != NULL) {
519 req->req.error = RAW1394_ERROR_NONE; 521 req->req.error = RAW1394_ERROR_NONE;
@@ -528,7 +530,7 @@ static int state_initialized(struct file_info *fi, struct pending_request *req)
528 break; 530 break;
529 531
530 case RAW1394_REQ_SET_CARD: 532 case RAW1394_REQ_SET_CARD:
531 spin_lock_irq(&host_info_lock); 533 spin_lock_irqsave(&host_info_lock, flags);
532 if (req->req.misc < host_count) { 534 if (req->req.misc < host_count) {
533 list_for_each_entry(hi, &host_info_list, list) { 535 list_for_each_entry(hi, &host_info_list, list) {
534 if (!req->req.misc--) 536 if (!req->req.misc--)
@@ -550,7 +552,7 @@ static int state_initialized(struct file_info *fi, struct pending_request *req)
550 } else { 552 } else {
551 req->req.error = RAW1394_ERROR_INVALID_ARG; 553 req->req.error = RAW1394_ERROR_INVALID_ARG;
552 } 554 }
553 spin_unlock_irq(&host_info_lock); 555 spin_unlock_irqrestore(&host_info_lock, flags);
554 556
555 req->req.length = 0; 557 req->req.length = 0;
556 break; 558 break;
@@ -569,7 +571,6 @@ static void handle_iso_listen(struct file_info *fi, struct pending_request *req)
569{ 571{
570 int channel = req->req.misc; 572 int channel = req->req.misc;
571 573
572 spin_lock_irq(&host_info_lock);
573 if ((channel > 63) || (channel < -64)) { 574 if ((channel > 63) || (channel < -64)) {
574 req->req.error = RAW1394_ERROR_INVALID_ARG; 575 req->req.error = RAW1394_ERROR_INVALID_ARG;
575 } else if (channel >= 0) { 576 } else if (channel >= 0) {
@@ -601,7 +602,6 @@ static void handle_iso_listen(struct file_info *fi, struct pending_request *req)
601 602
602 req->req.length = 0; 603 req->req.length = 0;
603 queue_complete_req(req); 604 queue_complete_req(req);
604 spin_unlock_irq(&host_info_lock);
605} 605}
606 606
607static void handle_fcp_listen(struct file_info *fi, struct pending_request *req) 607static void handle_fcp_listen(struct file_info *fi, struct pending_request *req)
@@ -627,6 +627,7 @@ static void handle_fcp_listen(struct file_info *fi, struct pending_request *req)
627static int handle_async_request(struct file_info *fi, 627static int handle_async_request(struct file_info *fi,
628 struct pending_request *req, int node) 628 struct pending_request *req, int node)
629{ 629{
630 unsigned long flags;
630 struct hpsb_packet *packet = NULL; 631 struct hpsb_packet *packet = NULL;
631 u64 addr = req->req.address & 0xffffffffffffULL; 632 u64 addr = req->req.address & 0xffffffffffffULL;
632 633
@@ -761,9 +762,9 @@ static int handle_async_request(struct file_info *fi,
761 hpsb_set_packet_complete_task(packet, 762 hpsb_set_packet_complete_task(packet,
762 (void (*)(void *))queue_complete_cb, req); 763 (void (*)(void *))queue_complete_cb, req);
763 764
764 spin_lock_irq(&fi->reqlists_lock); 765 spin_lock_irqsave(&fi->reqlists_lock, flags);
765 list_add_tail(&req->list, &fi->req_pending); 766 list_add_tail(&req->list, &fi->req_pending);
766 spin_unlock_irq(&fi->reqlists_lock); 767 spin_unlock_irqrestore(&fi->reqlists_lock, flags);
767 768
768 packet->generation = req->req.generation; 769 packet->generation = req->req.generation;
769 770
@@ -779,6 +780,7 @@ static int handle_async_request(struct file_info *fi,
779static int handle_iso_send(struct file_info *fi, struct pending_request *req, 780static int handle_iso_send(struct file_info *fi, struct pending_request *req,
780 int channel) 781 int channel)
781{ 782{
783 unsigned long flags;
782 struct hpsb_packet *packet; 784 struct hpsb_packet *packet;
783 785
784 packet = hpsb_make_isopacket(fi->host, req->req.length, channel & 0x3f, 786 packet = hpsb_make_isopacket(fi->host, req->req.length, channel & 0x3f,
@@ -804,9 +806,9 @@ static int handle_iso_send(struct file_info *fi, struct pending_request *req,
804 (void (*)(void *))queue_complete_req, 806 (void (*)(void *))queue_complete_req,
805 req); 807 req);
806 808
807 spin_lock_irq(&fi->reqlists_lock); 809 spin_lock_irqsave(&fi->reqlists_lock, flags);
808 list_add_tail(&req->list, &fi->req_pending); 810 list_add_tail(&req->list, &fi->req_pending);
809 spin_unlock_irq(&fi->reqlists_lock); 811 spin_unlock_irqrestore(&fi->reqlists_lock, flags);
810 812
811 /* Update the generation of the packet just before sending. */ 813 /* Update the generation of the packet just before sending. */
812 packet->generation = req->req.generation; 814 packet->generation = req->req.generation;
@@ -821,6 +823,7 @@ static int handle_iso_send(struct file_info *fi, struct pending_request *req,
821 823
822static int handle_async_send(struct file_info *fi, struct pending_request *req) 824static int handle_async_send(struct file_info *fi, struct pending_request *req)
823{ 825{
826 unsigned long flags;
824 struct hpsb_packet *packet; 827 struct hpsb_packet *packet;
825 int header_length = req->req.misc & 0xffff; 828 int header_length = req->req.misc & 0xffff;
826 int expect_response = req->req.misc >> 16; 829 int expect_response = req->req.misc >> 16;
@@ -867,9 +870,9 @@ static int handle_async_send(struct file_info *fi, struct pending_request *req)
867 hpsb_set_packet_complete_task(packet, 870 hpsb_set_packet_complete_task(packet,
868 (void (*)(void *))queue_complete_cb, req); 871 (void (*)(void *))queue_complete_cb, req);
869 872
870 spin_lock_irq(&fi->reqlists_lock); 873 spin_lock_irqsave(&fi->reqlists_lock, flags);
871 list_add_tail(&req->list, &fi->req_pending); 874 list_add_tail(&req->list, &fi->req_pending);
872 spin_unlock_irq(&fi->reqlists_lock); 875 spin_unlock_irqrestore(&fi->reqlists_lock, flags);
873 876
874 /* Update the generation of the packet just before sending. */ 877 /* Update the generation of the packet just before sending. */
875 packet->generation = req->req.generation; 878 packet->generation = req->req.generation;
@@ -885,6 +888,7 @@ static int handle_async_send(struct file_info *fi, struct pending_request *req)
885static int arm_read(struct hpsb_host *host, int nodeid, quadlet_t * buffer, 888static int arm_read(struct hpsb_host *host, int nodeid, quadlet_t * buffer,
886 u64 addr, size_t length, u16 flags) 889 u64 addr, size_t length, u16 flags)
887{ 890{
891 unsigned long irqflags;
888 struct pending_request *req; 892 struct pending_request *req;
889 struct host_info *hi; 893 struct host_info *hi;
890 struct file_info *fi = NULL; 894 struct file_info *fi = NULL;
@@ -899,7 +903,7 @@ static int arm_read(struct hpsb_host *host, int nodeid, quadlet_t * buffer,
899 "addr: %4.4x %8.8x length: %Zu", nodeid, 903 "addr: %4.4x %8.8x length: %Zu", nodeid,
900 (u16) ((addr >> 32) & 0xFFFF), (u32) (addr & 0xFFFFFFFF), 904 (u16) ((addr >> 32) & 0xFFFF), (u32) (addr & 0xFFFFFFFF),
901 length); 905 length);
902 spin_lock(&host_info_lock); 906 spin_lock_irqsave(&host_info_lock, irqflags);
903 hi = find_host_info(host); /* search address-entry */ 907 hi = find_host_info(host); /* search address-entry */
904 if (hi != NULL) { 908 if (hi != NULL) {
905 list_for_each_entry(fi, &hi->file_info_list, list) { 909 list_for_each_entry(fi, &hi->file_info_list, list) {
@@ -924,7 +928,7 @@ static int arm_read(struct hpsb_host *host, int nodeid, quadlet_t * buffer,
924 if (!found) { 928 if (!found) {
925 printk(KERN_ERR "raw1394: arm_read FAILED addr_entry not found" 929 printk(KERN_ERR "raw1394: arm_read FAILED addr_entry not found"
926 " -> rcode_address_error\n"); 930 " -> rcode_address_error\n");
927 spin_unlock(&host_info_lock); 931 spin_unlock_irqrestore(&host_info_lock, irqflags);
928 return (RCODE_ADDRESS_ERROR); 932 return (RCODE_ADDRESS_ERROR);
929 } else { 933 } else {
930 DBGMSG("arm_read addr_entry FOUND"); 934 DBGMSG("arm_read addr_entry FOUND");
@@ -954,7 +958,7 @@ static int arm_read(struct hpsb_host *host, int nodeid, quadlet_t * buffer,
954 req = __alloc_pending_request(SLAB_ATOMIC); 958 req = __alloc_pending_request(SLAB_ATOMIC);
955 if (!req) { 959 if (!req) {
956 DBGMSG("arm_read -> rcode_conflict_error"); 960 DBGMSG("arm_read -> rcode_conflict_error");
957 spin_unlock(&host_info_lock); 961 spin_unlock_irqrestore(&host_info_lock, irqflags);
958 return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected. 962 return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected.
959 The request may be retried */ 963 The request may be retried */
960 } 964 }
@@ -974,7 +978,7 @@ static int arm_read(struct hpsb_host *host, int nodeid, quadlet_t * buffer,
974 if (!(req->data)) { 978 if (!(req->data)) {
975 free_pending_request(req); 979 free_pending_request(req);
976 DBGMSG("arm_read -> rcode_conflict_error"); 980 DBGMSG("arm_read -> rcode_conflict_error");
977 spin_unlock(&host_info_lock); 981 spin_unlock_irqrestore(&host_info_lock, irqflags);
978 return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected. 982 return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected.
979 The request may be retried */ 983 The request may be retried */
980 } 984 }
@@ -1031,13 +1035,14 @@ static int arm_read(struct hpsb_host *host, int nodeid, quadlet_t * buffer,
1031 sizeof(struct arm_request)); 1035 sizeof(struct arm_request));
1032 queue_complete_req(req); 1036 queue_complete_req(req);
1033 } 1037 }
1034 spin_unlock(&host_info_lock); 1038 spin_unlock_irqrestore(&host_info_lock, irqflags);
1035 return (rcode); 1039 return (rcode);
1036} 1040}
1037 1041
1038static int arm_write(struct hpsb_host *host, int nodeid, int destid, 1042static int arm_write(struct hpsb_host *host, int nodeid, int destid,
1039 quadlet_t * data, u64 addr, size_t length, u16 flags) 1043 quadlet_t * data, u64 addr, size_t length, u16 flags)
1040{ 1044{
1045 unsigned long irqflags;
1041 struct pending_request *req; 1046 struct pending_request *req;
1042 struct host_info *hi; 1047 struct host_info *hi;
1043 struct file_info *fi = NULL; 1048 struct file_info *fi = NULL;
@@ -1052,7 +1057,7 @@ static int arm_write(struct hpsb_host *host, int nodeid, int destid,
1052 "addr: %4.4x %8.8x length: %Zu", nodeid, 1057 "addr: %4.4x %8.8x length: %Zu", nodeid,
1053 (u16) ((addr >> 32) & 0xFFFF), (u32) (addr & 0xFFFFFFFF), 1058 (u16) ((addr >> 32) & 0xFFFF), (u32) (addr & 0xFFFFFFFF),
1054 length); 1059 length);
1055 spin_lock(&host_info_lock); 1060 spin_lock_irqsave(&host_info_lock, irqflags);
1056 hi = find_host_info(host); /* search address-entry */ 1061 hi = find_host_info(host); /* search address-entry */
1057 if (hi != NULL) { 1062 if (hi != NULL) {
1058 list_for_each_entry(fi, &hi->file_info_list, list) { 1063 list_for_each_entry(fi, &hi->file_info_list, list) {
@@ -1077,7 +1082,7 @@ static int arm_write(struct hpsb_host *host, int nodeid, int destid,
1077 if (!found) { 1082 if (!found) {
1078 printk(KERN_ERR "raw1394: arm_write FAILED addr_entry not found" 1083 printk(KERN_ERR "raw1394: arm_write FAILED addr_entry not found"
1079 " -> rcode_address_error\n"); 1084 " -> rcode_address_error\n");
1080 spin_unlock(&host_info_lock); 1085 spin_unlock_irqrestore(&host_info_lock, irqflags);
1081 return (RCODE_ADDRESS_ERROR); 1086 return (RCODE_ADDRESS_ERROR);
1082 } else { 1087 } else {
1083 DBGMSG("arm_write addr_entry FOUND"); 1088 DBGMSG("arm_write addr_entry FOUND");
@@ -1106,7 +1111,7 @@ static int arm_write(struct hpsb_host *host, int nodeid, int destid,
1106 req = __alloc_pending_request(SLAB_ATOMIC); 1111 req = __alloc_pending_request(SLAB_ATOMIC);
1107 if (!req) { 1112 if (!req) {
1108 DBGMSG("arm_write -> rcode_conflict_error"); 1113 DBGMSG("arm_write -> rcode_conflict_error");
1109 spin_unlock(&host_info_lock); 1114 spin_unlock_irqrestore(&host_info_lock, irqflags);
1110 return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected. 1115 return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected.
1111 The request my be retried */ 1116 The request my be retried */
1112 } 1117 }
@@ -1118,7 +1123,7 @@ static int arm_write(struct hpsb_host *host, int nodeid, int destid,
1118 if (!(req->data)) { 1123 if (!(req->data)) {
1119 free_pending_request(req); 1124 free_pending_request(req);
1120 DBGMSG("arm_write -> rcode_conflict_error"); 1125 DBGMSG("arm_write -> rcode_conflict_error");
1121 spin_unlock(&host_info_lock); 1126 spin_unlock_irqrestore(&host_info_lock, irqflags);
1122 return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected. 1127 return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected.
1123 The request may be retried */ 1128 The request may be retried */
1124 } 1129 }
@@ -1165,7 +1170,7 @@ static int arm_write(struct hpsb_host *host, int nodeid, int destid,
1165 sizeof(struct arm_request)); 1170 sizeof(struct arm_request));
1166 queue_complete_req(req); 1171 queue_complete_req(req);
1167 } 1172 }
1168 spin_unlock(&host_info_lock); 1173 spin_unlock_irqrestore(&host_info_lock, irqflags);
1169 return (rcode); 1174 return (rcode);
1170} 1175}
1171 1176
@@ -1173,6 +1178,7 @@ static int arm_lock(struct hpsb_host *host, int nodeid, quadlet_t * store,
1173 u64 addr, quadlet_t data, quadlet_t arg, int ext_tcode, 1178 u64 addr, quadlet_t data, quadlet_t arg, int ext_tcode,
1174 u16 flags) 1179 u16 flags)
1175{ 1180{
1181 unsigned long irqflags;
1176 struct pending_request *req; 1182 struct pending_request *req;
1177 struct host_info *hi; 1183 struct host_info *hi;
1178 struct file_info *fi = NULL; 1184 struct file_info *fi = NULL;
@@ -1198,7 +1204,7 @@ static int arm_lock(struct hpsb_host *host, int nodeid, quadlet_t * store,
1198 (u32) (addr & 0xFFFFFFFF), ext_tcode & 0xFF, 1204 (u32) (addr & 0xFFFFFFFF), ext_tcode & 0xFF,
1199 be32_to_cpu(data), be32_to_cpu(arg)); 1205 be32_to_cpu(data), be32_to_cpu(arg));
1200 } 1206 }
1201 spin_lock(&host_info_lock); 1207 spin_lock_irqsave(&host_info_lock, irqflags);
1202 hi = find_host_info(host); /* search address-entry */ 1208 hi = find_host_info(host); /* search address-entry */
1203 if (hi != NULL) { 1209 if (hi != NULL) {
1204 list_for_each_entry(fi, &hi->file_info_list, list) { 1210 list_for_each_entry(fi, &hi->file_info_list, list) {
@@ -1224,7 +1230,7 @@ static int arm_lock(struct hpsb_host *host, int nodeid, quadlet_t * store,
1224 if (!found) { 1230 if (!found) {
1225 printk(KERN_ERR "raw1394: arm_lock FAILED addr_entry not found" 1231 printk(KERN_ERR "raw1394: arm_lock FAILED addr_entry not found"
1226 " -> rcode_address_error\n"); 1232 " -> rcode_address_error\n");
1227 spin_unlock(&host_info_lock); 1233 spin_unlock_irqrestore(&host_info_lock, irqflags);
1228 return (RCODE_ADDRESS_ERROR); 1234 return (RCODE_ADDRESS_ERROR);
1229 } else { 1235 } else {
1230 DBGMSG("arm_lock addr_entry FOUND"); 1236 DBGMSG("arm_lock addr_entry FOUND");
@@ -1307,7 +1313,7 @@ static int arm_lock(struct hpsb_host *host, int nodeid, quadlet_t * store,
1307 req = __alloc_pending_request(SLAB_ATOMIC); 1313 req = __alloc_pending_request(SLAB_ATOMIC);
1308 if (!req) { 1314 if (!req) {
1309 DBGMSG("arm_lock -> rcode_conflict_error"); 1315 DBGMSG("arm_lock -> rcode_conflict_error");
1310 spin_unlock(&host_info_lock); 1316 spin_unlock_irqrestore(&host_info_lock, irqflags);
1311 return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected. 1317 return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected.
1312 The request may be retried */ 1318 The request may be retried */
1313 } 1319 }
@@ -1316,7 +1322,7 @@ static int arm_lock(struct hpsb_host *host, int nodeid, quadlet_t * store,
1316 if (!(req->data)) { 1322 if (!(req->data)) {
1317 free_pending_request(req); 1323 free_pending_request(req);
1318 DBGMSG("arm_lock -> rcode_conflict_error"); 1324 DBGMSG("arm_lock -> rcode_conflict_error");
1319 spin_unlock(&host_info_lock); 1325 spin_unlock_irqrestore(&host_info_lock, irqflags);
1320 return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected. 1326 return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected.
1321 The request may be retried */ 1327 The request may be retried */
1322 } 1328 }
@@ -1382,7 +1388,7 @@ static int arm_lock(struct hpsb_host *host, int nodeid, quadlet_t * store,
1382 sizeof(struct arm_response) + 2 * sizeof(*store)); 1388 sizeof(struct arm_response) + 2 * sizeof(*store));
1383 queue_complete_req(req); 1389 queue_complete_req(req);
1384 } 1390 }
1385 spin_unlock(&host_info_lock); 1391 spin_unlock_irqrestore(&host_info_lock, irqflags);
1386 return (rcode); 1392 return (rcode);
1387} 1393}
1388 1394
@@ -1390,6 +1396,7 @@ static int arm_lock64(struct hpsb_host *host, int nodeid, octlet_t * store,
1390 u64 addr, octlet_t data, octlet_t arg, int ext_tcode, 1396 u64 addr, octlet_t data, octlet_t arg, int ext_tcode,
1391 u16 flags) 1397 u16 flags)
1392{ 1398{
1399 unsigned long irqflags;
1393 struct pending_request *req; 1400 struct pending_request *req;
1394 struct host_info *hi; 1401 struct host_info *hi;
1395 struct file_info *fi = NULL; 1402 struct file_info *fi = NULL;
@@ -1422,7 +1429,7 @@ static int arm_lock64(struct hpsb_host *host, int nodeid, octlet_t * store,
1422 (u32) ((be64_to_cpu(arg) >> 32) & 0xFFFFFFFF), 1429 (u32) ((be64_to_cpu(arg) >> 32) & 0xFFFFFFFF),
1423 (u32) (be64_to_cpu(arg) & 0xFFFFFFFF)); 1430 (u32) (be64_to_cpu(arg) & 0xFFFFFFFF));
1424 } 1431 }
1425 spin_lock(&host_info_lock); 1432 spin_lock_irqsave(&host_info_lock, irqflags);
1426 hi = find_host_info(host); /* search addressentry in file_info's for host */ 1433 hi = find_host_info(host); /* search addressentry in file_info's for host */
1427 if (hi != NULL) { 1434 if (hi != NULL) {
1428 list_for_each_entry(fi, &hi->file_info_list, list) { 1435 list_for_each_entry(fi, &hi->file_info_list, list) {
@@ -1449,7 +1456,7 @@ static int arm_lock64(struct hpsb_host *host, int nodeid, octlet_t * store,
1449 printk(KERN_ERR 1456 printk(KERN_ERR
1450 "raw1394: arm_lock64 FAILED addr_entry not found" 1457 "raw1394: arm_lock64 FAILED addr_entry not found"
1451 " -> rcode_address_error\n"); 1458 " -> rcode_address_error\n");
1452 spin_unlock(&host_info_lock); 1459 spin_unlock_irqrestore(&host_info_lock, irqflags);
1453 return (RCODE_ADDRESS_ERROR); 1460 return (RCODE_ADDRESS_ERROR);
1454 } else { 1461 } else {
1455 DBGMSG("arm_lock64 addr_entry FOUND"); 1462 DBGMSG("arm_lock64 addr_entry FOUND");
@@ -1533,7 +1540,7 @@ static int arm_lock64(struct hpsb_host *host, int nodeid, octlet_t * store,
1533 DBGMSG("arm_lock64 -> entering notification-section"); 1540 DBGMSG("arm_lock64 -> entering notification-section");
1534 req = __alloc_pending_request(SLAB_ATOMIC); 1541 req = __alloc_pending_request(SLAB_ATOMIC);
1535 if (!req) { 1542 if (!req) {
1536 spin_unlock(&host_info_lock); 1543 spin_unlock_irqrestore(&host_info_lock, irqflags);
1537 DBGMSG("arm_lock64 -> rcode_conflict_error"); 1544 DBGMSG("arm_lock64 -> rcode_conflict_error");
1538 return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected. 1545 return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected.
1539 The request may be retried */ 1546 The request may be retried */
@@ -1542,7 +1549,7 @@ static int arm_lock64(struct hpsb_host *host, int nodeid, octlet_t * store,
1542 req->data = kmalloc(size, SLAB_ATOMIC); 1549 req->data = kmalloc(size, SLAB_ATOMIC);
1543 if (!(req->data)) { 1550 if (!(req->data)) {
1544 free_pending_request(req); 1551 free_pending_request(req);
1545 spin_unlock(&host_info_lock); 1552 spin_unlock_irqrestore(&host_info_lock, irqflags);
1546 DBGMSG("arm_lock64 -> rcode_conflict_error"); 1553 DBGMSG("arm_lock64 -> rcode_conflict_error");
1547 return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected. 1554 return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected.
1548 The request may be retried */ 1555 The request may be retried */
@@ -1609,7 +1616,7 @@ static int arm_lock64(struct hpsb_host *host, int nodeid, octlet_t * store,
1609 sizeof(struct arm_response) + 2 * sizeof(*store)); 1616 sizeof(struct arm_response) + 2 * sizeof(*store));
1610 queue_complete_req(req); 1617 queue_complete_req(req);
1611 } 1618 }
1612 spin_unlock(&host_info_lock); 1619 spin_unlock_irqrestore(&host_info_lock, irqflags);
1613 return (rcode); 1620 return (rcode);
1614} 1621}
1615 1622
@@ -1980,6 +1987,7 @@ static int write_phypacket(struct file_info *fi, struct pending_request *req)
1980 struct hpsb_packet *packet = NULL; 1987 struct hpsb_packet *packet = NULL;
1981 int retval = 0; 1988 int retval = 0;
1982 quadlet_t data; 1989 quadlet_t data;
1990 unsigned long flags;
1983 1991
1984 data = be32_to_cpu((u32) req->req.sendb); 1992 data = be32_to_cpu((u32) req->req.sendb);
1985 DBGMSG("write_phypacket called - quadlet 0x%8.8x ", data); 1993 DBGMSG("write_phypacket called - quadlet 0x%8.8x ", data);
@@ -1990,9 +1998,9 @@ static int write_phypacket(struct file_info *fi, struct pending_request *req)
1990 req->packet = packet; 1998 req->packet = packet;
1991 hpsb_set_packet_complete_task(packet, 1999 hpsb_set_packet_complete_task(packet,
1992 (void (*)(void *))queue_complete_cb, req); 2000 (void (*)(void *))queue_complete_cb, req);
1993 spin_lock_irq(&fi->reqlists_lock); 2001 spin_lock_irqsave(&fi->reqlists_lock, flags);
1994 list_add_tail(&req->list, &fi->req_pending); 2002 list_add_tail(&req->list, &fi->req_pending);
1995 spin_unlock_irq(&fi->reqlists_lock); 2003 spin_unlock_irqrestore(&fi->reqlists_lock, flags);
1996 packet->generation = req->req.generation; 2004 packet->generation = req->req.generation;
1997 retval = hpsb_send_packet(packet); 2005 retval = hpsb_send_packet(packet);
1998 DBGMSG("write_phypacket send_packet called => retval: %d ", retval); 2006 DBGMSG("write_phypacket send_packet called => retval: %d ", retval);
@@ -2659,14 +2667,15 @@ static unsigned int raw1394_poll(struct file *file, poll_table * pt)
2659{ 2667{
2660 struct file_info *fi = file->private_data; 2668 struct file_info *fi = file->private_data;
2661 unsigned int mask = POLLOUT | POLLWRNORM; 2669 unsigned int mask = POLLOUT | POLLWRNORM;
2670 unsigned long flags;
2662 2671
2663 poll_wait(file, &fi->poll_wait_complete, pt); 2672 poll_wait(file, &fi->poll_wait_complete, pt);
2664 2673
2665 spin_lock_irq(&fi->reqlists_lock); 2674 spin_lock_irqsave(&fi->reqlists_lock, flags);
2666 if (!list_empty(&fi->req_complete)) { 2675 if (!list_empty(&fi->req_complete)) {
2667 mask |= POLLIN | POLLRDNORM; 2676 mask |= POLLIN | POLLRDNORM;
2668 } 2677 }
2669 spin_unlock_irq(&fi->reqlists_lock); 2678 spin_unlock_irqrestore(&fi->reqlists_lock, flags);
2670 2679
2671 return mask; 2680 return mask;
2672} 2681}
@@ -2710,6 +2719,7 @@ static int raw1394_release(struct inode *inode, struct file *file)
2710 struct arm_addr *arm_addr = NULL; 2719 struct arm_addr *arm_addr = NULL;
2711 int another_host; 2720 int another_host;
2712 int csr_mod = 0; 2721 int csr_mod = 0;
2722 unsigned long flags;
2713 2723
2714 if (fi->iso_state != RAW1394_ISO_INACTIVE) 2724 if (fi->iso_state != RAW1394_ISO_INACTIVE)
2715 raw1394_iso_shutdown(fi); 2725 raw1394_iso_shutdown(fi);
@@ -2720,13 +2730,11 @@ static int raw1394_release(struct inode *inode, struct file *file)
2720 } 2730 }
2721 } 2731 }
2722 2732
2723 spin_lock_irq(&host_info_lock); 2733 spin_lock_irqsave(&host_info_lock, flags);
2724 fi->listen_channels = 0; 2734 fi->listen_channels = 0;
2725 spin_unlock_irq(&host_info_lock);
2726 2735
2727 fail = 0; 2736 fail = 0;
2728 /* set address-entries invalid */ 2737 /* set address-entries invalid */
2729 spin_lock_irq(&host_info_lock);
2730 2738
2731 while (!list_empty(&fi->addr_list)) { 2739 while (!list_empty(&fi->addr_list)) {
2732 another_host = 0; 2740 another_host = 0;
@@ -2777,14 +2785,14 @@ static int raw1394_release(struct inode *inode, struct file *file)
2777 vfree(addr->addr_space_buffer); 2785 vfree(addr->addr_space_buffer);
2778 kfree(addr); 2786 kfree(addr);
2779 } /* while */ 2787 } /* while */
2780 spin_unlock_irq(&host_info_lock); 2788 spin_unlock_irqrestore(&host_info_lock, flags);
2781 if (fail > 0) { 2789 if (fail > 0) {
2782 printk(KERN_ERR "raw1394: during addr_list-release " 2790 printk(KERN_ERR "raw1394: during addr_list-release "
2783 "error(s) occurred \n"); 2791 "error(s) occurred \n");
2784 } 2792 }
2785 2793
2786 while (!done) { 2794 while (!done) {
2787 spin_lock_irq(&fi->reqlists_lock); 2795 spin_lock_irqsave(&fi->reqlists_lock, flags);
2788 2796
2789 while (!list_empty(&fi->req_complete)) { 2797 while (!list_empty(&fi->req_complete)) {
2790 lh = fi->req_complete.next; 2798 lh = fi->req_complete.next;
@@ -2798,7 +2806,7 @@ static int raw1394_release(struct inode *inode, struct file *file)
2798 if (list_empty(&fi->req_pending)) 2806 if (list_empty(&fi->req_pending))
2799 done = 1; 2807 done = 1;
2800 2808
2801 spin_unlock_irq(&fi->reqlists_lock); 2809 spin_unlock_irqrestore(&fi->reqlists_lock, flags);
2802 2810
2803 if (!done) 2811 if (!done)
2804 down_interruptible(&fi->complete_sem); 2812 down_interruptible(&fi->complete_sem);
@@ -2828,9 +2836,9 @@ static int raw1394_release(struct inode *inode, struct file *file)
2828 fi->host->id); 2836 fi->host->id);
2829 2837
2830 if (fi->state == connected) { 2838 if (fi->state == connected) {
2831 spin_lock_irq(&host_info_lock); 2839 spin_lock_irqsave(&host_info_lock, flags);
2832 list_del(&fi->list); 2840 list_del(&fi->list);
2833 spin_unlock_irq(&host_info_lock); 2841 spin_unlock_irqrestore(&host_info_lock, flags);
2834 2842
2835 put_device(&fi->host->device); 2843 put_device(&fi->host->device);
2836 } 2844 }
diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig
index 444f7756fee6..571a68691a4a 100644
--- a/drivers/input/keyboard/Kconfig
+++ b/drivers/input/keyboard/Kconfig
@@ -93,7 +93,7 @@ config KEYBOARD_LKKBD
93 93
94config KEYBOARD_LOCOMO 94config KEYBOARD_LOCOMO
95 tristate "LoCoMo Keyboard Support" 95 tristate "LoCoMo Keyboard Support"
96 depends on SHARP_LOCOMO 96 depends on SHARP_LOCOMO && INPUT_KEYBOARD
97 help 97 help
98 Say Y here if you are running Linux on a Sharp Zaurus Collie or Poodle based PDA 98 Say Y here if you are running Linux on a Sharp Zaurus Collie or Poodle based PDA
99 99
diff --git a/drivers/input/keyboard/spitzkbd.c b/drivers/input/keyboard/spitzkbd.c
index 1714045a182b..344f46005401 100644
--- a/drivers/input/keyboard/spitzkbd.c
+++ b/drivers/input/keyboard/spitzkbd.c
@@ -53,7 +53,7 @@ static unsigned char spitzkbd_keycode[NR_SCANCODES] = {
53 KEY_LEFTCTRL, KEY_1, KEY_3, KEY_5, KEY_6, KEY_7, KEY_9, KEY_0, KEY_BACKSPACE, SPITZ_KEY_EXOK, SPITZ_KEY_EXCANCEL, 0, 0, 0, 0, 0, /* 1-16 */ 53 KEY_LEFTCTRL, KEY_1, KEY_3, KEY_5, KEY_6, KEY_7, KEY_9, KEY_0, KEY_BACKSPACE, SPITZ_KEY_EXOK, SPITZ_KEY_EXCANCEL, 0, 0, 0, 0, 0, /* 1-16 */
54 0, KEY_2, KEY_4, KEY_R, KEY_Y, KEY_8, KEY_I, KEY_O, KEY_P, SPITZ_KEY_EXJOGDOWN, SPITZ_KEY_EXJOGUP, 0, 0, 0, 0, 0, /* 17-32 */ 54 0, KEY_2, KEY_4, KEY_R, KEY_Y, KEY_8, KEY_I, KEY_O, KEY_P, SPITZ_KEY_EXJOGDOWN, SPITZ_KEY_EXJOGUP, 0, 0, 0, 0, 0, /* 17-32 */
55 KEY_TAB, KEY_Q, KEY_E, KEY_T, KEY_G, KEY_U, KEY_J, KEY_K, 0, 0, 0, 0, 0, 0, 0, 0, /* 33-48 */ 55 KEY_TAB, KEY_Q, KEY_E, KEY_T, KEY_G, KEY_U, KEY_J, KEY_K, 0, 0, 0, 0, 0, 0, 0, 0, /* 33-48 */
56 SPITZ_KEY_CALENDER, KEY_W, KEY_S, KEY_F, KEY_V, KEY_H, KEY_M, KEY_L, 0, 0, KEY_RIGHTSHIFT, 0, 0, 0, 0, 0, /* 49-64 */ 56 SPITZ_KEY_CALENDER, KEY_W, KEY_S, KEY_F, KEY_V, KEY_H, KEY_M, KEY_L, 0, KEY_RIGHTSHIFT, 0, 0, 0, 0, 0, 0, /* 49-64 */
57 SPITZ_KEY_ADDRESS, KEY_A, KEY_D, KEY_C, KEY_B, KEY_N, KEY_DOT, 0, KEY_ENTER, KEY_LEFTSHIFT, 0, 0, 0, 0, 0, 0, /* 65-80 */ 57 SPITZ_KEY_ADDRESS, KEY_A, KEY_D, KEY_C, KEY_B, KEY_N, KEY_DOT, 0, KEY_ENTER, KEY_LEFTSHIFT, 0, 0, 0, 0, 0, 0, /* 65-80 */
58 SPITZ_KEY_MAIL, KEY_Z, KEY_X, KEY_MINUS, KEY_SPACE, KEY_COMMA, 0, KEY_UP, 0, 0, SPITZ_KEY_FN, 0, 0, 0, 0, 0, /* 81-96 */ 58 SPITZ_KEY_MAIL, KEY_Z, KEY_X, KEY_MINUS, KEY_SPACE, KEY_COMMA, 0, KEY_UP, 0, 0, SPITZ_KEY_FN, 0, 0, 0, 0, 0, /* 81-96 */
59 KEY_SYSRQ, SPITZ_KEY_JAP1, SPITZ_KEY_JAP2, SPITZ_KEY_CANCEL, SPITZ_KEY_OK, SPITZ_KEY_MENU, KEY_LEFT, KEY_DOWN, KEY_RIGHT, 0, 0, 0, 0, 0, 0, 0 /* 97-112 */ 59 KEY_SYSRQ, SPITZ_KEY_JAP1, SPITZ_KEY_JAP2, SPITZ_KEY_CANCEL, SPITZ_KEY_OK, SPITZ_KEY_MENU, KEY_LEFT, KEY_DOWN, KEY_RIGHT, 0, 0, 0, 0, 0, 0, 0 /* 97-112 */
diff --git a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c
index d5c5b32045af..4015a91f4b6e 100644
--- a/drivers/input/misc/uinput.c
+++ b/drivers/input/misc/uinput.c
@@ -90,11 +90,11 @@ static inline int uinput_request_reserve_slot(struct uinput_device *udev, struct
90 90
91static void uinput_request_done(struct uinput_device *udev, struct uinput_request *request) 91static void uinput_request_done(struct uinput_device *udev, struct uinput_request *request)
92{ 92{
93 complete(&request->done);
94
95 /* Mark slot as available */ 93 /* Mark slot as available */
96 udev->requests[request->id] = NULL; 94 udev->requests[request->id] = NULL;
97 wake_up_interruptible(&udev->requests_waitq); 95 wake_up_interruptible(&udev->requests_waitq);
96
97 complete(&request->done);
98} 98}
99 99
100static int uinput_request_submit(struct input_dev *dev, struct uinput_request *request) 100static int uinput_request_submit(struct input_dev *dev, struct uinput_request *request)
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 2897df90df44..e9476075aa13 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -3063,6 +3063,7 @@ static int md_thread(void * arg)
3063 * many dirty RAID5 blocks. 3063 * many dirty RAID5 blocks.
3064 */ 3064 */
3065 3065
3066 allow_signal(SIGKILL);
3066 complete(thread->event); 3067 complete(thread->event);
3067 while (!kthread_should_stop()) { 3068 while (!kthread_should_stop()) {
3068 void (*run)(mddev_t *); 3069 void (*run)(mddev_t *);
@@ -3111,7 +3112,7 @@ mdk_thread_t *md_register_thread(void (*run) (mddev_t *), mddev_t *mddev,
3111 thread->mddev = mddev; 3112 thread->mddev = mddev;
3112 thread->name = name; 3113 thread->name = name;
3113 thread->timeout = MAX_SCHEDULE_TIMEOUT; 3114 thread->timeout = MAX_SCHEDULE_TIMEOUT;
3114 thread->tsk = kthread_run(md_thread, thread, mdname(thread->mddev)); 3115 thread->tsk = kthread_run(md_thread, thread, name, mdname(thread->mddev));
3115 if (IS_ERR(thread->tsk)) { 3116 if (IS_ERR(thread->tsk)) {
3116 kfree(thread); 3117 kfree(thread);
3117 return NULL; 3118 return NULL;
@@ -3569,6 +3570,7 @@ static void md_do_sync(mddev_t *mddev)
3569 try_again: 3570 try_again:
3570 if (signal_pending(current)) { 3571 if (signal_pending(current)) {
3571 flush_signals(current); 3572 flush_signals(current);
3573 set_bit(MD_RECOVERY_INTR, &mddev->recovery);
3572 goto skip; 3574 goto skip;
3573 } 3575 }
3574 ITERATE_MDDEV(mddev2,tmp) { 3576 ITERATE_MDDEV(mddev2,tmp) {
diff --git a/drivers/media/radio/radio-cadet.c b/drivers/media/radio/radio-cadet.c
index 022913da8c59..9b0406318f2d 100644
--- a/drivers/media/radio/radio-cadet.c
+++ b/drivers/media/radio/radio-cadet.c
@@ -543,7 +543,7 @@ static int cadet_probe(void)
543 543
544 for(i=0;i<8;i++) { 544 for(i=0;i<8;i++) {
545 io=iovals[i]; 545 io=iovals[i];
546 if(request_region(io,2, "cadet-probe")>=0) { 546 if (request_region(io, 2, "cadet-probe")) {
547 cadet_setfreq(1410); 547 cadet_setfreq(1410);
548 if(cadet_getfreq()==1410) { 548 if(cadet_getfreq()==1410) {
549 release_region(io, 2); 549 release_region(io, 2);
diff --git a/drivers/media/video/vpx3220.c b/drivers/media/video/vpx3220.c
index 4437bdebe24f..137b58f2c666 100644
--- a/drivers/media/video/vpx3220.c
+++ b/drivers/media/video/vpx3220.c
@@ -203,7 +203,7 @@ static const unsigned short init_ntsc[] = {
203 0x8c, 640, /* Horizontal length */ 203 0x8c, 640, /* Horizontal length */
204 0x8d, 640, /* Number of pixels */ 204 0x8d, 640, /* Number of pixels */
205 0x8f, 0xc00, /* Disable window 2 */ 205 0x8f, 0xc00, /* Disable window 2 */
206 0xf0, 0x173, /* 13.5 MHz transport, Forced 206 0xf0, 0x73, /* 13.5 MHz transport, Forced
207 * mode, latch windows */ 207 * mode, latch windows */
208 0xf2, 0x13, /* NTSC M, composite input */ 208 0xf2, 0x13, /* NTSC M, composite input */
209 0xe7, 0x1e1, /* Enable vertical standard 209 0xe7, 0x1e1, /* Enable vertical standard
@@ -212,38 +212,36 @@ static const unsigned short init_ntsc[] = {
212 212
213static const unsigned short init_pal[] = { 213static const unsigned short init_pal[] = {
214 0x88, 23, /* Window 1 vertical begin */ 214 0x88, 23, /* Window 1 vertical begin */
215 0x89, 288 + 16, /* Vertical lines in (16 lines 215 0x89, 288, /* Vertical lines in (16 lines
216 * skipped by the VFE) */ 216 * skipped by the VFE) */
217 0x8a, 288 + 16, /* Vertical lines out (16 lines 217 0x8a, 288, /* Vertical lines out (16 lines
218 * skipped by the VFE) */ 218 * skipped by the VFE) */
219 0x8b, 16, /* Horizontal begin */ 219 0x8b, 16, /* Horizontal begin */
220 0x8c, 768, /* Horizontal length */ 220 0x8c, 768, /* Horizontal length */
221 0x8d, 784, /* Number of pixels 221 0x8d, 784, /* Number of pixels
222 * Must be >= Horizontal begin + Horizontal length */ 222 * Must be >= Horizontal begin + Horizontal length */
223 0x8f, 0xc00, /* Disable window 2 */ 223 0x8f, 0xc00, /* Disable window 2 */
224 0xf0, 0x177, /* 13.5 MHz transport, Forced 224 0xf0, 0x77, /* 13.5 MHz transport, Forced
225 * mode, latch windows */ 225 * mode, latch windows */
226 0xf2, 0x3d1, /* PAL B,G,H,I, composite input */ 226 0xf2, 0x3d1, /* PAL B,G,H,I, composite input */
227 0xe7, 0x261, /* PAL/SECAM set to 288 + 16 lines 227 0xe7, 0x241, /* PAL/SECAM set to 288 lines */
228 * change to 0x241 for 288 lines */
229}; 228};
230 229
231static const unsigned short init_secam[] = { 230static const unsigned short init_secam[] = {
232 0x88, 23 - 16, /* Window 1 vertical begin */ 231 0x88, 23, /* Window 1 vertical begin */
233 0x89, 288 + 16, /* Vertical lines in (16 lines 232 0x89, 288, /* Vertical lines in (16 lines
234 * skipped by the VFE) */ 233 * skipped by the VFE) */
235 0x8a, 288 + 16, /* Vertical lines out (16 lines 234 0x8a, 288, /* Vertical lines out (16 lines
236 * skipped by the VFE) */ 235 * skipped by the VFE) */
237 0x8b, 16, /* Horizontal begin */ 236 0x8b, 16, /* Horizontal begin */
238 0x8c, 768, /* Horizontal length */ 237 0x8c, 768, /* Horizontal length */
239 0x8d, 784, /* Number of pixels 238 0x8d, 784, /* Number of pixels
240 * Must be >= Horizontal begin + Horizontal length */ 239 * Must be >= Horizontal begin + Horizontal length */
241 0x8f, 0xc00, /* Disable window 2 */ 240 0x8f, 0xc00, /* Disable window 2 */
242 0xf0, 0x177, /* 13.5 MHz transport, Forced 241 0xf0, 0x77, /* 13.5 MHz transport, Forced
243 * mode, latch windows */ 242 * mode, latch windows */
244 0xf2, 0x3d5, /* SECAM, composite input */ 243 0xf2, 0x3d5, /* SECAM, composite input */
245 0xe7, 0x261, /* PAL/SECAM set to 288 + 16 lines 244 0xe7, 0x241, /* PAL/SECAM set to 288 lines */
246 * change to 0x241 for 288 lines */
247}; 245};
248 246
249static const unsigned char init_common[] = { 247static const unsigned char init_common[] = {
@@ -410,6 +408,12 @@ vpx3220_command (struct i2c_client *client,
410 case DECODER_SET_NORM: 408 case DECODER_SET_NORM:
411 { 409 {
412 int *iarg = arg, data; 410 int *iarg = arg, data;
411 int temp_input;
412
413 /* Here we back up the input selection because it gets
414 overwritten when we fill the registers with the
415 choosen video norm */
416 temp_input = vpx3220_fp_read(client, 0xf2);
413 417
414 dprintk(1, KERN_DEBUG "%s: DECODER_SET_NORM %d\n", 418 dprintk(1, KERN_DEBUG "%s: DECODER_SET_NORM %d\n",
415 I2C_NAME(client), *iarg); 419 I2C_NAME(client), *iarg);
@@ -449,6 +453,10 @@ vpx3220_command (struct i2c_client *client,
449 453
450 } 454 }
451 decoder->norm = *iarg; 455 decoder->norm = *iarg;
456
457 /* And here we set the backed up video input again */
458 vpx3220_fp_write(client, 0xf2, temp_input | 0x0010);
459 udelay(10);
452 } 460 }
453 break; 461 break;
454 462
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c
index 429820e48c69..7de19a84dc74 100644
--- a/drivers/message/fusion/mptsas.c
+++ b/drivers/message/fusion/mptsas.c
@@ -257,8 +257,8 @@ static void mptsas_print_device_pg0(SasDevicePage0_t *pg0)
257 printk("SAS Address=0x%llX\n", le64_to_cpu(sas_address)); 257 printk("SAS Address=0x%llX\n", le64_to_cpu(sas_address));
258 printk("Target ID=0x%X\n", pg0->TargetID); 258 printk("Target ID=0x%X\n", pg0->TargetID);
259 printk("Bus=0x%X\n", pg0->Bus); 259 printk("Bus=0x%X\n", pg0->Bus);
260 printk("PhyNum=0x%X\n", pg0->PhyNum); 260 printk("Parent Phy Num=0x%X\n", pg0->PhyNum);
261 printk("AccessStatus=0x%X\n", le16_to_cpu(pg0->AccessStatus)); 261 printk("Access Status=0x%X\n", le16_to_cpu(pg0->AccessStatus));
262 printk("Device Info=0x%X\n", le32_to_cpu(pg0->DeviceInfo)); 262 printk("Device Info=0x%X\n", le32_to_cpu(pg0->DeviceInfo));
263 printk("Flags=0x%X\n", le16_to_cpu(pg0->Flags)); 263 printk("Flags=0x%X\n", le16_to_cpu(pg0->Flags));
264 printk("Physical Port=0x%X\n", pg0->PhysicalPort); 264 printk("Physical Port=0x%X\n", pg0->PhysicalPort);
@@ -270,7 +270,7 @@ static void mptsas_print_expander_pg1(SasExpanderPage1_t *pg1)
270 printk("---- SAS EXPANDER PAGE 1 ------------\n"); 270 printk("---- SAS EXPANDER PAGE 1 ------------\n");
271 271
272 printk("Physical Port=0x%X\n", pg1->PhysicalPort); 272 printk("Physical Port=0x%X\n", pg1->PhysicalPort);
273 printk("PHY Identifier=0x%X\n", pg1->Phy); 273 printk("PHY Identifier=0x%X\n", pg1->PhyIdentifier);
274 printk("Negotiated Link Rate=0x%X\n", pg1->NegotiatedLinkRate); 274 printk("Negotiated Link Rate=0x%X\n", pg1->NegotiatedLinkRate);
275 printk("Programmed Link Rate=0x%X\n", pg1->ProgrammedLinkRate); 275 printk("Programmed Link Rate=0x%X\n", pg1->ProgrammedLinkRate);
276 printk("Hardware Link Rate=0x%X\n", pg1->HwLinkRate); 276 printk("Hardware Link Rate=0x%X\n", pg1->HwLinkRate);
@@ -604,7 +604,7 @@ mptsas_sas_expander_pg1(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info,
604 mptsas_print_expander_pg1(buffer); 604 mptsas_print_expander_pg1(buffer);
605 605
606 /* save config data */ 606 /* save config data */
607 phy_info->phy_id = buffer->Phy; 607 phy_info->phy_id = buffer->PhyIdentifier;
608 phy_info->port_id = buffer->PhysicalPort; 608 phy_info->port_id = buffer->PhysicalPort;
609 phy_info->negotiated_link_rate = buffer->NegotiatedLinkRate; 609 phy_info->negotiated_link_rate = buffer->NegotiatedLinkRate;
610 phy_info->programmed_link_rate = buffer->ProgrammedLinkRate; 610 phy_info->programmed_link_rate = buffer->ProgrammedLinkRate;
@@ -825,6 +825,8 @@ mptsas_probe_hba_phys(MPT_ADAPTER *ioc, int *index)
825 mptsas_sas_device_pg0(ioc, &port_info->phy_info[i].identify, 825 mptsas_sas_device_pg0(ioc, &port_info->phy_info[i].identify,
826 (MPI_SAS_DEVICE_PGAD_FORM_GET_NEXT_HANDLE << 826 (MPI_SAS_DEVICE_PGAD_FORM_GET_NEXT_HANDLE <<
827 MPI_SAS_DEVICE_PGAD_FORM_SHIFT), handle); 827 MPI_SAS_DEVICE_PGAD_FORM_SHIFT), handle);
828 port_info->phy_info[i].identify.phy_id =
829 port_info->phy_info[i].phy_id;
828 handle = port_info->phy_info[i].identify.handle; 830 handle = port_info->phy_info[i].identify.handle;
829 831
830 if (port_info->phy_info[i].attached.handle) { 832 if (port_info->phy_info[i].attached.handle) {
@@ -881,6 +883,8 @@ mptsas_probe_expander_phys(MPT_ADAPTER *ioc, u32 *handle, int *index)
881 (MPI_SAS_DEVICE_PGAD_FORM_HANDLE << 883 (MPI_SAS_DEVICE_PGAD_FORM_HANDLE <<
882 MPI_SAS_DEVICE_PGAD_FORM_SHIFT), 884 MPI_SAS_DEVICE_PGAD_FORM_SHIFT),
883 port_info->phy_info[i].identify.handle); 885 port_info->phy_info[i].identify.handle);
886 port_info->phy_info[i].identify.phy_id =
887 port_info->phy_info[i].phy_id;
884 } 888 }
885 889
886 if (port_info->phy_info[i].attached.handle) { 890 if (port_info->phy_info[i].attached.handle) {
diff --git a/drivers/net/e100.c b/drivers/net/e100.c
index fbf1c06ec5c1..40887f09b681 100644
--- a/drivers/net/e100.c
+++ b/drivers/net/e100.c
@@ -903,8 +903,8 @@ static void mdio_write(struct net_device *netdev, int addr, int reg, int data)
903 903
904static void e100_get_defaults(struct nic *nic) 904static void e100_get_defaults(struct nic *nic)
905{ 905{
906 struct param_range rfds = { .min = 16, .max = 256, .count = 256 }; 906 struct param_range rfds = { .min = 16, .max = 256, .count = 64 };
907 struct param_range cbs = { .min = 64, .max = 256, .count = 128 }; 907 struct param_range cbs = { .min = 64, .max = 256, .count = 64 };
908 908
909 pci_read_config_byte(nic->pdev, PCI_REVISION_ID, &nic->rev_id); 909 pci_read_config_byte(nic->pdev, PCI_REVISION_ID, &nic->rev_id);
910 /* MAC type is encoded as rev ID; exception: ICH is treated as 82559 */ 910 /* MAC type is encoded as rev ID; exception: ICH is treated as 82559 */
@@ -1007,213 +1007,25 @@ static void e100_configure(struct nic *nic, struct cb *cb, struct sk_buff *skb)
1007 c[16], c[17], c[18], c[19], c[20], c[21], c[22], c[23]); 1007 c[16], c[17], c[18], c[19], c[20], c[21], c[22], c[23]);
1008} 1008}
1009 1009
1010/********************************************************/
1011/* Micro code for 8086:1229 Rev 8 */
1012/********************************************************/
1013
1014/* Parameter values for the D101M B-step */
1015#define D101M_CPUSAVER_TIMER_DWORD 78
1016#define D101M_CPUSAVER_BUNDLE_DWORD 65
1017#define D101M_CPUSAVER_MIN_SIZE_DWORD 126
1018
1019#define D101M_B_RCVBUNDLE_UCODE \
1020{\
10210x00550215, 0xFFFF0437, 0xFFFFFFFF, 0x06A70789, 0xFFFFFFFF, 0x0558FFFF, \
10220x000C0001, 0x00101312, 0x000C0008, 0x00380216, \
10230x0010009C, 0x00204056, 0x002380CC, 0x00380056, \
10240x0010009C, 0x00244C0B, 0x00000800, 0x00124818, \
10250x00380438, 0x00000000, 0x00140000, 0x00380555, \
10260x00308000, 0x00100662, 0x00100561, 0x000E0408, \
10270x00134861, 0x000C0002, 0x00103093, 0x00308000, \
10280x00100624, 0x00100561, 0x000E0408, 0x00100861, \
10290x000C007E, 0x00222C21, 0x000C0002, 0x00103093, \
10300x00380C7A, 0x00080000, 0x00103090, 0x00380C7A, \
10310x00000000, 0x00000000, 0x00000000, 0x00000000, \
10320x0010009C, 0x00244C2D, 0x00010004, 0x00041000, \
10330x003A0437, 0x00044010, 0x0038078A, 0x00000000, \
10340x00100099, 0x00206C7A, 0x0010009C, 0x00244C48, \
10350x00130824, 0x000C0001, 0x00101213, 0x00260C75, \
10360x00041000, 0x00010004, 0x00130826, 0x000C0006, \
10370x002206A8, 0x0013C926, 0x00101313, 0x003806A8, \
10380x00000000, 0x00000000, 0x00000000, 0x00000000, \
10390x00000000, 0x00000000, 0x00000000, 0x00000000, \
10400x00080600, 0x00101B10, 0x00050004, 0x00100826, \
10410x00101210, 0x00380C34, 0x00000000, 0x00000000, \
10420x0021155B, 0x00100099, 0x00206559, 0x0010009C, \
10430x00244559, 0x00130836, 0x000C0000, 0x00220C62, \
10440x000C0001, 0x00101B13, 0x00229C0E, 0x00210C0E, \
10450x00226C0E, 0x00216C0E, 0x0022FC0E, 0x00215C0E, \
10460x00214C0E, 0x00380555, 0x00010004, 0x00041000, \
10470x00278C67, 0x00040800, 0x00018100, 0x003A0437, \
10480x00130826, 0x000C0001, 0x00220559, 0x00101313, \
10490x00380559, 0x00000000, 0x00000000, 0x00000000, \
10500x00000000, 0x00000000, 0x00000000, 0x00000000, \
10510x00000000, 0x00130831, 0x0010090B, 0x00124813, \
10520x000CFF80, 0x002606AB, 0x00041000, 0x00010004, \
10530x003806A8, 0x00000000, 0x00000000, 0x00000000, \
1054}
1055
1056/********************************************************/
1057/* Micro code for 8086:1229 Rev 9 */
1058/********************************************************/
1059
1060/* Parameter values for the D101S */
1061#define D101S_CPUSAVER_TIMER_DWORD 78
1062#define D101S_CPUSAVER_BUNDLE_DWORD 67
1063#define D101S_CPUSAVER_MIN_SIZE_DWORD 128
1064
1065#define D101S_RCVBUNDLE_UCODE \
1066{\
10670x00550242, 0xFFFF047E, 0xFFFFFFFF, 0x06FF0818, 0xFFFFFFFF, 0x05A6FFFF, \
10680x000C0001, 0x00101312, 0x000C0008, 0x00380243, \
10690x0010009C, 0x00204056, 0x002380D0, 0x00380056, \
10700x0010009C, 0x00244F8B, 0x00000800, 0x00124818, \
10710x0038047F, 0x00000000, 0x00140000, 0x003805A3, \
10720x00308000, 0x00100610, 0x00100561, 0x000E0408, \
10730x00134861, 0x000C0002, 0x00103093, 0x00308000, \
10740x00100624, 0x00100561, 0x000E0408, 0x00100861, \
10750x000C007E, 0x00222FA1, 0x000C0002, 0x00103093, \
10760x00380F90, 0x00080000, 0x00103090, 0x00380F90, \
10770x00000000, 0x00000000, 0x00000000, 0x00000000, \
10780x0010009C, 0x00244FAD, 0x00010004, 0x00041000, \
10790x003A047E, 0x00044010, 0x00380819, 0x00000000, \
10800x00100099, 0x00206FFD, 0x0010009A, 0x0020AFFD, \
10810x0010009C, 0x00244FC8, 0x00130824, 0x000C0001, \
10820x00101213, 0x00260FF7, 0x00041000, 0x00010004, \
10830x00130826, 0x000C0006, 0x00220700, 0x0013C926, \
10840x00101313, 0x00380700, 0x00000000, 0x00000000, \
10850x00000000, 0x00000000, 0x00000000, 0x00000000, \
10860x00080600, 0x00101B10, 0x00050004, 0x00100826, \
10870x00101210, 0x00380FB6, 0x00000000, 0x00000000, \
10880x002115A9, 0x00100099, 0x002065A7, 0x0010009A, \
10890x0020A5A7, 0x0010009C, 0x002445A7, 0x00130836, \
10900x000C0000, 0x00220FE4, 0x000C0001, 0x00101B13, \
10910x00229F8E, 0x00210F8E, 0x00226F8E, 0x00216F8E, \
10920x0022FF8E, 0x00215F8E, 0x00214F8E, 0x003805A3, \
10930x00010004, 0x00041000, 0x00278FE9, 0x00040800, \
10940x00018100, 0x003A047E, 0x00130826, 0x000C0001, \
10950x002205A7, 0x00101313, 0x003805A7, 0x00000000, \
10960x00000000, 0x00000000, 0x00000000, 0x00000000, \
10970x00000000, 0x00000000, 0x00000000, 0x00130831, \
10980x0010090B, 0x00124813, 0x000CFF80, 0x00260703, \
10990x00041000, 0x00010004, 0x00380700 \
1100}
1101
1102/********************************************************/
1103/* Micro code for the 8086:1229 Rev F/10 */
1104/********************************************************/
1105
1106/* Parameter values for the D102 E-step */
1107#define D102_E_CPUSAVER_TIMER_DWORD 42
1108#define D102_E_CPUSAVER_BUNDLE_DWORD 54
1109#define D102_E_CPUSAVER_MIN_SIZE_DWORD 46
1110
1111#define D102_E_RCVBUNDLE_UCODE \
1112{\
11130x007D028F, 0x0E4204F9, 0x14ED0C85, 0x14FA14E9, 0x0EF70E36, 0x1FFF1FFF, \
11140x00E014B9, 0x00000000, 0x00000000, 0x00000000, \
11150x00E014BD, 0x00000000, 0x00000000, 0x00000000, \
11160x00E014D5, 0x00000000, 0x00000000, 0x00000000, \
11170x00000000, 0x00000000, 0x00000000, 0x00000000, \
11180x00E014C1, 0x00000000, 0x00000000, 0x00000000, \
11190x00000000, 0x00000000, 0x00000000, 0x00000000, \
11200x00000000, 0x00000000, 0x00000000, 0x00000000, \
11210x00000000, 0x00000000, 0x00000000, 0x00000000, \
11220x00E014C8, 0x00000000, 0x00000000, 0x00000000, \
11230x00200600, 0x00E014EE, 0x00000000, 0x00000000, \
11240x0030FF80, 0x00940E46, 0x00038200, 0x00102000, \
11250x00E00E43, 0x00000000, 0x00000000, 0x00000000, \
11260x00300006, 0x00E014FB, 0x00000000, 0x00000000, \
11270x00000000, 0x00000000, 0x00000000, 0x00000000, \
11280x00000000, 0x00000000, 0x00000000, 0x00000000, \
11290x00000000, 0x00000000, 0x00000000, 0x00000000, \
11300x00906E41, 0x00800E3C, 0x00E00E39, 0x00000000, \
11310x00906EFD, 0x00900EFD, 0x00E00EF8, 0x00000000, \
11320x00000000, 0x00000000, 0x00000000, 0x00000000, \
11330x00000000, 0x00000000, 0x00000000, 0x00000000, \
11340x00000000, 0x00000000, 0x00000000, 0x00000000, \
11350x00000000, 0x00000000, 0x00000000, 0x00000000, \
11360x00000000, 0x00000000, 0x00000000, 0x00000000, \
11370x00000000, 0x00000000, 0x00000000, 0x00000000, \
11380x00000000, 0x00000000, 0x00000000, 0x00000000, \
11390x00000000, 0x00000000, 0x00000000, 0x00000000, \
11400x00000000, 0x00000000, 0x00000000, 0x00000000, \
11410x00000000, 0x00000000, 0x00000000, 0x00000000, \
11420x00000000, 0x00000000, 0x00000000, 0x00000000, \
11430x00000000, 0x00000000, 0x00000000, 0x00000000, \
11440x00000000, 0x00000000, 0x00000000, 0x00000000, \
11450x00000000, 0x00000000, 0x00000000, 0x00000000, \
1146}
1147
1148static void e100_load_ucode(struct nic *nic, struct cb *cb, struct sk_buff *skb) 1010static void e100_load_ucode(struct nic *nic, struct cb *cb, struct sk_buff *skb)
1149{ 1011{
1150/* *INDENT-OFF* */ 1012 int i;
1151 static struct { 1013 static const u32 ucode[UCODE_SIZE] = {
1152 u32 ucode[UCODE_SIZE + 1]; 1014 /* NFS packets are misinterpreted as TCO packets and
1153 u8 mac; 1015 * incorrectly routed to the BMC over SMBus. This
1154 u8 timer_dword; 1016 * microcode patch checks the fragmented IP bit in the
1155 u8 bundle_dword; 1017 * NFS/UDP header to distinguish between NFS and TCO. */
1156 u8 min_size_dword; 1018 0x0EF70E36, 0x1FFF1FFF, 0x1FFF1FFF, 0x1FFF1FFF, 0x1FFF1FFF,
1157 } ucode_opts[] = { 1019 0x1FFF1FFF, 0x00906E41, 0x00800E3C, 0x00E00E39, 0x00000000,
1158 { D101M_B_RCVBUNDLE_UCODE, 1020 0x00906EFD, 0x00900EFD, 0x00E00EF8,
1159 mac_82559_D101M, 1021 };
1160 D101M_CPUSAVER_TIMER_DWORD,
1161 D101M_CPUSAVER_BUNDLE_DWORD,
1162 D101M_CPUSAVER_MIN_SIZE_DWORD },
1163 { D101S_RCVBUNDLE_UCODE,
1164 mac_82559_D101S,
1165 D101S_CPUSAVER_TIMER_DWORD,
1166 D101S_CPUSAVER_BUNDLE_DWORD,
1167 D101S_CPUSAVER_MIN_SIZE_DWORD },
1168 { D102_E_RCVBUNDLE_UCODE,
1169 mac_82551_F,
1170 D102_E_CPUSAVER_TIMER_DWORD,
1171 D102_E_CPUSAVER_BUNDLE_DWORD,
1172 D102_E_CPUSAVER_MIN_SIZE_DWORD },
1173 { D102_E_RCVBUNDLE_UCODE,
1174 mac_82551_10,
1175 D102_E_CPUSAVER_TIMER_DWORD,
1176 D102_E_CPUSAVER_BUNDLE_DWORD,
1177 D102_E_CPUSAVER_MIN_SIZE_DWORD },
1178 { {0}, 0, 0, 0, 0}
1179 }, *opts;
1180/* *INDENT-ON* */
1181
1182#define BUNDLESMALL 1
1183#define BUNDLEMAX 50
1184#define INTDELAY 15000
1185
1186 opts = ucode_opts;
1187
1188 /* do not load u-code for ICH devices */
1189 if (nic->flags & ich)
1190 return;
1191
1192 /* Search for ucode match against h/w rev_id */
1193 while (opts->mac) {
1194 if (nic->mac == opts->mac) {
1195 int i;
1196 u32 *ucode = opts->ucode;
1197
1198 /* Insert user-tunable settings */
1199 ucode[opts->timer_dword] &= 0xFFFF0000;
1200 ucode[opts->timer_dword] |=
1201 (u16) INTDELAY;
1202 ucode[opts->bundle_dword] &= 0xFFFF0000;
1203 ucode[opts->bundle_dword] |= (u16) BUNDLEMAX;
1204 ucode[opts->min_size_dword] &= 0xFFFF0000;
1205 ucode[opts->min_size_dword] |=
1206 (BUNDLESMALL) ? 0xFFFF : 0xFF80;
1207
1208 for(i = 0; i < UCODE_SIZE; i++)
1209 cb->u.ucode[i] = cpu_to_le32(ucode[i]);
1210 cb->command = cpu_to_le16(cb_ucode);
1211 return;
1212 }
1213 opts++;
1214 }
1215 1022
1216 cb->command = cpu_to_le16(cb_nop); 1023 if(nic->mac == mac_82551_F || nic->mac == mac_82551_10) {
1024 for(i = 0; i < UCODE_SIZE; i++)
1025 cb->u.ucode[i] = cpu_to_le32(ucode[i]);
1026 cb->command = cpu_to_le16(cb_ucode);
1027 } else
1028 cb->command = cpu_to_le16(cb_nop);
1217} 1029}
1218 1030
1219static void e100_setup_iaaddr(struct nic *nic, struct cb *cb, 1031static void e100_setup_iaaddr(struct nic *nic, struct cb *cb,
diff --git a/drivers/net/wireless/Kconfig b/drivers/net/wireless/Kconfig
index 00a07f32a81e..7187958e40ca 100644
--- a/drivers/net/wireless/Kconfig
+++ b/drivers/net/wireless/Kconfig
@@ -243,7 +243,7 @@ config IPW_DEBUG
243 243
244config AIRO 244config AIRO
245 tristate "Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards" 245 tristate "Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards"
246 depends on NET_RADIO && ISA && (PCI || BROKEN) 246 depends on NET_RADIO && ISA_DMA_API && (PCI || BROKEN)
247 ---help--- 247 ---help---
248 This is the standard Linux driver to support Cisco/Aironet ISA and 248 This is the standard Linux driver to support Cisco/Aironet ISA and
249 PCI 802.11 wireless cards. 249 PCI 802.11 wireless cards.
diff --git a/drivers/net/wireless/orinoco.c b/drivers/net/wireless/orinoco.c
index cf3daaa1b369..15ceaf615756 100644
--- a/drivers/net/wireless/orinoco.c
+++ b/drivers/net/wireless/orinoco.c
@@ -578,8 +578,9 @@ static int orinoco_xmit(struct sk_buff *skb, struct net_device *dev)
578 txfid, NULL); 578 txfid, NULL);
579 if (err) { 579 if (err) {
580 netif_start_queue(dev); 580 netif_start_queue(dev);
581 printk(KERN_ERR "%s: Error %d transmitting packet\n", 581 if (net_ratelimit())
582 dev->name, err); 582 printk(KERN_ERR "%s: Error %d transmitting packet\n",
583 dev->name, err);
583 stats->tx_errors++; 584 stats->tx_errors++;
584 goto fail; 585 goto fail;
585 } 586 }
diff --git a/drivers/pci/.gitignore b/drivers/pci/.gitignore
new file mode 100644
index 000000000000..f297ca8d313e
--- /dev/null
+++ b/drivers/pci/.gitignore
@@ -0,0 +1,4 @@
1classlist.h
2devlist.h
3gen-devlist
4
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 11ca44387cb0..a6a630a950d0 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -1233,7 +1233,7 @@ static void __init quirk_alder_ioapic(struct pci_dev *pdev)
1233DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EESSC, quirk_alder_ioapic ); 1233DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EESSC, quirk_alder_ioapic );
1234#endif 1234#endif
1235 1235
1236#ifdef CONFIG_SCSI_SATA 1236#ifdef CONFIG_SCSI_SATA_INTEL_COMBINED
1237static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev) 1237static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev)
1238{ 1238{
1239 u8 prog, comb, tmp; 1239 u8 prog, comb, tmp;
@@ -1310,7 +1310,7 @@ static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev)
1310 request_region(0x170, 8, "libata"); /* port 1 */ 1310 request_region(0x170, 8, "libata"); /* port 1 */
1311} 1311}
1312DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, quirk_intel_ide_combined ); 1312DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, quirk_intel_ide_combined );
1313#endif /* CONFIG_SCSI_SATA */ 1313#endif /* CONFIG_SCSI_SATA_INTEL_COMBINED */
1314 1314
1315 1315
1316int pcie_mch_quirk; 1316int pcie_mch_quirk;
diff --git a/drivers/pcmcia/soc_common.c b/drivers/pcmcia/soc_common.c
index 888b70e6a484..9e7ccd8a4321 100644
--- a/drivers/pcmcia/soc_common.c
+++ b/drivers/pcmcia/soc_common.c
@@ -66,7 +66,7 @@ void soc_pcmcia_debug(struct soc_pcmcia_socket *skt, const char *func,
66 if (pc_debug > lvl) { 66 if (pc_debug > lvl) {
67 printk(KERN_DEBUG "skt%u: %s: ", skt->nr, func); 67 printk(KERN_DEBUG "skt%u: %s: ", skt->nr, func);
68 va_start(args, fmt); 68 va_start(args, fmt);
69 printk(fmt, args); 69 vprintk(fmt, args);
70 va_end(args); 70 va_end(args);
71 } 71 }
72} 72}
@@ -321,8 +321,6 @@ soc_common_pcmcia_get_socket(struct pcmcia_socket *sock, socket_state_t *state)
321 * less punt all of this work and let the kernel handle the details 321 * less punt all of this work and let the kernel handle the details
322 * of power configuration, reset, &c. We also record the value of 322 * of power configuration, reset, &c. We also record the value of
323 * `state' in order to regurgitate it to the PCMCIA core later. 323 * `state' in order to regurgitate it to the PCMCIA core later.
324 *
325 * Returns: 0
326 */ 324 */
327static int 325static int
328soc_common_pcmcia_set_socket(struct pcmcia_socket *sock, socket_state_t *state) 326soc_common_pcmcia_set_socket(struct pcmcia_socket *sock, socket_state_t *state)
@@ -407,7 +405,7 @@ soc_common_pcmcia_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *m
407 * the map speed as requested, but override the address ranges 405 * the map speed as requested, but override the address ranges
408 * supplied by Card Services. 406 * supplied by Card Services.
409 * 407 *
410 * Returns: 0 on success, -1 on error 408 * Returns: 0 on success, -ERRNO on error
411 */ 409 */
412static int 410static int
413soc_common_pcmcia_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map *map) 411soc_common_pcmcia_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map *map)
@@ -655,8 +653,8 @@ static void soc_pcmcia_cpufreq_unregister(void)
655} 653}
656 654
657#else 655#else
658#define soc_pcmcia_cpufreq_register() 656static int soc_pcmcia_cpufreq_register(void) { return 0; }
659#define soc_pcmcia_cpufreq_unregister() 657static void soc_pcmcia_cpufreq_unregister(void) {}
660#endif 658#endif
661 659
662int soc_common_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops, int first, int nr) 660int soc_common_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops, int first, int nr)
@@ -738,7 +736,7 @@ int soc_common_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops
738 goto out_err_5; 736 goto out_err_5;
739 } 737 }
740 738
741 if ( list_empty(&soc_pcmcia_sockets) ) 739 if (list_empty(&soc_pcmcia_sockets))
742 soc_pcmcia_cpufreq_register(); 740 soc_pcmcia_cpufreq_register();
743 741
744 list_add(&skt->node, &soc_pcmcia_sockets); 742 list_add(&skt->node, &soc_pcmcia_sockets);
@@ -839,7 +837,7 @@ int soc_common_drv_pcmcia_remove(struct device *dev)
839 release_resource(&skt->res_io); 837 release_resource(&skt->res_io);
840 release_resource(&skt->res_skt); 838 release_resource(&skt->res_skt);
841 } 839 }
842 if ( list_empty(&soc_pcmcia_sockets) ) 840 if (list_empty(&soc_pcmcia_sockets))
843 soc_pcmcia_cpufreq_unregister(); 841 soc_pcmcia_cpufreq_unregister();
844 842
845 up(&soc_pcmcia_sockets_lock); 843 up(&soc_pcmcia_sockets_lock);
diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig
index 20019b82b4a8..3ee9b8b33be0 100644
--- a/drivers/scsi/Kconfig
+++ b/drivers/scsi/Kconfig
@@ -553,6 +553,11 @@ config SCSI_SATA_VITESSE
553 553
554 If unsure, say N. 554 If unsure, say N.
555 555
556config SCSI_SATA_INTEL_COMBINED
557 bool
558 depends on IDE=y && !BLK_DEV_IDE_SATA && (SCSI_SATA_AHCI || SCSI_ATA_PIIX)
559 default y
560
556config SCSI_BUSLOGIC 561config SCSI_BUSLOGIC
557 tristate "BusLogic SCSI support" 562 tristate "BusLogic SCSI support"
558 depends on (PCI || ISA || MCA) && SCSI && ISA_DMA_API 563 depends on (PCI || ISA || MCA) && SCSI && ISA_DMA_API
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
index de8490a92831..a1f9ceef0ac9 100644
--- a/drivers/scsi/aacraid/linit.c
+++ b/drivers/scsi/aacraid/linit.c
@@ -453,9 +453,9 @@ static int aac_eh_reset(struct scsi_cmnd* cmd)
453 /* 453 /*
454 * We can exit If all the commands are complete 454 * We can exit If all the commands are complete
455 */ 455 */
456 spin_unlock_irq(host->host_lock);
456 if (active == 0) 457 if (active == 0)
457 return SUCCESS; 458 return SUCCESS;
458 spin_unlock_irq(host->host_lock);
459 ssleep(1); 459 ssleep(1);
460 spin_lock_irq(host->host_lock); 460 spin_lock_irq(host->host_lock);
461 } 461 }
diff --git a/drivers/scsi/qlogicpti.c b/drivers/scsi/qlogicpti.c
index a917ab7475ac..1fd5fc6d0fe3 100644
--- a/drivers/scsi/qlogicpti.c
+++ b/drivers/scsi/qlogicpti.c
@@ -1119,6 +1119,36 @@ static inline void update_can_queue(struct Scsi_Host *host, u_int in_ptr, u_int
1119 host->sg_tablesize = QLOGICPTI_MAX_SG(num_free); 1119 host->sg_tablesize = QLOGICPTI_MAX_SG(num_free);
1120} 1120}
1121 1121
1122static unsigned int scsi_rbuf_get(struct scsi_cmnd *cmd, unsigned char **buf_out)
1123{
1124 unsigned char *buf;
1125 unsigned int buflen;
1126
1127 if (cmd->use_sg) {
1128 struct scatterlist *sg;
1129
1130 sg = (struct scatterlist *) cmd->request_buffer;
1131 buf = kmap_atomic(sg->page, KM_IRQ0) + sg->offset;
1132 buflen = sg->length;
1133 } else {
1134 buf = cmd->request_buffer;
1135 buflen = cmd->request_bufflen;
1136 }
1137
1138 *buf_out = buf;
1139 return buflen;
1140}
1141
1142static void scsi_rbuf_put(struct scsi_cmnd *cmd, unsigned char *buf)
1143{
1144 if (cmd->use_sg) {
1145 struct scatterlist *sg;
1146
1147 sg = (struct scatterlist *) cmd->request_buffer;
1148 kunmap_atomic(buf - sg->offset, KM_IRQ0);
1149 }
1150}
1151
1122/* 1152/*
1123 * Until we scan the entire bus with inquiries, go throught this fella... 1153 * Until we scan the entire bus with inquiries, go throught this fella...
1124 */ 1154 */
@@ -1145,11 +1175,9 @@ static void ourdone(struct scsi_cmnd *Cmnd)
1145 int ok = host_byte(Cmnd->result) == DID_OK; 1175 int ok = host_byte(Cmnd->result) == DID_OK;
1146 if (Cmnd->cmnd[0] == 0x12 && ok) { 1176 if (Cmnd->cmnd[0] == 0x12 && ok) {
1147 unsigned char *iqd; 1177 unsigned char *iqd;
1178 unsigned int iqd_len;
1148 1179
1149 if (Cmnd->use_sg != 0) 1180 iqd_len = scsi_rbuf_get(Cmnd, &iqd);
1150 BUG();
1151
1152 iqd = ((unsigned char *)Cmnd->buffer);
1153 1181
1154 /* tags handled in midlayer */ 1182 /* tags handled in midlayer */
1155 /* enable sync mode? */ 1183 /* enable sync mode? */
@@ -1163,6 +1191,9 @@ static void ourdone(struct scsi_cmnd *Cmnd)
1163 if (iqd[7] & 0x20) { 1191 if (iqd[7] & 0x20) {
1164 qpti->dev_param[tgt].device_flags |= 0x20; 1192 qpti->dev_param[tgt].device_flags |= 0x20;
1165 } 1193 }
1194
1195 scsi_rbuf_put(Cmnd, iqd);
1196
1166 qpti->sbits |= (1 << tgt); 1197 qpti->sbits |= (1 << tgt);
1167 } else if (!ok) { 1198 } else if (!ok) {
1168 qpti->sbits |= (1 << tgt); 1199 qpti->sbits |= (1 << tgt);
diff --git a/drivers/scsi/sata_nv.c b/drivers/scsi/sata_nv.c
index c05653c7779d..cb832b03ec5e 100644
--- a/drivers/scsi/sata_nv.c
+++ b/drivers/scsi/sata_nv.c
@@ -29,6 +29,8 @@
29 * NV-specific details such as register offsets, SATA phy location, 29 * NV-specific details such as register offsets, SATA phy location,
30 * hotplug info, etc. 30 * hotplug info, etc.
31 * 31 *
32 * 0.09
33 * - Fixed bug introduced by 0.08's MCP51 and MCP55 support.
32 * 34 *
33 * 0.08 35 * 0.08
34 * - Added support for MCP51 and MCP55. 36 * - Added support for MCP51 and MCP55.
@@ -132,9 +134,7 @@ enum nv_host_type
132 GENERIC, 134 GENERIC,
133 NFORCE2, 135 NFORCE2,
134 NFORCE3, 136 NFORCE3,
135 CK804, 137 CK804
136 MCP51,
137 MCP55
138}; 138};
139 139
140static struct pci_device_id nv_pci_tbl[] = { 140static struct pci_device_id nv_pci_tbl[] = {
@@ -153,13 +153,13 @@ static struct pci_device_id nv_pci_tbl[] = {
153 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2, 153 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2,
154 PCI_ANY_ID, PCI_ANY_ID, 0, 0, CK804 }, 154 PCI_ANY_ID, PCI_ANY_ID, 0, 0, CK804 },
155 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA, 155 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA,
156 PCI_ANY_ID, PCI_ANY_ID, 0, 0, MCP51 }, 156 PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
157 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA2, 157 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA2,
158 PCI_ANY_ID, PCI_ANY_ID, 0, 0, MCP51 }, 158 PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
159 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA, 159 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA,
160 PCI_ANY_ID, PCI_ANY_ID, 0, 0, MCP55 }, 160 PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
161 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA2, 161 { PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA2,
162 PCI_ANY_ID, PCI_ANY_ID, 0, 0, MCP55 }, 162 PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
163 { PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID, 163 { PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID,
164 PCI_ANY_ID, PCI_ANY_ID, 164 PCI_ANY_ID, PCI_ANY_ID,
165 PCI_CLASS_STORAGE_IDE<<8, 0xffff00, GENERIC }, 165 PCI_CLASS_STORAGE_IDE<<8, 0xffff00, GENERIC },
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index ad5342165079..52b348c36d56 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -1645,6 +1645,8 @@ int scsi_error_handler(void *data)
1645 set_current_state(TASK_INTERRUPTIBLE); 1645 set_current_state(TASK_INTERRUPTIBLE);
1646 } 1646 }
1647 1647
1648 __set_current_state(TASK_RUNNING);
1649
1648 SCSI_LOG_ERROR_RECOVERY(1, printk("Error handler scsi_eh_%d" 1650 SCSI_LOG_ERROR_RECOVERY(1, printk("Error handler scsi_eh_%d"
1649 " exiting\n",shost->host_no)); 1651 " exiting\n",shost->host_no));
1650 1652
diff --git a/drivers/serial/8250_pnp.c b/drivers/serial/8250_pnp.c
index 6b321e82cafb..5d8660a42b77 100644
--- a/drivers/serial/8250_pnp.c
+++ b/drivers/serial/8250_pnp.c
@@ -272,8 +272,12 @@ static const struct pnp_device_id pnp_dev_table[] = {
272 { "SUP1421", 0 }, 272 { "SUP1421", 0 },
273 /* SupraExpress 33.6 Data/Fax PnP modem */ 273 /* SupraExpress 33.6 Data/Fax PnP modem */
274 { "SUP1590", 0 }, 274 { "SUP1590", 0 },
275 /* SupraExpress 336i Sp ASVD */
276 { "SUP1620", 0 },
275 /* SupraExpress 33.6 Data/Fax PnP modem */ 277 /* SupraExpress 33.6 Data/Fax PnP modem */
276 { "SUP1760", 0 }, 278 { "SUP1760", 0 },
279 /* SupraExpress 56i Sp Intl */
280 { "SUP2171", 0 },
277 /* Phoebe Micro */ 281 /* Phoebe Micro */
278 /* Phoebe Micro 33.6 Data Fax 1433VQH Plug & Play */ 282 /* Phoebe Micro 33.6 Data Fax 1433VQH Plug & Play */
279 { "TEX0011", 0 }, 283 { "TEX0011", 0 },
diff --git a/drivers/serial/imx.c b/drivers/serial/imx.c
index 53e0323d4b83..bdb4e454b8b0 100644
--- a/drivers/serial/imx.c
+++ b/drivers/serial/imx.c
@@ -73,7 +73,7 @@ struct imx_port {
73 struct uart_port port; 73 struct uart_port port;
74 struct timer_list timer; 74 struct timer_list timer;
75 unsigned int old_status; 75 unsigned int old_status;
76 int txirq,rxirq; 76 int txirq,rxirq,rtsirq;
77}; 77};
78 78
79/* 79/*
@@ -181,6 +181,22 @@ static void imx_start_tx(struct uart_port *port)
181 imx_transmit_buffer(sport); 181 imx_transmit_buffer(sport);
182} 182}
183 183
184static irqreturn_t imx_rtsint(int irq, void *dev_id, struct pt_regs *regs)
185{
186 struct imx_port *sport = (struct imx_port *)dev_id;
187 unsigned int val = USR1((u32)sport->port.membase)&USR1_RTSS;
188 unsigned long flags;
189
190 spin_lock_irqsave(&sport->port.lock, flags);
191
192 USR1((u32)sport->port.membase) = USR1_RTSD;
193 uart_handle_cts_change(&sport->port, !!val);
194 wake_up_interruptible(&sport->port.info->delta_msr_wait);
195
196 spin_unlock_irqrestore(&sport->port.lock, flags);
197 return IRQ_HANDLED;
198}
199
184static irqreturn_t imx_txint(int irq, void *dev_id, struct pt_regs *regs) 200static irqreturn_t imx_txint(int irq, void *dev_id, struct pt_regs *regs)
185{ 201{
186 struct imx_port *sport = (struct imx_port *)dev_id; 202 struct imx_port *sport = (struct imx_port *)dev_id;
@@ -386,15 +402,21 @@ static int imx_startup(struct uart_port *port)
386 if (retval) goto error_out1; 402 if (retval) goto error_out1;
387 403
388 retval = request_irq(sport->txirq, imx_txint, 0, 404 retval = request_irq(sport->txirq, imx_txint, 0,
389 "imx-uart", sport); 405 DRIVER_NAME, sport);
390 if (retval) goto error_out2; 406 if (retval) goto error_out2;
391 407
408 retval = request_irq(sport->rtsirq, imx_rtsint, 0,
409 DRIVER_NAME, sport);
410 if (retval) goto error_out3;
411 set_irq_type(sport->rtsirq, IRQT_BOTHEDGE);
412
392 /* 413 /*
393 * Finally, clear and enable interrupts 414 * Finally, clear and enable interrupts
394 */ 415 */
395 416
417 USR1((u32)sport->port.membase) = USR1_RTSD;
396 UCR1((u32)sport->port.membase) |= 418 UCR1((u32)sport->port.membase) |=
397 (UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_UARTEN); 419 (UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_RTSDEN | UCR1_UARTEN);
398 420
399 UCR2((u32)sport->port.membase) |= (UCR2_RXEN | UCR2_TXEN); 421 UCR2((u32)sport->port.membase) |= (UCR2_RXEN | UCR2_TXEN);
400 /* 422 /*
@@ -406,6 +428,8 @@ static int imx_startup(struct uart_port *port)
406 428
407 return 0; 429 return 0;
408 430
431error_out3:
432 free_irq(sport->txirq, sport);
409error_out2: 433error_out2:
410 free_irq(sport->rxirq, sport); 434 free_irq(sport->rxirq, sport);
411error_out1: 435error_out1:
@@ -424,6 +448,7 @@ static void imx_shutdown(struct uart_port *port)
424 /* 448 /*
425 * Free the interrupts 449 * Free the interrupts
426 */ 450 */
451 free_irq(sport->rtsirq, sport);
427 free_irq(sport->txirq, sport); 452 free_irq(sport->txirq, sport);
428 free_irq(sport->rxirq, sport); 453 free_irq(sport->rxirq, sport);
429 454
@@ -432,7 +457,7 @@ static void imx_shutdown(struct uart_port *port)
432 */ 457 */
433 458
434 UCR1((u32)sport->port.membase) &= 459 UCR1((u32)sport->port.membase) &=
435 ~(UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_UARTEN); 460 ~(UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_RTSDEN | UCR1_UARTEN);
436} 461}
437 462
438static void 463static void
@@ -522,7 +547,7 @@ imx_set_termios(struct uart_port *port, struct termios *termios,
522 * disable interrupts and drain transmitter 547 * disable interrupts and drain transmitter
523 */ 548 */
524 old_ucr1 = UCR1((u32)sport->port.membase); 549 old_ucr1 = UCR1((u32)sport->port.membase);
525 UCR1((u32)sport->port.membase) &= ~(UCR1_TXMPTYEN | UCR1_RRDYEN); 550 UCR1((u32)sport->port.membase) &= ~(UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_RTSDEN);
526 551
527 while ( !(USR2((u32)sport->port.membase) & USR2_TXDC)) 552 while ( !(USR2((u32)sport->port.membase) & USR2_TXDC))
528 barrier(); 553 barrier();
@@ -643,6 +668,7 @@ static struct imx_port imx_ports[] = {
643 { 668 {
644 .txirq = UART1_MINT_TX, 669 .txirq = UART1_MINT_TX,
645 .rxirq = UART1_MINT_RX, 670 .rxirq = UART1_MINT_RX,
671 .rtsirq = UART1_MINT_RTS,
646 .port = { 672 .port = {
647 .type = PORT_IMX, 673 .type = PORT_IMX,
648 .iotype = SERIAL_IO_MEM, 674 .iotype = SERIAL_IO_MEM,
@@ -658,6 +684,7 @@ static struct imx_port imx_ports[] = {
658 }, { 684 }, {
659 .txirq = UART2_MINT_TX, 685 .txirq = UART2_MINT_TX,
660 .rxirq = UART2_MINT_RX, 686 .rxirq = UART2_MINT_RX,
687 .rtsirq = UART2_MINT_RTS,
661 .port = { 688 .port = {
662 .type = PORT_IMX, 689 .type = PORT_IMX,
663 .iotype = SERIAL_IO_MEM, 690 .iotype = SERIAL_IO_MEM,
@@ -737,7 +764,7 @@ imx_console_write(struct console *co, const char *s, unsigned int count)
737 764
738 UCR1((u32)sport->port.membase) = 765 UCR1((u32)sport->port.membase) =
739 (old_ucr1 | UCR1_UARTCLKEN | UCR1_UARTEN) 766 (old_ucr1 | UCR1_UARTCLKEN | UCR1_UARTEN)
740 & ~(UCR1_TXMPTYEN | UCR1_RRDYEN); 767 & ~(UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_RTSDEN);
741 UCR2((u32)sport->port.membase) = old_ucr2 | UCR2_TXEN; 768 UCR2((u32)sport->port.membase) = old_ucr2 | UCR2_TXEN;
742 769
743 /* 770 /*
diff --git a/drivers/serial/pxa.c b/drivers/serial/pxa.c
index 672b359b07ce..90c2a86c421b 100644
--- a/drivers/serial/pxa.c
+++ b/drivers/serial/pxa.c
@@ -499,7 +499,7 @@ serial_pxa_set_termios(struct uart_port *port, struct termios *termios,
499 /* 499 /*
500 * Update the per-port timeout. 500 * Update the per-port timeout.
501 */ 501 */
502 uart_update_timeout(port, termios->c_cflag, quot); 502 uart_update_timeout(port, termios->c_cflag, baud);
503 503
504 up->port.read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR; 504 up->port.read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR;
505 if (termios->c_iflag & INPCK) 505 if (termios->c_iflag & INPCK)
diff --git a/drivers/serial/s3c2410.c b/drivers/serial/s3c2410.c
index eff2158024c8..52692aa345ec 100644
--- a/drivers/serial/s3c2410.c
+++ b/drivers/serial/s3c2410.c
@@ -1092,8 +1092,8 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport,
1092 1092
1093static int probe_index = 0; 1093static int probe_index = 0;
1094 1094
1095int s3c24xx_serial_probe(struct device *_dev, 1095static int s3c24xx_serial_probe(struct device *_dev,
1096 struct s3c24xx_uart_info *info) 1096 struct s3c24xx_uart_info *info)
1097{ 1097{
1098 struct s3c24xx_uart_port *ourport; 1098 struct s3c24xx_uart_port *ourport;
1099 struct platform_device *dev = to_platform_device(_dev); 1099 struct platform_device *dev = to_platform_device(_dev);
@@ -1120,7 +1120,7 @@ int s3c24xx_serial_probe(struct device *_dev,
1120 return ret; 1120 return ret;
1121} 1121}
1122 1122
1123int s3c24xx_serial_remove(struct device *_dev) 1123static int s3c24xx_serial_remove(struct device *_dev)
1124{ 1124{
1125 struct uart_port *port = s3c24xx_dev_to_port(_dev); 1125 struct uart_port *port = s3c24xx_dev_to_port(_dev);
1126 1126
@@ -1134,7 +1134,8 @@ int s3c24xx_serial_remove(struct device *_dev)
1134 1134
1135#ifdef CONFIG_PM 1135#ifdef CONFIG_PM
1136 1136
1137int s3c24xx_serial_suspend(struct device *dev, pm_message_t state, u32 level) 1137static int s3c24xx_serial_suspend(struct device *dev, pm_message_t state,
1138 u32 level)
1138{ 1139{
1139 struct uart_port *port = s3c24xx_dev_to_port(dev); 1140 struct uart_port *port = s3c24xx_dev_to_port(dev);
1140 1141
@@ -1144,7 +1145,7 @@ int s3c24xx_serial_suspend(struct device *dev, pm_message_t state, u32 level)
1144 return 0; 1145 return 0;
1145} 1146}
1146 1147
1147int s3c24xx_serial_resume(struct device *dev, u32 level) 1148static int s3c24xx_serial_resume(struct device *dev, u32 level)
1148{ 1149{
1149 struct uart_port *port = s3c24xx_dev_to_port(dev); 1150 struct uart_port *port = s3c24xx_dev_to_port(dev);
1150 struct s3c24xx_uart_port *ourport = to_ourport(port); 1151 struct s3c24xx_uart_port *ourport = to_ourport(port);
@@ -1165,8 +1166,8 @@ int s3c24xx_serial_resume(struct device *dev, u32 level)
1165#define s3c24xx_serial_resume NULL 1166#define s3c24xx_serial_resume NULL
1166#endif 1167#endif
1167 1168
1168int s3c24xx_serial_init(struct device_driver *drv, 1169static int s3c24xx_serial_init(struct device_driver *drv,
1169 struct s3c24xx_uart_info *info) 1170 struct s3c24xx_uart_info *info)
1170{ 1171{
1171 dbg("s3c24xx_serial_init(%p,%p)\n", drv, info); 1172 dbg("s3c24xx_serial_init(%p,%p)\n", drv, info);
1172 return driver_register(drv); 1173 return driver_register(drv);
diff --git a/drivers/serial/sh-sci.c b/drivers/serial/sh-sci.c
index 512266307866..430754ebac8a 100644
--- a/drivers/serial/sh-sci.c
+++ b/drivers/serial/sh-sci.c
@@ -967,7 +967,7 @@ static int sci_startup(struct uart_port *port)
967#endif 967#endif
968 968
969 sci_request_irq(s); 969 sci_request_irq(s);
970 sci_start_tx(port, 1); 970 sci_start_tx(port);
971 sci_start_rx(port, 1); 971 sci_start_rx(port, 1);
972 972
973 return 0; 973 return 0;
diff --git a/drivers/usb/host/isp116x-hcd.c b/drivers/usb/host/isp116x-hcd.c
index 41bbae83fc71..e142056b0d2c 100644
--- a/drivers/usb/host/isp116x-hcd.c
+++ b/drivers/usb/host/isp116x-hcd.c
@@ -326,7 +326,8 @@ static void postproc_atl_queue(struct isp116x *isp116x)
326 usb_settoggle(udev, ep->epnum, 326 usb_settoggle(udev, ep->epnum,
327 ep->nextpid == 327 ep->nextpid ==
328 USB_PID_OUT, 328 USB_PID_OUT,
329 PTD_GET_TOGGLE(ptd) ^ 1); 329 PTD_GET_TOGGLE(ptd));
330 urb->actual_length += PTD_GET_COUNT(ptd);
330 urb->status = cc_to_error[TD_DATAUNDERRUN]; 331 urb->status = cc_to_error[TD_DATAUNDERRUN];
331 spin_unlock(&urb->lock); 332 spin_unlock(&urb->lock);
332 continue; 333 continue;
diff --git a/drivers/usb/input/hid-core.c b/drivers/usb/input/hid-core.c
index a99865c689c5..41f92b924761 100644
--- a/drivers/usb/input/hid-core.c
+++ b/drivers/usb/input/hid-core.c
@@ -1702,10 +1702,7 @@ static struct hid_device *usb_hid_configure(struct usb_interface *intf)
1702 if ((endpoint->bmAttributes & 3) != 3) /* Not an interrupt endpoint */ 1702 if ((endpoint->bmAttributes & 3) != 3) /* Not an interrupt endpoint */
1703 continue; 1703 continue;
1704 1704
1705 /* handle potential highspeed HID correctly */
1706 interval = endpoint->bInterval; 1705 interval = endpoint->bInterval;
1707 if (dev->speed == USB_SPEED_HIGH)
1708 interval = 1 << (interval - 1);
1709 1706
1710 /* Change the polling interval of mice. */ 1707 /* Change the polling interval of mice. */
1711 if (hid->collection->usage == HID_GD_MOUSE && hid_mousepoll_interval > 0) 1708 if (hid->collection->usage == HID_GD_MOUSE && hid_mousepoll_interval > 0)
diff --git a/drivers/usb/serial/generic.c b/drivers/usb/serial/generic.c
index ddde5fb13f6b..5f7d3193d355 100644
--- a/drivers/usb/serial/generic.c
+++ b/drivers/usb/serial/generic.c
@@ -223,7 +223,7 @@ int usb_serial_generic_write_room (struct usb_serial_port *port)
223 dbg("%s - port %d", __FUNCTION__, port->number); 223 dbg("%s - port %d", __FUNCTION__, port->number);
224 224
225 if (serial->num_bulk_out) { 225 if (serial->num_bulk_out) {
226 if (port->write_urb_busy) 226 if (!(port->write_urb_busy))
227 room = port->bulk_out_size; 227 room = port->bulk_out_size;
228 } 228 }
229 229
diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c
index 6ef6f7760e47..809fee2140ac 100644
--- a/drivers/video/console/vgacon.c
+++ b/drivers/video/console/vgacon.c
@@ -565,7 +565,11 @@ static int vgacon_switch(struct vc_data *c)
565 scr_memcpyw((u16 *) c->vc_origin, (u16 *) c->vc_screenbuf, 565 scr_memcpyw((u16 *) c->vc_origin, (u16 *) c->vc_screenbuf,
566 c->vc_screenbuf_size > vga_vram_size ? 566 c->vc_screenbuf_size > vga_vram_size ?
567 vga_vram_size : c->vc_screenbuf_size); 567 vga_vram_size : c->vc_screenbuf_size);
568 vgacon_doresize(c, c->vc_cols, c->vc_rows); 568 if (!(vga_video_num_columns % 2) &&
569 vga_video_num_columns <= ORIG_VIDEO_COLS &&
570 vga_video_num_lines <= (ORIG_VIDEO_LINES *
571 vga_default_font_height) / c->vc_font.height)
572 vgacon_doresize(c, c->vc_cols, c->vc_rows);
569 } 573 }
570 574
571 return 0; /* Redrawing not needed */ 575 return 0; /* Redrawing not needed */
@@ -1023,7 +1027,8 @@ static int vgacon_resize(struct vc_data *c, unsigned int width,
1023 if (width % 2 || width > ORIG_VIDEO_COLS || 1027 if (width % 2 || width > ORIG_VIDEO_COLS ||
1024 height > (ORIG_VIDEO_LINES * vga_default_font_height)/ 1028 height > (ORIG_VIDEO_LINES * vga_default_font_height)/
1025 c->vc_font.height) 1029 c->vc_font.height)
1026 return -EINVAL; 1030 /* let svgatextmode tinker with video timings */
1031 return 0;
1027 1032
1028 if (CON_IS_VISIBLE(c) && !vga_is_gfx) /* who knows */ 1033 if (CON_IS_VISIBLE(c) && !vga_is_gfx) /* who knows */
1029 vgacon_doresize(c, width, height); 1034 vgacon_doresize(c, width, height);
diff --git a/drivers/video/logo/.gitignore b/drivers/video/logo/.gitignore
new file mode 100644
index 000000000000..e48355f538fa
--- /dev/null
+++ b/drivers/video/logo/.gitignore
@@ -0,0 +1,7 @@
1#
2# Generated files
3#
4*_mono.c
5*_vga16.c
6*_clut224.c
7*_gray256.c
diff --git a/drivers/video/sa1100fb.c b/drivers/video/sa1100fb.c
index beeec7b51425..8000890e4271 100644
--- a/drivers/video/sa1100fb.c
+++ b/drivers/video/sa1100fb.c
@@ -592,6 +592,7 @@ sa1100fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
592 return ret; 592 return ret;
593} 593}
594 594
595#ifdef CONFIG_CPU_FREQ
595/* 596/*
596 * sa1100fb_display_dma_period() 597 * sa1100fb_display_dma_period()
597 * Calculate the minimum period (in picoseconds) between two DMA 598 * Calculate the minimum period (in picoseconds) between two DMA
@@ -606,6 +607,7 @@ static inline unsigned int sa1100fb_display_dma_period(struct fb_var_screeninfo
606 */ 607 */
607 return var->pixclock * 8 * 16 / var->bits_per_pixel; 608 return var->pixclock * 8 * 16 / var->bits_per_pixel;
608} 609}
610#endif
609 611
610/* 612/*
611 * sa1100fb_check_var(): 613 * sa1100fb_check_var():
diff --git a/drivers/video/vesafb.c b/drivers/video/vesafb.c
index 1ca80264c7b0..b1243da55fc5 100644
--- a/drivers/video/vesafb.c
+++ b/drivers/video/vesafb.c
@@ -96,14 +96,14 @@ static int vesafb_blank(int blank, struct fb_info *info)
96 int loop = 10000; 96 int loop = 10000;
97 u8 seq = 0, crtc17 = 0; 97 u8 seq = 0, crtc17 = 0;
98 98
99 err = 0; 99 if (blank == FB_BLANK_POWERDOWN) {
100
101 if (blank) {
102 seq = 0x20; 100 seq = 0x20;
103 crtc17 = 0x00; 101 crtc17 = 0x00;
102 err = 0;
104 } else { 103 } else {
105 seq = 0x00; 104 seq = 0x00;
106 crtc17 = 0x80; 105 crtc17 = 0x80;
106 err = (blank == FB_BLANK_UNBLANK) ? 0 : -EINVAL;
107 } 107 }
108 108
109 vga_wseq(NULL, 0x00, 0x01); 109 vga_wseq(NULL, 0x00, 0x01);
diff --git a/drivers/w1/w1.c b/drivers/w1/w1.c
index 1b6b74c116a9..14016b1cd948 100644
--- a/drivers/w1/w1.c
+++ b/drivers/w1/w1.c
@@ -77,8 +77,7 @@ static void w1_master_release(struct device *dev)
77 77
78 dev_dbg(dev, "%s: Releasing %s.\n", __func__, md->name); 78 dev_dbg(dev, "%s: Releasing %s.\n", __func__, md->name);
79 79
80 if (md->nls && md->nls->sk_socket) 80 dev_fini_netlink(md);
81 sock_release(md->nls->sk_socket);
82 memset(md, 0, sizeof(struct w1_master) + sizeof(struct w1_bus_master)); 81 memset(md, 0, sizeof(struct w1_master) + sizeof(struct w1_bus_master));
83 kfree(md); 82 kfree(md);
84} 83}