mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-09 06:43:09 +00:00
libata: remove ata_sff_data_xfer_noirq()
ata_sff_data_xfer_noirq() is invoked via the ->sff_data_xfer hook. The latter is invoked by ata_pio_sector(), atapi_send_cdb() and __atapi_pio_bytes() which in turn is invoked by ata_sff_hsm_move(). The latter function requires that the "ap->lock" lock is held which needs to be taken with disabled interrupts. There is no need have to have ata_sff_data_xfer_noirq() which invokes ata_sff_data_xfer32() with disabled interrupts because at this point the interrupts are already disabled. Remove the function and its references to it and replace all callers with ata_sff_data_xfer32(). Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
parent
aece27a2f0
commit
23ebda2fc7
@ -118,8 +118,7 @@ PIO data read/write
|
|||||||
All bmdma-style drivers must implement this hook. This is the low-level
|
All bmdma-style drivers must implement this hook. This is the low-level
|
||||||
operation that actually copies the data bytes during a PIO data
|
operation that actually copies the data bytes during a PIO data
|
||||||
transfer. Typically the driver will choose one of
|
transfer. Typically the driver will choose one of
|
||||||
:c:func:`ata_sff_data_xfer_noirq`, :c:func:`ata_sff_data_xfer`, or
|
:c:func:`ata_sff_data_xfer`, or :c:func:`ata_sff_data_xfer32`.
|
||||||
:c:func:`ata_sff_data_xfer32`.
|
|
||||||
|
|
||||||
ATA command execute
|
ATA command execute
|
||||||
~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~
|
||||||
|
@ -657,36 +657,6 @@ unsigned int ata_sff_data_xfer32(struct ata_queued_cmd *qc, unsigned char *buf,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(ata_sff_data_xfer32);
|
EXPORT_SYMBOL_GPL(ata_sff_data_xfer32);
|
||||||
|
|
||||||
/**
|
|
||||||
* ata_sff_data_xfer_noirq - Transfer data by PIO
|
|
||||||
* @qc: queued command
|
|
||||||
* @buf: data buffer
|
|
||||||
* @buflen: buffer length
|
|
||||||
* @rw: read/write
|
|
||||||
*
|
|
||||||
* Transfer data from/to the device data register by PIO. Do the
|
|
||||||
* transfer with interrupts disabled.
|
|
||||||
*
|
|
||||||
* LOCKING:
|
|
||||||
* Inherited from caller.
|
|
||||||
*
|
|
||||||
* RETURNS:
|
|
||||||
* Bytes consumed.
|
|
||||||
*/
|
|
||||||
unsigned int ata_sff_data_xfer_noirq(struct ata_queued_cmd *qc, unsigned char *buf,
|
|
||||||
unsigned int buflen, int rw)
|
|
||||||
{
|
|
||||||
unsigned long flags;
|
|
||||||
unsigned int consumed;
|
|
||||||
|
|
||||||
local_irq_save(flags);
|
|
||||||
consumed = ata_sff_data_xfer32(qc, buf, buflen, rw);
|
|
||||||
local_irq_restore(flags);
|
|
||||||
|
|
||||||
return consumed;
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL_GPL(ata_sff_data_xfer_noirq);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ata_pio_sector - Transfer a sector of data.
|
* ata_pio_sector - Transfer a sector of data.
|
||||||
* @qc: Command on going
|
* @qc: Command on going
|
||||||
|
@ -178,7 +178,7 @@ static struct scsi_host_template cmd640_sht = {
|
|||||||
static struct ata_port_operations cmd640_port_ops = {
|
static struct ata_port_operations cmd640_port_ops = {
|
||||||
.inherits = &ata_sff_port_ops,
|
.inherits = &ata_sff_port_ops,
|
||||||
/* In theory xfer_noirq is not needed once we kill the prefetcher */
|
/* In theory xfer_noirq is not needed once we kill the prefetcher */
|
||||||
.sff_data_xfer = ata_sff_data_xfer_noirq,
|
.sff_data_xfer = ata_sff_data_xfer32,
|
||||||
.sff_irq_check = cmd640_sff_irq_check,
|
.sff_irq_check = cmd640_sff_irq_check,
|
||||||
.qc_issue = cmd640_qc_issue,
|
.qc_issue = cmd640_qc_issue,
|
||||||
.cable_detect = ata_cable_40wire,
|
.cable_detect = ata_cable_40wire,
|
||||||
|
@ -324,7 +324,7 @@ static struct ata_port_operations pata_icside_port_ops = {
|
|||||||
.inherits = &ata_bmdma_port_ops,
|
.inherits = &ata_bmdma_port_ops,
|
||||||
/* no need to build any PRD tables for DMA */
|
/* no need to build any PRD tables for DMA */
|
||||||
.qc_prep = ata_noop_qc_prep,
|
.qc_prep = ata_noop_qc_prep,
|
||||||
.sff_data_xfer = ata_sff_data_xfer_noirq,
|
.sff_data_xfer = ata_sff_data_xfer32,
|
||||||
.bmdma_setup = pata_icside_bmdma_setup,
|
.bmdma_setup = pata_icside_bmdma_setup,
|
||||||
.bmdma_start = pata_icside_bmdma_start,
|
.bmdma_start = pata_icside_bmdma_start,
|
||||||
.bmdma_stop = pata_icside_bmdma_stop,
|
.bmdma_stop = pata_icside_bmdma_stop,
|
||||||
|
@ -102,7 +102,7 @@ static struct scsi_host_template pata_imx_sht = {
|
|||||||
|
|
||||||
static struct ata_port_operations pata_imx_port_ops = {
|
static struct ata_port_operations pata_imx_port_ops = {
|
||||||
.inherits = &ata_sff_port_ops,
|
.inherits = &ata_sff_port_ops,
|
||||||
.sff_data_xfer = ata_sff_data_xfer_noirq,
|
.sff_data_xfer = ata_sff_data_xfer32,
|
||||||
.cable_detect = ata_cable_unknown,
|
.cable_detect = ata_cable_unknown,
|
||||||
.set_piomode = pata_imx_set_piomode,
|
.set_piomode = pata_imx_set_piomode,
|
||||||
};
|
};
|
||||||
|
@ -246,12 +246,12 @@ static const struct ata_port_operations legacy_base_port_ops = {
|
|||||||
|
|
||||||
static struct ata_port_operations simple_port_ops = {
|
static struct ata_port_operations simple_port_ops = {
|
||||||
.inherits = &legacy_base_port_ops,
|
.inherits = &legacy_base_port_ops,
|
||||||
.sff_data_xfer = ata_sff_data_xfer_noirq,
|
.sff_data_xfer = ata_sff_data_xfer32,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct ata_port_operations legacy_port_ops = {
|
static struct ata_port_operations legacy_port_ops = {
|
||||||
.inherits = &legacy_base_port_ops,
|
.inherits = &legacy_base_port_ops,
|
||||||
.sff_data_xfer = ata_sff_data_xfer_noirq,
|
.sff_data_xfer = ata_sff_data_xfer32,
|
||||||
.set_mode = legacy_set_mode,
|
.set_mode = legacy_set_mode,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -341,7 +341,7 @@ static unsigned int pdc_data_xfer_vlb(struct ata_queued_cmd *qc,
|
|||||||
}
|
}
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
} else
|
} else
|
||||||
buflen = ata_sff_data_xfer_noirq(qc, buf, buflen, rw);
|
buflen = ata_sff_data_xfer32(qc, buf, buflen, rw);
|
||||||
|
|
||||||
return buflen;
|
return buflen;
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ static struct scsi_host_template palmld_sht = {
|
|||||||
|
|
||||||
static struct ata_port_operations palmld_port_ops = {
|
static struct ata_port_operations palmld_port_ops = {
|
||||||
.inherits = &ata_sff_port_ops,
|
.inherits = &ata_sff_port_ops,
|
||||||
.sff_data_xfer = ata_sff_data_xfer_noirq,
|
.sff_data_xfer = ata_sff_data_xfer32,
|
||||||
.cable_detect = ata_cable_40wire,
|
.cable_detect = ata_cable_40wire,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -151,7 +151,7 @@ static struct scsi_host_template pcmcia_sht = {
|
|||||||
|
|
||||||
static struct ata_port_operations pcmcia_port_ops = {
|
static struct ata_port_operations pcmcia_port_ops = {
|
||||||
.inherits = &ata_sff_port_ops,
|
.inherits = &ata_sff_port_ops,
|
||||||
.sff_data_xfer = ata_sff_data_xfer_noirq,
|
.sff_data_xfer = ata_sff_data_xfer32,
|
||||||
.cable_detect = ata_cable_40wire,
|
.cable_detect = ata_cable_40wire,
|
||||||
.set_mode = pcmcia_set_mode,
|
.set_mode = pcmcia_set_mode,
|
||||||
};
|
};
|
||||||
|
@ -49,7 +49,7 @@ static struct scsi_host_template pata_platform_sht = {
|
|||||||
|
|
||||||
static struct ata_port_operations pata_platform_port_ops = {
|
static struct ata_port_operations pata_platform_port_ops = {
|
||||||
.inherits = &ata_sff_port_ops,
|
.inherits = &ata_sff_port_ops,
|
||||||
.sff_data_xfer = ata_sff_data_xfer_noirq,
|
.sff_data_xfer = ata_sff_data_xfer32,
|
||||||
.cable_detect = ata_cable_unknown,
|
.cable_detect = ata_cable_unknown,
|
||||||
.set_mode = pata_platform_set_mode,
|
.set_mode = pata_platform_set_mode,
|
||||||
};
|
};
|
||||||
|
@ -471,7 +471,7 @@ static struct ata_port_operations via_port_ops = {
|
|||||||
|
|
||||||
static struct ata_port_operations via_port_ops_noirq = {
|
static struct ata_port_operations via_port_ops_noirq = {
|
||||||
.inherits = &via_port_ops,
|
.inherits = &via_port_ops,
|
||||||
.sff_data_xfer = ata_sff_data_xfer_noirq,
|
.sff_data_xfer = ata_sff_data_xfer32,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1832,8 +1832,6 @@ extern unsigned int ata_sff_data_xfer(struct ata_queued_cmd *qc,
|
|||||||
unsigned char *buf, unsigned int buflen, int rw);
|
unsigned char *buf, unsigned int buflen, int rw);
|
||||||
extern unsigned int ata_sff_data_xfer32(struct ata_queued_cmd *qc,
|
extern unsigned int ata_sff_data_xfer32(struct ata_queued_cmd *qc,
|
||||||
unsigned char *buf, unsigned int buflen, int rw);
|
unsigned char *buf, unsigned int buflen, int rw);
|
||||||
extern unsigned int ata_sff_data_xfer_noirq(struct ata_queued_cmd *qc,
|
|
||||||
unsigned char *buf, unsigned int buflen, int rw);
|
|
||||||
extern void ata_sff_irq_on(struct ata_port *ap);
|
extern void ata_sff_irq_on(struct ata_port *ap);
|
||||||
extern void ata_sff_irq_clear(struct ata_port *ap);
|
extern void ata_sff_irq_clear(struct ata_port *ap);
|
||||||
extern int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc,
|
extern int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc,
|
||||||
|
Loading…
Reference in New Issue
Block a user