libata: Protect DMA core code by #ifdef CONFIG_HAS_DMA
If NO_DMA=y: ERROR: "bad_dma_ops" [drivers/ata/libata.ko] undefined! To fix this, protect the DMA code by #ifdef CONFIG_HAS_DMA, and provide dummies of ata_sg_clean() and ata_sg_setup() for the !CONFIG_HAS_DMA case. Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
parent
6cf32ed9ee
commit
2874d5ee6c
|
@ -4813,32 +4813,6 @@ static unsigned int ata_dev_init_params(struct ata_device *dev,
|
|||
return err_mask;
|
||||
}
|
||||
|
||||
/**
|
||||
* ata_sg_clean - Unmap DMA memory associated with command
|
||||
* @qc: Command containing DMA memory to be released
|
||||
*
|
||||
* Unmap all mapped DMA memory associated with this command.
|
||||
*
|
||||
* LOCKING:
|
||||
* spin_lock_irqsave(host lock)
|
||||
*/
|
||||
static void ata_sg_clean(struct ata_queued_cmd *qc)
|
||||
{
|
||||
struct ata_port *ap = qc->ap;
|
||||
struct scatterlist *sg = qc->sg;
|
||||
int dir = qc->dma_dir;
|
||||
|
||||
WARN_ON_ONCE(sg == NULL);
|
||||
|
||||
VPRINTK("unmapping %u sg elements\n", qc->n_elem);
|
||||
|
||||
if (qc->n_elem)
|
||||
dma_unmap_sg(ap->dev, sg, qc->orig_n_elem, dir);
|
||||
|
||||
qc->flags &= ~ATA_QCFLAG_DMAMAP;
|
||||
qc->sg = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* atapi_check_dma - Check whether ATAPI DMA can be supported
|
||||
* @qc: Metadata associated with taskfile to check
|
||||
|
@ -4923,6 +4897,34 @@ void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg,
|
|||
qc->cursg = qc->sg;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HAS_DMA
|
||||
|
||||
/**
|
||||
* ata_sg_clean - Unmap DMA memory associated with command
|
||||
* @qc: Command containing DMA memory to be released
|
||||
*
|
||||
* Unmap all mapped DMA memory associated with this command.
|
||||
*
|
||||
* LOCKING:
|
||||
* spin_lock_irqsave(host lock)
|
||||
*/
|
||||
void ata_sg_clean(struct ata_queued_cmd *qc)
|
||||
{
|
||||
struct ata_port *ap = qc->ap;
|
||||
struct scatterlist *sg = qc->sg;
|
||||
int dir = qc->dma_dir;
|
||||
|
||||
WARN_ON_ONCE(sg == NULL);
|
||||
|
||||
VPRINTK("unmapping %u sg elements\n", qc->n_elem);
|
||||
|
||||
if (qc->n_elem)
|
||||
dma_unmap_sg(ap->dev, sg, qc->orig_n_elem, dir);
|
||||
|
||||
qc->flags &= ~ATA_QCFLAG_DMAMAP;
|
||||
qc->sg = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* ata_sg_setup - DMA-map the scatter-gather table associated with a command.
|
||||
* @qc: Command with scatter-gather table to be mapped.
|
||||
|
@ -4955,6 +4957,13 @@ static int ata_sg_setup(struct ata_queued_cmd *qc)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#else /* !CONFIG_HAS_DMA */
|
||||
|
||||
static inline void ata_sg_clean(struct ata_queued_cmd *qc) {}
|
||||
static inline int ata_sg_setup(struct ata_queued_cmd *qc) { return -1; }
|
||||
|
||||
#endif /* !CONFIG_HAS_DMA */
|
||||
|
||||
/**
|
||||
* swap_buf_le16 - swap halves of 16-bit words in place
|
||||
* @buf: Buffer to swap
|
||||
|
|
Loading…
Reference in a new issue