From: Ingo Molnar <mingo@elte.hu>
To: Joerg Roedel <joerg.roedel@amd.com>
Cc: Ingo Molnar <mingo@redhat.com>,
Thomas Gleixner <tglx@linutronix.de>,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
iommu@lists.linux-foundation.org
Subject: Re: [PATCH 03/10] x86: add initialization code for DMA-API debugging
Date: Fri, 21 Nov 2008 17:56:28 +0100 [thread overview]
Message-ID: <20081121165628.GD733@elte.hu> (raw)
In-Reply-To: <1227284770-19215-4-git-send-email-joerg.roedel@amd.com>
* Joerg Roedel <joerg.roedel@amd.com> wrote:
> +extern
> +void dma_debug_init(void);
this can be on a single line.
> +
> +#else /* CONFIG_DMA_API_DEBUG */
> +
> +static inline
> +void dma_debug_init(void)
this too. (when something fits on a single line, we prefer it so)
> +#include <linux/types.h>
> +#include <linux/scatterlist.h>
> +#include <linux/list.h>
> +#include <linux/slab.h>
> +#include <linux/spinlock.h>
> +#include <linux/module.h>
> +#include <linux/hardirq.h>
> +#include <linux/dma-mapping.h>
> +#include <asm/bug.h>
> +#include <asm/dma-mapping.h>
> +#include <asm/dma_debug.h>
to reduce the chances of commit conflicts in the future, we
generally sort include lines in x86 files the following way:
> +#include <linux/scatterlist.h>
> +#include <linux/dma-mapping.h>
> +#include <linux/spinlock.h>
> +#include <linux/hardirq.h>
> +#include <linux/module.h>
> +#include <linux/types.h>
> +#include <linux/list.h>
> +#include <linux/slab.h>
>
> +#include <asm/bug.h>
> +#include <asm/dma-mapping.h>
> +#include <asm/dma_debug.h>
[ note the extra newline too between the linux/ and asm/ portions. ]
> +#define HASH_SIZE 256
> +#define HASH_FN_SHIFT 20
> +#define HASH_FN_MASK 0xffULL
please align the values vertically.
> +/* Hash list to save the allocated dma addresses */
> +static struct list_head dma_entry_hash[HASH_SIZE];
Should be cacheline-aligned i guess - if this feature is enabled this
is a hot area.
> +/* A slab cache to allocate dma_map_entries fast */
> +static struct kmem_cache *dma_entry_cache;
__read_mostly - to isolate it from the above hot area.
> +/* lock to protect the data structures */
> +static DEFINE_SPINLOCK(dma_lock);
should have a separate cacheline too i guess.
> +static int hash_fn(struct dma_debug_entry *entry)
> +{
> + /*
> + * Hash function is based on the dma address.
> + * We use bits 20-27 here as the index into the hash
> + */
> + BUG_ON(entry->dev_addr == bad_dma_address);
please use WARN_ON_ONCE() instead of crashing the box in possibly hard
to debug spots.
> + return (entry->dev_addr >> HASH_FN_SHIFT) & HASH_FN_MASK;
> +}
> +
> +static struct dma_debug_entry *dma_entry_alloc(void)
> +{
> + gfp_t gfp = GFP_KERNEL | __GFP_ZERO;
> +
> + if (in_atomic())
> + gfp |= GFP_ATOMIC;
> +
> + return kmem_cache_alloc(dma_entry_cache, gfp);
hm. that slab allocation in the middle of DMA mapping ops makes me a
bit nervous. the DMA mapping ops are generally rather atomic.
and in_atomic() check there is a bug on !PREEMPT kernels, so it wont
fly.
We dont have a gfp flag passed in as all the DMA mapping APIs really
expect all allocations having been done in advance already.
Any chance to attach the debug entry to the iotlb entries themselves -
either during build time (for swiotlb) or during iommu init time (for
the hw iommu's) ?
Ingo
next prev parent reply other threads:[~2008-11-21 16:56 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-21 16:26 [PATCH 0/10] DMA-API debugging facility Joerg Roedel
2008-11-21 16:26 ` [PATCH 01/10] x86: add Kconfig entry for DMA-API debugging Joerg Roedel
2008-11-21 16:40 ` Ingo Molnar
2008-11-21 16:48 ` Joerg Roedel
2008-11-21 23:18 ` David Miller
2008-11-21 16:26 ` [PATCH 02/10] x86: add data structures " Joerg Roedel
2008-11-21 16:42 ` Ingo Molnar
2008-11-21 16:49 ` Joerg Roedel
2008-11-21 16:26 ` [PATCH 03/10] x86: add initialization code " Joerg Roedel
2008-11-21 16:56 ` Ingo Molnar [this message]
2008-11-21 17:10 ` Joerg Roedel
2008-11-21 17:19 ` Ingo Molnar
2008-11-21 17:27 ` Ingo Molnar
2008-11-21 17:43 ` Ingo Molnar
2008-11-22 9:48 ` Joerg Roedel
2008-11-23 11:28 ` Ingo Molnar
2008-11-23 11:35 ` Ingo Molnar
2008-11-23 13:04 ` Ingo Molnar
2008-11-22 3:27 ` FUJITA Tomonori
2008-11-22 9:40 ` Joerg Roedel
2008-11-22 10:16 ` FUJITA Tomonori
2008-11-22 12:28 ` FUJITA Tomonori
2008-11-23 19:36 ` Andi Kleen
2008-11-21 16:26 ` [PATCH 04/10] x86: add helper functions for consistency checks Joerg Roedel
2008-11-21 17:07 ` Ingo Molnar
2008-11-21 16:26 ` [PATCH 05/10] x86: add check code for map/unmap_single code Joerg Roedel
2008-11-22 3:27 ` FUJITA Tomonori
2008-11-22 9:39 ` Joerg Roedel
2008-11-21 16:26 ` [PATCH 06/10] x86: add check code for map/unmap_sg code Joerg Roedel
2008-11-21 16:58 ` Ingo Molnar
2008-11-21 17:10 ` Ingo Molnar
2008-11-21 16:26 ` [PATCH 07/10] x86: add checks for alloc/free_coherent code Joerg Roedel
2008-11-21 16:57 ` Ingo Molnar
2008-11-22 3:27 ` FUJITA Tomonori
2008-11-22 9:38 ` Joerg Roedel
2008-11-21 16:26 ` [PATCH 08/10] x86: add checks for sync_single* code Joerg Roedel
2008-11-21 16:26 ` [PATCH 09/10] x86: add checks for sync_single_range* code Joerg Roedel
2008-11-21 16:26 ` [PATCH 10/10] x86: add checks for sync_sg* code Joerg Roedel
2008-11-21 16:59 ` Ingo Molnar
2008-11-21 16:37 ` [PATCH 0/10] DMA-API debugging facility Ingo Molnar
2008-11-21 16:40 ` Joerg Roedel
2008-11-21 16:52 ` Joerg Roedel
2008-11-21 16:54 ` David Woodhouse
2008-11-21 16:57 ` Joerg Roedel
2008-11-21 17:03 ` Ingo Molnar
2008-11-21 17:06 ` David Woodhouse
2008-11-21 17:18 ` Ingo Molnar
2008-11-21 17:20 ` Joerg Roedel
2008-11-21 17:24 ` David Woodhouse
2008-11-21 17:27 ` Joerg Roedel
2008-11-21 17:45 ` Ingo Molnar
2008-11-22 3:27 ` FUJITA Tomonori
2008-11-22 9:33 ` Joerg Roedel
2008-11-22 10:16 ` FUJITA Tomonori
2009-02-05 22:44 ` David Woodhouse
2009-02-25 8:11 ` David Woodhouse
2009-07-01 13:19 ` [PATCH] Support DMA-API debugging facility on PowerPC David Woodhouse
2009-07-01 14:00 ` Christoph Hellwig
2009-07-01 18:34 ` Joerg Roedel
2009-07-02 14:09 ` Kumar Gala
2008-11-21 17:22 ` [PATCH 0/10] DMA-API debugging facility David Woodhouse
2008-11-22 3:27 ` FUJITA Tomonori
2008-11-22 9:29 ` Joerg Roedel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20081121165628.GD733@elte.hu \
--to=mingo@elte.hu \
--cc=iommu@lists.linux-foundation.org \
--cc=joerg.roedel@amd.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).