lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Mon, 25 Sep 2006 12:27:48 +0100
From:	David Howells <dhowells@...hat.com>
To:	Alan Cox <alan@...rguk.ukuu.org.uk>
Cc:	David Howells <dhowells@...hat.com>,
	Al Viro <viro@....linux.org.uk>,
	Linus Torvalds <torvalds@...l.org>,
	Jeff Garzik <jgarzik@...ox.com>, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] restore libata build on frv 

Alan Cox <alan@...rguk.ukuu.org.uk> wrote:

> > NAK...  These settings are totally meaningless on FRV.
> 
> You have no PCI bus ?

I do, but I don't have an ISA bus, and the stuff in asm-generic is worse than
useless.  #if'ing out all the legacy-handling code that uses this stuff seems
to work fine.

These are all legacy ISA settings, and not applicable to FRV:

	#define ATA_PRIMARY_CMD		0x1F0
	#define ATA_PRIMARY_CTL		0x3F6
	#define ATA_PRIMARY_IRQ		14

	#define ATA_SECONDARY_CMD	0x170
	#define ATA_SECONDARY_CTL	0x376
	#define ATA_SECONDARY_IRQ	15

Note that the ata_pci_init_legacy_port() explicitly states the IRQ numbers as
14 and 15 without reference to the macros and so is bad, eg:

		probe_ent->irq = 14;

The attached patch makes it possible to dispense with the settings completely.

David

---
[PATCH] FRV: Make libata build on FRV

Make FRV build with libata enabled.  This is done by making the legacy ISA
interface support conditional on the definition of the legacy ISA port
settings.  If there's no ISA bus, we shouldn't even attempt to pretend that
there is.

Signed-Off-By: David Howells <dhowells@...hat.com>
---

 drivers/ata/libata-core.c        |    2 ++
 drivers/ata/libata-sff.c         |   10 ++++++++++
 include/asm-frv/libata-portmap.h |   17 ++++++++++++++++-
 3 files changed, 28 insertions(+), 1 deletions(-)

diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 753b015..2afa510 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -5714,6 +5714,7 @@ void ata_host_remove(struct ata_host *ho
 
 		ata_scsi_release(ap->scsi_host);
 
+#ifdef ATA_PRIMARY_CMD
 		if ((ap->flags & ATA_FLAG_NO_LEGACY) == 0) {
 			struct ata_ioports *ioaddr = &ap->ioaddr;
 
@@ -5723,6 +5724,7 @@ void ata_host_remove(struct ata_host *ho
 			else if (ioaddr->cmd_addr == ATA_SECONDARY_CMD)
 				release_region(ATA_SECONDARY_CMD, 8);
 		}
+#endif
 
 		scsi_host_put(ap->scsi_host);
 	}
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c
index 688bb55..63fdf73 100644
--- a/drivers/ata/libata-sff.c
+++ b/drivers/ata/libata-sff.c
@@ -867,6 +867,7 @@ ata_pci_init_native_mode(struct pci_dev 
 }
 
 
+#ifdef ATA_PRIMARY_CMD
 static struct ata_probe_ent *ata_pci_init_legacy_port(struct pci_dev *pdev,
 				struct ata_port_info **port, int port_mask)
 {
@@ -914,6 +915,7 @@ static struct ata_probe_ent *ata_pci_ini
 
 	return probe_ent;
 }
+#endif
 
 
 /**
@@ -993,6 +995,7 @@ int ata_pci_init_one (struct pci_dev *pd
 		goto err_out;
 	}
 
+#ifdef ATA_PRIMARY_CMD
 	if (legacy_mode) {
 		if (!request_region(ATA_PRIMARY_CMD, 8, "libata")) {
 			struct resource *conflict, res;
@@ -1032,6 +1035,7 @@ int ata_pci_init_one (struct pci_dev *pd
 		} else
 			legacy_mode |= ATA_PORT_SECONDARY;
 	}
+#endif
 
 	/* we have legacy mode, but all ports are unavailable */
 	if (legacy_mode == (1 << 3)) {
@@ -1047,14 +1051,18 @@ int ata_pci_init_one (struct pci_dev *pd
 	if (rc)
 		goto err_out_regions;
 
+#ifdef ATA_PRIMARY_CMD
 	if (legacy_mode) {
 		probe_ent = ata_pci_init_legacy_port(pdev, port, legacy_mode);
 	} else {
+#endif
 		if (n_ports == 2)
 			probe_ent = ata_pci_init_native_mode(pdev, port, ATA_PORT_PRIMARY | ATA_PORT_SECONDARY);
 		else
 			probe_ent = ata_pci_init_native_mode(pdev, port, ATA_PORT_PRIMARY);
+#ifdef ATA_PRIMARY_CMD
 	}
+#endif
 	if (!probe_ent) {
 		rc = -ENOMEM;
 		goto err_out_regions;
@@ -1070,10 +1078,12 @@ int ata_pci_init_one (struct pci_dev *pd
 	return 0;
 
 err_out_regions:
+#ifdef ATA_PRIMARY_CMD
 	if (legacy_mode & ATA_PORT_PRIMARY)
 		release_region(ATA_PRIMARY_CMD, 8);
 	if (legacy_mode & ATA_PORT_SECONDARY)
 		release_region(ATA_SECONDARY_CMD, 8);
+#endif
 	pci_release_regions(pdev);
 err_out:
 	if (disable_dev_on_err)
diff --git a/include/asm-frv/libata-portmap.h b/include/asm-frv/libata-portmap.h
index 75484ef..2403f0b 100644
--- a/include/asm-frv/libata-portmap.h
+++ b/include/asm-frv/libata-portmap.h
@@ -1 +1,16 @@
-#include <asm-generic/libata-portmap.h>
+/* ISA bus mappings for legacy ATA ports - which don't exist on FRV
+ *
+ * Copyright (C) 2006 Red Hat, Inc. All Rights Reserved.
+ * Written by David Howells (dhowells@...hat.com)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _ASM_LIBATA_PORTMAP_H
+#define _ASM_LIBATA_PORTMAP_H
+
+
+#endif /* _ASM_LIBATA_PORTMAP_H */

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists