Merge tag 'dma-mapping-4.18' of git://git.infradead.org/users/hch/dma-mapping
Pull dma-mapping updates from Christoph Hellwig:
- replace the force_dma flag with a dma_configure bus method. (Nipun
Gupta, although one patch is іncorrectly attributed to me due to a
git rebase bug)
- use GFP_DMA32 more agressively in dma-direct. (Takashi Iwai)
- remove PCI_DMA_BUS_IS_PHYS and rely on the dma-mapping API to do the
right thing for bounce buffering.
- move dma-debug initialization to common code, and apply a few
cleanups to the dma-debug code.
- cleanup the Kconfig mess around swiotlb selection
- swiotlb comment fixup (Yisheng Xie)
- a trivial swiotlb fix. (Dan Carpenter)
- support swiotlb on RISC-V. (based on a patch from Palmer Dabbelt)
- add a new generic dma-noncoherent dma_map_ops implementation and use
it for arc, c6x and nds32.
- improve scatterlist validity checking in dma-debug. (Robin Murphy)
- add a struct device quirk to limit the dma-mask to 32-bit due to
bridge/system issues, and switch x86 to use it instead of a local
hack for VIA bridges.
- handle devices without a dma_mask more gracefully in the dma-direct
code.
* tag 'dma-mapping-4.18' of git://git.infradead.org/users/hch/dma-mapping: (48 commits)
dma-direct: don't crash on device without dma_mask
nds32: use generic dma_noncoherent_ops
nds32: implement the unmap_sg DMA operation
nds32: consolidate DMA cache maintainance routines
x86/pci-dma: switch the VIA 32-bit DMA quirk to use the struct device flag
x86/pci-dma: remove the explicit nodac and allowdac option
x86/pci-dma: remove the experimental forcesac boot option
Documentation/x86: remove a stray reference to pci-nommu.c
core, dma-direct: add a flag 32-bit dma limits
dma-mapping: remove unused gfp_t parameter to arch_dma_alloc_attrs
dma-debug: check scatterlist segments
c6x: use generic dma_noncoherent_ops
arc: use generic dma_noncoherent_ops
arc: fix arc_dma_{map,unmap}_page
arc: fix arc_dma_sync_sg_for_{cpu,device}
arc: simplify arc_dma_sync_single_for_{cpu,device}
dma-mapping: provide a generic dma-noncoherent implementation
dma-mapping: simplify Kconfig dependencies
riscv: add swiotlb support
riscv: only enable ZONE_DMA32 for 64-bit
...
This commit is contained in:
@@ -180,7 +180,6 @@ EXPORT_SYMBOL_GPL(ide_dma_unmap_sg);
|
||||
void ide_dma_off_quietly(ide_drive_t *drive)
|
||||
{
|
||||
drive->dev_flags &= ~IDE_DFLAG_USING_DMA;
|
||||
ide_toggle_bounce(drive, 0);
|
||||
|
||||
drive->hwif->dma_ops->dma_host_set(drive, 0);
|
||||
}
|
||||
@@ -211,7 +210,6 @@ EXPORT_SYMBOL(ide_dma_off);
|
||||
void ide_dma_on(ide_drive_t *drive)
|
||||
{
|
||||
drive->dev_flags |= IDE_DFLAG_USING_DMA;
|
||||
ide_toggle_bounce(drive, 1);
|
||||
|
||||
drive->hwif->dma_ops->dma_host_set(drive, 1);
|
||||
}
|
||||
|
||||
@@ -6,32 +6,6 @@
|
||||
#include <linux/ide.h>
|
||||
#include <linux/bitops.h>
|
||||
|
||||
/**
|
||||
* ide_toggle_bounce - handle bounce buffering
|
||||
* @drive: drive to update
|
||||
* @on: on/off boolean
|
||||
*
|
||||
* Enable or disable bounce buffering for the device. Drives move
|
||||
* between PIO and DMA and that changes the rules we need.
|
||||
*/
|
||||
|
||||
void ide_toggle_bounce(ide_drive_t *drive, int on)
|
||||
{
|
||||
u64 addr = BLK_BOUNCE_HIGH; /* dma64_addr_t */
|
||||
|
||||
if (!PCI_DMA_BUS_IS_PHYS) {
|
||||
addr = BLK_BOUNCE_ANY;
|
||||
} else if (on && drive->media == ide_disk) {
|
||||
struct device *dev = drive->hwif->dev;
|
||||
|
||||
if (dev && dev->dma_mask)
|
||||
addr = *dev->dma_mask;
|
||||
}
|
||||
|
||||
if (drive->queue)
|
||||
blk_queue_bounce_limit(drive->queue, addr);
|
||||
}
|
||||
|
||||
u64 ide_get_lba_addr(struct ide_cmd *cmd, int lba48)
|
||||
{
|
||||
struct ide_taskfile *tf = &cmd->tf;
|
||||
|
||||
@@ -796,8 +796,7 @@ static int ide_init_queue(ide_drive_t *drive)
|
||||
* This will be fixed once we teach pci_map_sg() about our boundary
|
||||
* requirements, hopefully soon. *FIXME*
|
||||
*/
|
||||
if (!PCI_DMA_BUS_IS_PHYS)
|
||||
max_sg_entries >>= 1;
|
||||
max_sg_entries >>= 1;
|
||||
#endif /* CONFIG_PCI */
|
||||
|
||||
blk_queue_max_segments(q, max_sg_entries);
|
||||
@@ -805,9 +804,6 @@ static int ide_init_queue(ide_drive_t *drive)
|
||||
/* assign drive queue */
|
||||
drive->queue = q;
|
||||
|
||||
/* needs drive->queue to be set */
|
||||
ide_toggle_bounce(drive, 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user