Skip to content

Commit

Permalink
isa: set 24-bit dma_mask for ISA devices
Browse files Browse the repository at this point in the history
dma_alloc_coherent() on x86 currently takes a passed in NULL device
pointer to mean that it should allocate an ISA compatible (24-bit) buffer
which is a bit of a hack.

The ALSA ISA drivers are the main consumers of this but have a struct
device in fact readily available.

For the legacy drivers, this sets the device dma_mask in preparation for
using the actual device with the DMA API so as to eventually not need the
NULL hack in dma_alloc_coherent().

This does not fix a current bug -- 2.6.26-rc1 stumbled over the NULL hack
in dma_alloc_coherent() but this has already been fixed in commit
4a367f3 by Takashi Iwai.

Signed-off-by: Rene Herman <[email protected]>
Cc: Bjorn Helgaas <[email protected]>
Acked-by: Takashi Iwai <[email protected]>
Cc: Alan Cox <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Rene Herman authored and torvalds committed Jul 26, 2008
1 parent e86b19c commit 00412be
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions drivers/base/isa.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/dma-mapping.h>
#include <linux/isa.h>

static struct device isa_bus = {
Expand Down Expand Up @@ -141,6 +142,9 @@ int isa_register_driver(struct isa_driver *isa_driver, unsigned int ndev)
isa_dev->dev.release = isa_dev_release;
isa_dev->id = id;

isa_dev->dev.coherent_dma_mask = DMA_24BIT_MASK;
isa_dev->dev.dma_mask = &isa_dev->dev.coherent_dma_mask;

error = device_register(&isa_dev->dev);
if (error) {
put_device(&isa_dev->dev);
Expand Down

0 comments on commit 00412be

Please sign in to comment.