diff options
Diffstat (limited to 'packages/linux/linux-ezx-2.6.23/patches/patch-2.6.23.1')
-rw-r--r-- | packages/linux/linux-ezx-2.6.23/patches/patch-2.6.23.1 | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/packages/linux/linux-ezx-2.6.23/patches/patch-2.6.23.1 b/packages/linux/linux-ezx-2.6.23/patches/patch-2.6.23.1 new file mode 100644 index 0000000000..5027b85ad4 --- /dev/null +++ b/packages/linux/linux-ezx-2.6.23/patches/patch-2.6.23.1 @@ -0,0 +1,108 @@ +diff --git a/Makefile b/Makefile +index 4635a64..c244a02 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,7 +1,7 @@ + VERSION = 2 + PATCHLEVEL = 6 + SUBLEVEL = 23 +-EXTRAVERSION = ++EXTRAVERSION = .1 + NAME = Arr Matey! A Hairy Bilge Rat! + + # *DOCUMENTATION* +diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c +index cb7dec9..d9832e2 100644 +--- a/drivers/ata/sata_mv.c ++++ b/drivers/ata/sata_mv.c +@@ -69,10 +69,11 @@ + #include <linux/device.h> + #include <scsi/scsi_host.h> + #include <scsi/scsi_cmnd.h> ++#include <scsi/scsi_device.h> + #include <linux/libata.h> + + #define DRV_NAME "sata_mv" +-#define DRV_VERSION "1.0" ++#define DRV_VERSION "1.01" + + enum { + /* BAR's are enumerated in terms of pci_resource_start() terms */ +@@ -420,6 +421,7 @@ static void mv_error_handler(struct ata_port *ap); + static void mv_post_int_cmd(struct ata_queued_cmd *qc); + static void mv_eh_freeze(struct ata_port *ap); + static void mv_eh_thaw(struct ata_port *ap); ++static int mv_slave_config(struct scsi_device *sdev); + static int mv_init_one(struct pci_dev *pdev, const struct pci_device_id *ent); + + static void mv5_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio, +@@ -457,7 +459,7 @@ static struct scsi_host_template mv5_sht = { + .use_clustering = 1, + .proc_name = DRV_NAME, + .dma_boundary = MV_DMA_BOUNDARY, +- .slave_configure = ata_scsi_slave_config, ++ .slave_configure = mv_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, + }; +@@ -475,7 +477,7 @@ static struct scsi_host_template mv6_sht = { + .use_clustering = 1, + .proc_name = DRV_NAME, + .dma_boundary = MV_DMA_BOUNDARY, +- .slave_configure = ata_scsi_slave_config, ++ .slave_configure = mv_slave_config, + .slave_destroy = ata_scsi_slave_destroy, + .bios_param = ata_std_bios_param, + }; +@@ -763,6 +765,17 @@ static void mv_irq_clear(struct ata_port *ap) + { + } + ++static int mv_slave_config(struct scsi_device *sdev) ++{ ++ int rc = ata_scsi_slave_config(sdev); ++ if (rc) ++ return rc; ++ ++ blk_queue_max_phys_segments(sdev->request_queue, MV_MAX_SG_CT / 2); ++ ++ return 0; /* scsi layer doesn't check return value, sigh */ ++} ++ + static void mv_set_edma_ptrs(void __iomem *port_mmio, + struct mv_host_priv *hpriv, + struct mv_port_priv *pp) +@@ -1130,10 +1143,9 @@ static void mv_port_stop(struct ata_port *ap) + * LOCKING: + * Inherited from caller. + */ +-static unsigned int mv_fill_sg(struct ata_queued_cmd *qc) ++static void mv_fill_sg(struct ata_queued_cmd *qc) + { + struct mv_port_priv *pp = qc->ap->private_data; +- unsigned int n_sg = 0; + struct scatterlist *sg; + struct mv_sg *mv_sg; + +@@ -1151,7 +1163,7 @@ static unsigned int mv_fill_sg(struct ata_queued_cmd *qc) + + mv_sg->addr = cpu_to_le32(addr & 0xffffffff); + mv_sg->addr_hi = cpu_to_le32((addr >> 16) >> 16); +- mv_sg->flags_size = cpu_to_le32(len); ++ mv_sg->flags_size = cpu_to_le32(len & 0xffff); + + sg_len -= len; + addr += len; +@@ -1160,12 +1172,9 @@ static unsigned int mv_fill_sg(struct ata_queued_cmd *qc) + mv_sg->flags_size |= cpu_to_le32(EPRD_FLAG_END_OF_TBL); + + mv_sg++; +- n_sg++; + } + + } +- +- return n_sg; + } + + static inline void mv_crqb_pack_cmd(__le16 *cmdw, u8 data, u8 addr, unsigned last) |