Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 309713 Details for
Bug 451945
Update 3w-xxxx to version 1.26.03.000-2.6.18RH
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
Update 3w-xxxx to version 1.26.03.000-2.6.18RH
tm.patch (text/plain), 8.01 KB, created by
Tomas Henzl
on 2008-06-18 09:54:54 UTC
(
hide
)
Description:
Update 3w-xxxx to version 1.26.03.000-2.6.18RH
Filename:
MIME Type:
Creator:
Tomas Henzl
Created:
2008-06-18 09:54:54 UTC
Size:
8.01 KB
patch
obsolete
>diff -Naur linux-2.6.18.x86_64/drivers/scsi/3w-xxxx.c >linux-2.6.18.x86_64.new/drivers/scsi/3w-xxxx.c >--- linux-2.6.18.x86_64/drivers/scsi/3w-xxxx.c 2006-09-19 >20:42:06.000000000 -0700 >+++ linux-2.6.18.x86_64.new/drivers/scsi/3w-xxxx.c 2008-06-17 >15:12:34.000000000 -0700 >@@ -6,7 +6,7 @@ > Arnaldo Carvalho de Melo <acme@conectiva.com.br> > Brad Strand <linux@3ware.com> > >- Copyright (C) 1999-2005 3ware Inc. >+ Copyright (C) 1999-2007 3ware Inc. > > Kernel compatiblity By: Andre Hedrick <andre@suse.com> > Non-Copyright (C) 2000 Andre Hedrick <andre@suse.com> >@@ -191,6 +191,11 @@ > before shutting down card. > Change to new 'change_queue_depth' api. > Fix 'handled=1' ISR usage, remove bogus IRQ check. >+ 1.26.02.002 - Free irq handler in __tw_shutdown(). >+ Turn on RCD bit for caching mode page. >+ Serialize reset code. >+ 1.26.03.000 - Use default DMA data direction to prevent data corruption >+ when using SWIOTLB with 4GB+ on EM64T. > */ > > #include <linux/module.h> >@@ -214,7 +219,7 @@ > #include "3w-xxxx.h" > > /* Globals */ >-#define TW_DRIVER_VERSION "1.26.02.001" >+#define TW_DRIVER_VERSION "1.26.03.000-2.6.18RH" > static TW_Device_Extension *tw_device_extension_list[TW_MAX_SLOT]; > static int tw_device_extension_count = 0; > static int twe_major = -1; >@@ -226,7 +231,7 @@ > MODULE_VERSION(TW_DRIVER_VERSION); > > /* Function prototypes */ >-static int tw_reset_device_extension(TW_Device_Extension *tw_dev, int >ioctl_reset); >+static int tw_reset_device_extension(TW_Device_Extension *tw_dev); > > /* Functions */ > >@@ -984,24 +989,12 @@ > /* Now wait for the command to complete */ > timeout = wait_event_timeout(tw_dev->ioctl_wqueue, >tw_dev->chrdev_request_id == TW_IOCTL_CHRDEV_FREE, timeout); > >- /* See if we reset while waiting for the ioctl to complete */ >- if (test_bit(TW_IN_RESET, &tw_dev->flags)) { >- clear_bit(TW_IN_RESET, &tw_dev->flags); >- retval = -ERESTARTSYS; >- goto out2; >- } >- > /* We timed out, and didn't get an interrupt */ > if (tw_dev->chrdev_request_id != TW_IOCTL_CHRDEV_FREE) { > /* Now we need to reset the board */ > printk(KERN_WARNING "3w-xxxx: scsi%d: Character ioctl (0x%x) >timed out, resetting card.\n", tw_dev->host->host_no, cmd); > retval = -EIO; >- spin_lock_irqsave(tw_dev->host->host_lock, flags); >- tw_dev->state[request_id] = TW_S_COMPLETED; >- tw_state_request_finish(tw_dev, request_id); >- tw_dev->posted_request_count--; >- spin_unlock_irqrestore(tw_dev->host->host_lock, flags); >- if (tw_reset_device_extension(tw_dev, 1)) { >+ if (tw_reset_device_extension(tw_dev)) { > printk(KERN_WARNING "3w-xxxx: tw_chrdev_ioctl(): Reset failed >for card %d.\n", tw_dev->host->host_no); > } > goto out2; >@@ -1286,7 +1279,7 @@ > if (cmd->use_sg == 0) > return 0; > >- use_sg = pci_map_sg(pdev, cmd->request_buffer, cmd->use_sg, >DMA_BIDIRECTIONAL); >+ use_sg = pci_map_sg(pdev, cmd->request_buffer, cmd->use_sg, >cmd->sc_data_direction); > > if (use_sg == 0) { > printk(KERN_WARNING "3w-xxxx: tw_map_scsi_sg_data(): pci_map_sg() >failed.\n"); >@@ -1308,7 +1301,7 @@ > if (cmd->request_bufflen == 0) > return 0; > >- mapping = pci_map_page(pdev, virt_to_page(cmd->request_buffer), >offset_in_page(cmd->request_buffer), cmd->request_bufflen, >DMA_BIDIRECTIONAL); >+ mapping = pci_map_page(pdev, virt_to_page(cmd->request_buffer), >offset_in_page(cmd->request_buffer), cmd->request_bufflen, >cmd->sc_data_direction); > > if (mapping == 0) { > printk(KERN_WARNING "3w-xxxx: tw_map_scsi_single_data(): >pci_map_page() failed.\n"); >@@ -1327,16 +1320,16 @@ > > switch(cmd->SCp.phase) { > case TW_PHASE_SINGLE: >- pci_unmap_page(pdev, cmd->SCp.have_data_in, cmd->request_bufflen, >DMA_BIDIRECTIONAL); >+ pci_unmap_page(pdev, cmd->SCp.have_data_in, cmd->request_bufflen, >cmd->sc_data_direction); > break; > case TW_PHASE_SGLIST: >- pci_unmap_sg(pdev, cmd->request_buffer, cmd->use_sg, DMA_BIDIRECTIONAL); >+ pci_unmap_sg(pdev, cmd->request_buffer, cmd->use_sg, >cmd->sc_data_direction); > break; > } > } /* End tw_unmap_scsi_data() */ > > /* This function will reset a device extension */ >-static int tw_reset_device_extension(TW_Device_Extension *tw_dev, int >ioctl_reset) >+static int tw_reset_device_extension(TW_Device_Extension *tw_dev) > { > int i = 0; > struct scsi_cmnd *srb; >@@ -1382,15 +1375,10 @@ > printk(KERN_WARNING "3w-xxxx: scsi%d: Reset sequence failed.\n", >tw_dev->host->host_no); > return 1; > } >- TW_ENABLE_AND_CLEAR_INTERRUPTS(tw_dev); > >- /* Wake up any ioctl that was pending before the reset */ >- if ((tw_dev->chrdev_request_id == TW_IOCTL_CHRDEV_FREE) || (ioctl_reset)) { >- clear_bit(TW_IN_RESET, &tw_dev->flags); >- } else { >- tw_dev->chrdev_request_id = TW_IOCTL_CHRDEV_FREE; >- wake_up(&tw_dev->ioctl_wqueue); >- } >+ TW_ENABLE_AND_CLEAR_INTERRUPTS(tw_dev); >+ clear_bit(TW_IN_RESET, &tw_dev->flags); >+ tw_dev->chrdev_request_id = TW_IOCTL_CHRDEV_FREE; > > return 0; > } /* End tw_reset_device_extension() */ >@@ -1437,14 +1425,18 @@ > "WARNING: Command (0x%x) timed out, resetting card.\n", > SCpnt->cmnd[0]); > >+ /* Make sure we are not issuing an ioctl or resetting from ioctl */ >+ mutex_lock(&tw_dev->ioctl_lock); >+ > /* Now reset the card and some of the device extension data */ >- if (tw_reset_device_extension(tw_dev, 0)) { >+ if (tw_reset_device_extension(tw_dev)) { > printk(KERN_WARNING "3w-xxxx: scsi%d: Reset failed.\n", >tw_dev->host->host_no); > goto out; > } > > retval = SUCCESS; > out: >+ mutex_unlock(&tw_dev->ioctl_lock); > return retval; > } /* End tw_scsi_eh_reset() */ > >@@ -1660,9 +1652,9 @@ > request_buffer[4] = 0x8; /* caching page */ > request_buffer[5] = 0xa; /* page length */ > if (*flags & 0x1) >- request_buffer[6] = 0x4; /* WCE on */ >+ request_buffer[6] = 0x5; /* WCE on, RCD on */ > else >- request_buffer[6] = 0x0; /* WCE off */ >+ request_buffer[6] = 0x1; /* WCE off, RCD on */ > tw_transfer_internal(tw_dev, request_id, request_buffer, > sizeof(request_buffer)); > >@@ -2012,6 +2004,10 @@ > int retval = 1; > TW_Device_Extension *tw_dev = (TW_Device_Extension >*)SCpnt->device->host->hostdata; > >+ /* If we are resetting due to timed out ioctl, report as busy */ >+ if (test_bit(TW_IN_RESET, &tw_dev->flags)) >+ return SCSI_MLQUEUE_HOST_BUSY; >+ > /* Save done function into Scsi_Cmnd struct */ > SCpnt->scsi_done = done; > >@@ -2101,6 +2097,10 @@ > > handled = 1; > >+ /* If we are resetting, bail */ >+ if (test_bit(TW_IN_RESET, &tw_dev->flags)) >+ goto tw_interrupt_bail; >+ > /* Check controller for errors */ > if (tw_check_bits(status_reg_value)) { > dprintk(KERN_WARNING "3w-xxxx: tw_interrupt(): Unexpected bits.\n"); >@@ -2277,6 +2277,9 @@ > /* Disable interrupts */ > TW_DISABLE_INTERRUPTS(tw_dev); > >+ /* Free up the IRQ */ >+ free_irq(tw_dev->tw_pci_dev->irq, tw_dev); >+ > printk(KERN_WARNING "3w-xxxx: Shutting down host %d.\n", >tw_dev->host->host_no); > > /* Tell the card we are shutting down */ >@@ -2445,9 +2448,6 @@ > twe_major = -1; > } > >- /* Free up the IRQ */ >- free_irq(tw_dev->tw_pci_dev->irq, tw_dev); >- > /* Shutdown the card */ > __tw_shutdown(tw_dev); > >diff -Naur linux-2.6.18.x86_64/drivers/scsi/3w-xxxx.h >linux-2.6.18.x86_64.new/drivers/scsi/3w-xxxx.h >--- linux-2.6.18.x86_64/drivers/scsi/3w-xxxx.h 2006-09-19 >20:42:06.000000000 -0700 >+++ linux-2.6.18.x86_64.new/drivers/scsi/3w-xxxx.h 2008-06-17 >15:12:36.000000000 -0700 >@@ -6,7 +6,7 @@ > Arnaldo Carvalho de Melo <acme@conectiva.com.br> > Brad Strand <linux@3ware.com> > >- Copyright (C) 1999-2005 3ware Inc. >+ Copyright (C) 1999-2007 3ware Inc. > > Kernel compatiblity By: Andre Hedrick <andre@suse.com> > Non-Copyright (C) 2000 Andre Hedrick <andre@suse.com> >@@ -74,7 +74,7 @@ > [0x00D] = "ERROR: Logical unit deleted: Unit #", > [0x00F] = "WARNING: SMART threshold exceeded: Port #", > [0x021] = "WARNING: ATA UDMA downgrade: Port #", >- [0x021] = "WARNING: ATA UDMA upgrade: Port #", >+ [0x022] = "WARNING: ATA UDMA upgrade: Port #", > [0x023] = "WARNING: Sector repair occurred: Port #", > [0x024] = "ERROR: SBUF integrity check failure", > [0x025] = "ERROR: Lost cached write: Port #", > >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 451945
: 309713 |
314818