Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dfd287f6 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by James Bottomley
Browse files

[SCSI] aic7xxx: sane pci probing



always probe in bus order, avoid any reordering

Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 7f602c53
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -102,7 +102,6 @@ aic7770_probe(struct device *dev)

 	dev_set_drvdata(dev, ahc);

	if (aic7xxx_detect_complete)
	error = ahc_linux_register_host(ahc, &aic7xxx_driver_template);
	return (error);
}
+20 −55
Original line number Diff line number Diff line
@@ -337,13 +337,6 @@ static uint32_t aic7xxx_pci_parity = ~0;
 */
uint32_t aic7xxx_allow_memio = ~0;

/*
 * aic7xxx_detect() has been run, so register all device arrivals
 * immediately with the system rather than deferring to the sorted
 * attachment performed by aic7xxx_detect().
 */
int aic7xxx_detect_complete;

/*
 * So that we can set how long each device is given as a selection timeout.
 * The table of values goes like this:
@@ -475,48 +468,6 @@ ahc_linux_map_seg(struct ahc_softc *ahc, struct scb *scb,
	return (consumed);
}

/*
 * Try to detect an Adaptec 7XXX controller.
 */
static int
ahc_linux_detect(struct scsi_host_template *template)
{
	struct	ahc_softc *ahc;
	int     found = 0;

	/*
	 * If we've been passed any parameters, process them now.
	 */
	if (aic7xxx)
		aic7xxx_setup(aic7xxx);

	template->proc_name = "aic7xxx";

	/*
	 * Initialize our softc list lock prior to
	 * probing for any adapters.
	 */
	ahc_list_lockinit();

	found = ahc_linux_pci_init();
	if (!ahc_linux_eisa_init())
		found++;
	
	/*
	 * Register with the SCSI layer all
	 * controllers we've found.
	 */
	TAILQ_FOREACH(ahc, &ahc_tailq, links) {

		if (ahc_linux_register_host(ahc, template) == 0)
			found++;
	}

	aic7xxx_detect_complete++;

	return (found);
}

/*
 * Return a string describing the driver.
 */
@@ -848,6 +799,7 @@ ahc_linux_bus_reset(struct scsi_cmnd *cmd)
struct scsi_host_template aic7xxx_driver_template = {
	.module			= THIS_MODULE,
	.name			= "aic7xxx",
	.proc_name		= "aic7xxx",
	.proc_info		= ahc_linux_proc_info,
	.info			= ahc_linux_info,
	.queuecommand		= ahc_linux_queue,
@@ -2717,18 +2669,31 @@ static struct spi_function_template ahc_linux_transport_functions = {
static int __init
ahc_linux_init(void)
{
	ahc_linux_transport_template = spi_attach_transport(&ahc_linux_transport_functions);
	/*
	 * If we've been passed any parameters, process them now.
	 */
	if (aic7xxx)
		aic7xxx_setup(aic7xxx);

	ahc_linux_transport_template =
		spi_attach_transport(&ahc_linux_transport_functions);
	if (!ahc_linux_transport_template)
		return -ENODEV;

	scsi_transport_reserve_target(ahc_linux_transport_template,
				      sizeof(struct ahc_linux_target));
	scsi_transport_reserve_device(ahc_linux_transport_template,
				      sizeof(struct ahc_linux_device));
	if (ahc_linux_detect(&aic7xxx_driver_template))

	/*
	 * Initialize our softc list lock prior to
	 * probing for any adapters.
	 */
	ahc_list_lockinit();

	ahc_linux_pci_init();
	ahc_linux_eisa_init();
	return 0;
	spi_release_transport(ahc_linux_transport_template);
	ahc_linux_exit();
	return -ENODEV;
}

static void
+0 −1
Original line number Diff line number Diff line
@@ -132,7 +132,6 @@ typedef struct scsi_cmnd *ahc_io_ctx_t;
/************************* Configuration Data *********************************/
extern u_int aic7xxx_no_probe;
extern u_int aic7xxx_allow_memio;
extern int aic7xxx_detect_complete;
extern struct scsi_host_template aic7xxx_driver_template;

/***************************** Bus Space/DMA **********************************/
+1 −2
Original line number Diff line number Diff line
@@ -208,7 +208,6 @@ ahc_linux_pci_dev_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
		return (-error);
	}
	pci_set_drvdata(pdev, ahc);
	if (aic7xxx_detect_complete)
	ahc_linux_register_host(ahc, &aic7xxx_driver_template);
	return (0);
}