Skip to contentSkip to conversation

libata-sff: Don't try and activate channels which are not in use

PATCH Applied Alan 2 participants 2 messages Jan 8, 2007 – Jan 9, 2007 libata

lore
Share & tools
lore

Alan

author
#0 lore raw

PATCH 1/1 libata-sff: Don't try and activate channels which are not in use

An ATA controller in native mode may have one or more channels disabled and not assigned resources. In that case the existing code crashes trying to access I/O ports 0-7.

Add the neccessary check.

drivers/ata/libata-sff.c +22 -0
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.20-rc3-mm1/drivers/ata/libata-sff.c linux-2.6.20-rc3-mm1/drivers/ata/libata-sff.c
@@ -831,6 +831,21 @@
 }
 
 #ifdef CONFIG_PCI
+
+static int ata_resources_present(struct pci_dev *pdev, int port)
+{
+	int i;
+	
+	/* Check the PCI resources for this channel are enabled */
+	port = port * 2;
+	for (i = 0; i < 2; i ++) {
+		if (pci_resource_start(pdev, port + i) == 0 ||
+			pci_resource_len(pdev, port + i) == 0)
+		return 0;
+	}
+	return 1;
+}
+		
 /**
  *	ata_pci_init_native_mode - Initialize native-mode driver
  *	@pdev:  pci device to be initialized
@@ -862,6 +877,13 @@
 
 	probe_ent->irq = pdev->irq;
 	probe_ent->irq_flags = IRQF_SHARED;
+	
+	/* Discard disabled ports. Some controllers show their
+	   unused channels this way */
+	if (ata_resources_present(pdev, 0) == 0)
+		ports &= ~ATA_PORT_PRIMARY;
+	if (ata_resources_present(pdev, 1) == 0)
+		ports &= ~ATA_PORT_SECONDARY;
 
 	if (ports & ATA_PORT_PRIMARY) {
 		probe_ent->port[p].cmd_addr = pci_resource_start(pdev, 0);
Applied
#1 lore raw
Quoted 7 lines · Alan

An ATA controller in native mode may have one or more channels disabled and not assigned resources. In that case the existing code crashes trying to access I/O ports 0-7.

Add the neccessary check.

applied. perfect form, except for the whitespace:

Applying 'libata-sff: Don't try and activate channels which are not in use'

Adds trailing whitespace.
.dotest/patch:12:
Adds trailing whitespace.
.dotest/patch:22:
Adds trailing whitespace.
.dotest/patch:30:
warning: 3 lines add trailing whitespaces. Wrote tree 209dcf80a25abdd730fc84f379ba7b4981ca8249
Committed: 0711dff09b21432c70a0c44fa5110b38da28385b