Skip to content

Commit

Permalink
tools/virtio: add dma stubs
Browse files Browse the repository at this point in the history
Fixes build after recent IOMMU-related changes,
mustly by adding more stubs.

Signed-off-by: Michael S. Tsirkin <[email protected]>
  • Loading branch information
mstsirkin committed Aug 15, 2016
1 parent 446374d commit 6be3ffa
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 1 deletion.
16 changes: 16 additions & 0 deletions tools/virtio/linux/dma-mapping.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,20 @@ enum dma_data_direction {
DMA_NONE = 3,
};

#define dma_alloc_coherent(d, s, hp, f) ({ \
void *__dma_alloc_coherent_p = kmalloc((s), (f)); \
*(hp) = (unsigned long)__dma_alloc_coherent_p; \
__dma_alloc_coherent_p; \
})

#define dma_free_coherent(d, s, p, h) kfree(p)

#define dma_map_page(d, p, o, s, dir) (page_to_phys(p) + (o))

#define dma_map_single(d, p, s, dir) (virt_to_phys(p))
#define dma_mapping_error(...) (0)

#define dma_unmap_single(...) do { } while (0)
#define dma_unmap_page(...) do { } while (0)

#endif
14 changes: 14 additions & 0 deletions tools/virtio/linux/kernel.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@

#define PAGE_SIZE getpagesize()
#define PAGE_MASK (~(PAGE_SIZE-1))
#define PAGE_ALIGN(x) ((x + PAGE_SIZE - 1) & PAGE_MASK)

typedef unsigned long long phys_addr_t;
typedef unsigned long long dma_addr_t;
typedef size_t __kernel_size_t;
typedef unsigned int __wsum;
Expand Down Expand Up @@ -57,13 +59,23 @@ static inline void *kzalloc(size_t s, gfp_t gfp)
return p;
}

static inline void *alloc_pages_exact(size_t s, gfp_t gfp)
{
return kmalloc(s, gfp);
}

static inline void kfree(void *p)
{
if (p >= __kfree_ignore_start && p < __kfree_ignore_end)
return;
free(p);
}

static inline void free_pages_exact(void *p, size_t s)
{
kfree(p);
}

static inline void *krealloc(void *p, size_t s, gfp_t gfp)
{
return realloc(p, s);
Expand Down Expand Up @@ -105,6 +117,8 @@ static inline void free_page(unsigned long addr)
#define dev_err(dev, format, ...) fprintf (stderr, format, ## __VA_ARGS__)
#define dev_warn(dev, format, ...) fprintf (stderr, format, ## __VA_ARGS__)

#define WARN_ON_ONCE(cond) ((cond) && fprintf (stderr, "WARNING\n"))

#define min(x, y) ({ \
typeof(x) _min1 = (x); \
typeof(y) _min2 = (y); \
Expand Down
4 changes: 4 additions & 0 deletions tools/virtio/linux/slab.h
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
#ifndef LINUX_SLAB_H
#define GFP_KERNEL 0
#define GFP_ATOMIC 0
#define __GFP_NOWARN 0
#define __GFP_ZERO 0
#endif
6 changes: 5 additions & 1 deletion tools/virtio/linux/virtio.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,12 @@
#include <linux/scatterlist.h>
#include <linux/kernel.h>

struct device {
void *parent;
};

struct virtio_device {
void *dev;
struct device dev;
u64 features;
};

Expand Down
13 changes: 13 additions & 0 deletions tools/virtio/linux/virtio_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,19 @@ static inline void __virtio_clear_bit(struct virtio_device *vdev,
#define virtio_has_feature(dev, feature) \
(__virtio_test_bit((dev), feature))

/**
* virtio_has_iommu_quirk - determine whether this device has the iommu quirk
* @vdev: the device
*/
static inline bool virtio_has_iommu_quirk(const struct virtio_device *vdev)
{
/*
* Note the reverse polarity of the quirk feature (compared to most
* other features), this is for compatibility with legacy systems.
*/
return !virtio_has_feature(vdev, VIRTIO_F_IOMMU_PLATFORM);
}

static inline bool virtio_is_little_endian(struct virtio_device *vdev)
{
return virtio_has_feature(vdev, VIRTIO_F_VERSION_1) ||
Expand Down

0 comments on commit 6be3ffa

Please sign in to comment.