* [git pull] AMD-IOMMU (AMD-Vi) updates for 2.6.32
@ 2009-09-04 10:05 Joerg Roedel
2009-09-04 13:06 ` Ingo Molnar
0 siblings, 1 reply; 5+ messages in thread
From: Joerg Roedel @ 2009-09-04 10:05 UTC (permalink / raw)
To: mingo, linux-kernel; +Cc: osrc-patches
Hi Ingo,
The following changes since commit 37d0892c5a94e208cf863e3b7bac014edee4346d:
Ian Kent (1):
autofs4 - fix missed case when changing to use struct path
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu.git amd-iommu/2.6.32
Joerg Roedel (37):
x86/amd-iommu: Dump fault entry on DTE error
x86/amd-iommu: Dump illegal command on ILLEGAL_COMMAND_ERROR
x86/amd-iommu: Introduce function for iommu-local domain flush
x86/amd-iommu: Remove some merge helper code
x86/amd-iommu: replace "AMD IOMMU" by "AMD-Vi"
x86/amd-iommu: Remove redundant 'IOMMU' string
x86/amd-iommu: fix broken check in amd_iommu_flush_all_devices
x86/amd-iommu: Add function to flush all DTEs on one IOMMU
x86/amd-iommu: Add reset function for command buffers
x86/amd-iommu: Reset command buffer on ILLEGAL_COMMAND_ERROR
x86/amd-iommu: Panic if IOMMU command buffer reset fails
x86/amd-iommu: Reset command buffer if wait loop fails
x86/amd-iommu: Make fetch_pte aware of dynamic mapping levels
x86/amd-iommu: Use fetch_pte in iommu_unmap_page
x86/amd-iommu: Use fetch_pte in amd_iommu_iova_to_phys
x86/amd-iommu: Add a gneric version of amd_iommu_flush_all_devices
x86/amd-iommu: Introduce set_dte_entry function
x86/amd-iommu: Flush domains if address space size was increased
x86/amd-iommu: Introduce increase_address_space function
x86/amd-iommu: Change alloc_pte to support 64 bit address space
x86/amd-iommu: Remove last usages of IOMMU_PTE_L0_INDEX
x86/amd-iommu: Remove bus_addr check in iommu_map_page
x86/amd-iommu: Use 2-level page tables for dma_ops domains
x86/amd-iommu: Remove old page table handling macros
x86/amd-iommu: Support higher level PTEs in iommu_page_unmap
x86/amd-iommu: Change iommu_map_page to support multiple page sizes
x86/dma: Mark iommu_pass_through as __read_mostly
x86/amd-iommu: Add core functions for pd allocation/freeing
x86/amd-iommu: Add passthrough mode initialization functions
x86/amd-iommu: Fix device table write order
x86/amd-iommu: Align locking between attach_device and detach_device
x86/amd-iommu: Make sure a device is assigned in passthrough mode
x86/amd-iommu: Don't detach device from pt domain on driver unbind
x86/amd-iommu: Initialize passthrough mode when requested
Merge branches 'gart/fixes', 'amd-iommu/fixes+cleanups' and 'amd-iommu/fault-handling' into amd-iommu/2.6.32
Merge branch 'amd-iommu/passthrough' into amd-iommu/2.6.32
Merge branch 'amd-iommu/pagetable' into amd-iommu/2.6.32
Pavel Vasilyev (1):
x86/gart: Do not select AGP for GART_IOMMU
arch/x86/Kconfig | 1 -
arch/x86/include/asm/amd_iommu.h | 1 +
arch/x86/include/asm/amd_iommu_types.h | 50 ++--
arch/x86/kernel/amd_iommu.c | 489 +++++++++++++++++++++++---------
arch/x86/kernel/amd_iommu_init.c | 42 ++-
arch/x86/kernel/pci-dma.c | 9 +-
6 files changed, 429 insertions(+), 163 deletions(-)
These changes include updates and improvements in the page table code,
in fault handling and they implement iommu=pt mode for AMD-Vi too.
Last but not least there are also some minor cleanups and fixes for
AMD-Vi and GART included in this pull-request. All these changes are
compile-, boot- and load-tested.
I had to do three merge commits for this pull request because the
amd-iommu/passthrough and amd-iommu/pagetable branches touch the same
code in some parts and the octopus merge of these branches failed. I had
to merge these two branches seperatly.
Please consider to pull.
Joerg
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [git pull] AMD-IOMMU (AMD-Vi) updates for 2.6.32
2009-09-04 10:05 [git pull] AMD-IOMMU (AMD-Vi) updates for 2.6.32 Joerg Roedel
@ 2009-09-04 13:06 ` Ingo Molnar
2009-09-04 13:56 ` Joerg Roedel
0 siblings, 1 reply; 5+ messages in thread
From: Ingo Molnar @ 2009-09-04 13:06 UTC (permalink / raw)
To: Joerg Roedel; +Cc: linux-kernel, osrc-patches
* Joerg Roedel <joerg.roedel@amd.com> wrote:
> Hi Ingo,
>
> The following changes since commit 37d0892c5a94e208cf863e3b7bac014edee4346d:
> Ian Kent (1):
> autofs4 - fix missed case when changing to use struct path
>
> are available in the git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu.git amd-iommu/2.6.32
>
> Joerg Roedel (37):
> x86/amd-iommu: Dump fault entry on DTE error
> x86/amd-iommu: Dump illegal command on ILLEGAL_COMMAND_ERROR
> x86/amd-iommu: Introduce function for iommu-local domain flush
> x86/amd-iommu: Remove some merge helper code
> x86/amd-iommu: replace "AMD IOMMU" by "AMD-Vi"
> x86/amd-iommu: Remove redundant 'IOMMU' string
> x86/amd-iommu: fix broken check in amd_iommu_flush_all_devices
> x86/amd-iommu: Add function to flush all DTEs on one IOMMU
> x86/amd-iommu: Add reset function for command buffers
> x86/amd-iommu: Reset command buffer on ILLEGAL_COMMAND_ERROR
> x86/amd-iommu: Panic if IOMMU command buffer reset fails
> x86/amd-iommu: Reset command buffer if wait loop fails
> x86/amd-iommu: Make fetch_pte aware of dynamic mapping levels
> x86/amd-iommu: Use fetch_pte in iommu_unmap_page
> x86/amd-iommu: Use fetch_pte in amd_iommu_iova_to_phys
> x86/amd-iommu: Add a gneric version of amd_iommu_flush_all_devices
> x86/amd-iommu: Introduce set_dte_entry function
> x86/amd-iommu: Flush domains if address space size was increased
> x86/amd-iommu: Introduce increase_address_space function
> x86/amd-iommu: Change alloc_pte to support 64 bit address space
> x86/amd-iommu: Remove last usages of IOMMU_PTE_L0_INDEX
> x86/amd-iommu: Remove bus_addr check in iommu_map_page
> x86/amd-iommu: Use 2-level page tables for dma_ops domains
> x86/amd-iommu: Remove old page table handling macros
> x86/amd-iommu: Support higher level PTEs in iommu_page_unmap
> x86/amd-iommu: Change iommu_map_page to support multiple page sizes
> x86/dma: Mark iommu_pass_through as __read_mostly
> x86/amd-iommu: Add core functions for pd allocation/freeing
> x86/amd-iommu: Add passthrough mode initialization functions
> x86/amd-iommu: Fix device table write order
> x86/amd-iommu: Align locking between attach_device and detach_device
> x86/amd-iommu: Make sure a device is assigned in passthrough mode
> x86/amd-iommu: Don't detach device from pt domain on driver unbind
> x86/amd-iommu: Initialize passthrough mode when requested
> Merge branches 'gart/fixes', 'amd-iommu/fixes+cleanups' and 'amd-iommu/fault-handling' into amd-iommu/2.6.32
> Merge branch 'amd-iommu/passthrough' into amd-iommu/2.6.32
> Merge branch 'amd-iommu/pagetable' into amd-iommu/2.6.32
>
> Pavel Vasilyev (1):
> x86/gart: Do not select AGP for GART_IOMMU
>
> arch/x86/Kconfig | 1 -
> arch/x86/include/asm/amd_iommu.h | 1 +
> arch/x86/include/asm/amd_iommu_types.h | 50 ++--
> arch/x86/kernel/amd_iommu.c | 489 +++++++++++++++++++++++---------
> arch/x86/kernel/amd_iommu_init.c | 42 ++-
> arch/x86/kernel/pci-dma.c | 9 +-
> 6 files changed, 429 insertions(+), 163 deletions(-)
>
> These changes include updates and improvements in the page table code,
> in fault handling and they implement iommu=pt mode for AMD-Vi too.
> Last but not least there are also some minor cleanups and fixes for
> AMD-Vi and GART included in this pull-request. All these changes are
> compile-, boot- and load-tested.
>
> I had to do three merge commits for this pull request because the
> amd-iommu/passthrough and amd-iommu/pagetable branches touch the same
> code in some parts and the octopus merge of these branches failed. I had
> to merge these two branches seperatly.
> Please consider to pull.
Pulled, thanks a lot Joerg!
A few (small) comments:
+static void dump_dte_entry(u16 devid)
+{
+ int i;
+
+ for (i = 0; i < 8; ++i)
+ pr_err("AMD-Vi: DTE[%d]: %08x\n", i,
+ amd_iommu_dev_table[devid].data[i]);
that 8 is not very obvious - it deserves a comment. (we allocate at
least one page to amd_iommu_dev_table[] so it's safe - but where the
8 comes from is not very clear.)
Also, we tend to write 'i++' not '++i' in loops. (there's other
examples of this too in the iommu files)
This log printing pattern:
printk(KERN_ERR "AMD-Vi: Event logged [");
switch (type) {
case EVENT_TYPE_ILL_DEV:
printk("ILLEGAL_DEV_TABLE_ENTRY device=%02x:%02x.%x "
"address=0x%016llx flags=0x%04x]\n",
is now broken (produces an unexpected newline) due to:
5fd29d6: printk: clean up handling of log-levels and newlines
you probably want to convert all printk's to pr_*() calls, and use
pr_cont() in the above place.
Similar comments hold for dump_command() as well.
+++ b/arch/x86/include/asm/amd_iommu_types.h
@@ -457,4 +457,7 @@ static inline void amd_iommu_stats_init(void) {
}
#endif /* CONFIG_AMD_IOMMU_STATS */
+/* some function prototypes */
+extern void amd_iommu_reset_cmd_buffer(struct amd_iommu *iommu);
+
function prototypes belong into amd_iommu.h, not amd_iommu_types.h.
there's also a lot of function prototypes declared in the .c file:
+++ b/arch/x86/kernel/amd_iommu.c
@@ -61,6 +61,7 @@ static u64* alloc_pte(struct protection_domain
*dom,
static void dma_ops_reserve_addresses(struct dma_ops_domain *dom,
unsigned long start_page,
unsigned int pages);
+static void reset_iommu_command_buffer(struct amd_iommu *iommu);
These can generally be avoided via cleaner ordering: first define
simpler functions then more complex ones (which rely on simpler
functions).
+ if (unlikely(i == EXIT_LOOP_COUNT)) {
+ spin_unlock(&iommu->lock);
+ reset_iommu_command_buffer(iommu);
+ spin_lock(&iommu->lock);
+ }
What did iommu->lock protect it here, why do we drop it, and why is
it necessary to take it again? This pattern shows that either
there's too much or too little locking.
+ /* increase reference counter */
+ domain->dev_cnt += 1;
use ++?
+ * If a device is not yet associated with a domain, this function does
+ * assigns it visible for the hardware
typo.
+static void update_domain(struct protection_domain *domain)
+{
+ if (!domain->updated)
+ return;
+
+ update_device_table(domain);
+ flush_devices_by_domain(domain);
+ iommu_flush_domain(domain->id);
+
+ domain->updated = false;
+}
the domain->updated is a bit weird naming. Perhaps
domain->update_needed?
+ iommu_unmap_page(domain, iova, PM_MAP_4k);
small nit: mixed-case letters - PM_MAP_4K is better i guess.
+#define PM_ALIGNED(lvl, addr) ((PM_MAP_MASK(lvl) & (addr)) == (addr))
macro with two uses of its parameter - this is side-effect-unsafe.
Safer would be to turn this into an inline function. That would also
do proper type checking.
+ /* allocate passthroug domain */
typo.
+/*****************************************************************************
+ *
+ * The next functions do a basic initialization of IOMMU for pass through
+ * mode
+ *
+ * In passthrough mode the IOMMU is initialized and enabled but not used for
+ * DMA-API translation.
+ *
+
*****************************************************************************/
please use the customary (multi-line) comment style:
/*
* Comment .....
* ...... goes here.
*/
specified in Documentation/CodingStyle.
+#define PD_PASSTHROUGH_MASK (1UL << 2) /* domain has no page
+ translation */
ditto.
+ domain->dev_cnt += 1;
Could use '++' here too.
Thanks,
Ingo
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [git pull] AMD-IOMMU (AMD-Vi) updates for 2.6.32
2009-09-04 13:06 ` Ingo Molnar
@ 2009-09-04 13:56 ` Joerg Roedel
2009-09-04 14:11 ` Ingo Molnar
0 siblings, 1 reply; 5+ messages in thread
From: Joerg Roedel @ 2009-09-04 13:56 UTC (permalink / raw)
To: Ingo Molnar; +Cc: linux-kernel
Hi Ingo,
thanks for your comments.
On Fri, Sep 04, 2009 at 03:06:45PM +0200, Ingo Molnar wrote:
> +static void dump_dte_entry(u16 devid)
> +{
> + int i;
> +
> + for (i = 0; i < 8; ++i)
> + pr_err("AMD-Vi: DTE[%d]: %08x\n", i,
> + amd_iommu_dev_table[devid].data[i]);
>
> that 8 is not very obvious - it deserves a comment. (we allocate at
> least one page to amd_iommu_dev_table[] so it's safe - but where the
> 8 comes from is not very clear.)
Right. I will add a comment.
> Also, we tend to write 'i++' not '++i' in loops. (there's other
> examples of this too in the iommu files)
Ok, I use ++i for historic reasons from my old c++ times ;-) Is there a
specific reason i++ is prefered?
> This log printing pattern:
>
> printk(KERN_ERR "AMD-Vi: Event logged [");
>
> switch (type) {
> case EVENT_TYPE_ILL_DEV:
> printk("ILLEGAL_DEV_TABLE_ENTRY device=%02x:%02x.%x "
> "address=0x%016llx flags=0x%04x]\n",
>
> is now broken (produces an unexpected newline) due to:
>
> 5fd29d6: printk: clean up handling of log-levels and newlines
>
> you probably want to convert all printk's to pr_*() calls, and use
> pr_cont() in the above place.
Ok, I will chance this too.
> Similar comments hold for dump_command() as well.
>
> +++ b/arch/x86/include/asm/amd_iommu_types.h
> @@ -457,4 +457,7 @@ static inline void amd_iommu_stats_init(void) {
> }
>
> #endif /* CONFIG_AMD_IOMMU_STATS */
>
> +/* some function prototypes */
> +extern void amd_iommu_reset_cmd_buffer(struct amd_iommu *iommu);
> +
>
> function prototypes belong into amd_iommu.h, not amd_iommu_types.h.
The plan is to do it the other way around. Currently amd_iommu.h
contains the driver exported function prototypes and the prototypes of
functions only shared between amd_iommu_init.c and amd_iommu.c.
So my plan is to move the prototypes of the functions only shared
between the two driver source files to amd_iommu_types.h.
The prototypes I put into source files should all be forward
declarations of static functions only. Should these be in header files
too?
> there's also a lot of function prototypes declared in the .c file:
>
> +++ b/arch/x86/kernel/amd_iommu.c
> @@ -61,6 +61,7 @@ static u64* alloc_pte(struct protection_domain
> *dom,
> static void dma_ops_reserve_addresses(struct dma_ops_domain *dom,
> unsigned long start_page,
> unsigned int pages);
> +static void reset_iommu_command_buffer(struct amd_iommu *iommu);
>
> These can generally be avoided via cleaner ordering: first define
> simpler functions then more complex ones (which rely on simpler
> functions).
>
> + if (unlikely(i == EXIT_LOOP_COUNT)) {
> + spin_unlock(&iommu->lock);
> + reset_iommu_command_buffer(iommu);
> + spin_lock(&iommu->lock);
> + }
>
> What did iommu->lock protect it here, why do we drop it, and why is
> it necessary to take it again? This pattern shows that either
> there's too much or too little locking.
This function runs with the iommu->lock held. But
reset_iommu_command_buffer calls functions which take it again. To not
let this dead-lock the lock must be released before calling
reset_iommu_command_buffer. I agree this is not very clean design. The
whole command sending and flushing infrastructure in the driver has
somewhat grown into a little mess and one of my next updates will be to
clean that up to make it easier to maintain.
>
> + /* increase reference counter */
> + domain->dev_cnt += 1;
>
> use ++?
Hmm, In this case I would prefer the += variant because its a single
instruction and not part of an expression. The compiler should optimize
it to the same instruction as a ++ variant.
I try to use the ++ variant when the result is part of another
expression.
> + * If a device is not yet associated with a domain, this function does
> + * assigns it visible for the hardware
>
> typo.
Thanks, will fix.
>
> +static void update_domain(struct protection_domain *domain)
> +{
> + if (!domain->updated)
> + return;
> +
> + update_device_table(domain);
> + flush_devices_by_domain(domain);
> + iommu_flush_domain(domain->id);
> +
> + domain->updated = false;
> +}
>
> the domain->updated is a bit weird naming. Perhaps
> domain->update_needed?
update_needed is a bit misleading. The domain _is_ already updated but
we need to inform the IOMMU hardware about it and flush TLBs and device
table entries for that domain. So 'updated' is the better choice here I
think. Or I make it more specific and call it pt_updated to make clear
that the page table changed (such a change means that the pt root
pointer changed).
>
> + iommu_unmap_page(domain, iova, PM_MAP_4k);
>
> small nit: mixed-case letters - PM_MAP_4K is better i guess.
Thanks, will change that.
> +#define PM_ALIGNED(lvl, addr) ((PM_MAP_MASK(lvl) & (addr)) == (addr))
>
> macro with two uses of its parameter - this is side-effect-unsafe.
> Safer would be to turn this into an inline function. That would also
> do proper type checking.
Ok, I change that too.
> + /* allocate passthroug domain */
>
> typo.
Will fix, thanks.
> +/*****************************************************************************
> + *
> + * The next functions do a basic initialization of IOMMU for pass through
> + * mode
> + *
> + * In passthrough mode the IOMMU is initialized and enabled but not used for
> + * DMA-API translation.
> + *
> +
> *****************************************************************************/
>
> please use the customary (multi-line) comment style:
>
> /*
> * Comment .....
> * ...... goes here.
> */
>
> specified in Documentation/CodingStyle.
>
> +#define PD_PASSTHROUGH_MASK (1UL << 2) /* domain has no page
> + translation */
Right, I will fix this too.
Thanks,
Joerg
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [git pull] AMD-IOMMU (AMD-Vi) updates for 2.6.32
2009-09-04 13:56 ` Joerg Roedel
@ 2009-09-04 14:11 ` Ingo Molnar
2009-09-04 14:15 ` Joerg Roedel
0 siblings, 1 reply; 5+ messages in thread
From: Ingo Molnar @ 2009-09-04 14:11 UTC (permalink / raw)
To: Joerg Roedel; +Cc: linux-kernel
* Joerg Roedel <joerg.roedel@amd.com> wrote:
> Hi Ingo,
>
> thanks for your comments.
>
> On Fri, Sep 04, 2009 at 03:06:45PM +0200, Ingo Molnar wrote:
> > +static void dump_dte_entry(u16 devid)
> > +{
> > + int i;
> > +
> > + for (i = 0; i < 8; ++i)
> > + pr_err("AMD-Vi: DTE[%d]: %08x\n", i,
> > + amd_iommu_dev_table[devid].data[i]);
> >
> > that 8 is not very obvious - it deserves a comment. (we allocate at
> > least one page to amd_iommu_dev_table[] so it's safe - but where the
> > 8 comes from is not very clear.)
>
> Right. I will add a comment.
>
> > Also, we tend to write 'i++' not '++i' in loops. (there's other
> > examples of this too in the iommu files)
>
> Ok, I use ++i for historic reasons from my old c++ times ;-) Is there a
> specific reason i++ is prefered?
>
> > This log printing pattern:
> >
> > printk(KERN_ERR "AMD-Vi: Event logged [");
> >
> > switch (type) {
> > case EVENT_TYPE_ILL_DEV:
> > printk("ILLEGAL_DEV_TABLE_ENTRY device=%02x:%02x.%x "
> > "address=0x%016llx flags=0x%04x]\n",
> >
> > is now broken (produces an unexpected newline) due to:
> >
> > 5fd29d6: printk: clean up handling of log-levels and newlines
> >
> > you probably want to convert all printk's to pr_*() calls, and use
> > pr_cont() in the above place.
>
> Ok, I will chance this too.
>
> > Similar comments hold for dump_command() as well.
> >
> > +++ b/arch/x86/include/asm/amd_iommu_types.h
> > @@ -457,4 +457,7 @@ static inline void amd_iommu_stats_init(void) {
> > }
> >
> > #endif /* CONFIG_AMD_IOMMU_STATS */
> >
> > +/* some function prototypes */
> > +extern void amd_iommu_reset_cmd_buffer(struct amd_iommu *iommu);
> > +
> >
> > function prototypes belong into amd_iommu.h, not amd_iommu_types.h.
>
> The plan is to do it the other way around. Currently amd_iommu.h
> contains the driver exported function prototypes and the
> prototypes of functions only shared between amd_iommu_init.c and
> amd_iommu.c. So my plan is to move the prototypes of the functions
> only shared between the two driver source files to
> amd_iommu_types.h. The prototypes I put into source files should
> all be forward declarations of static functions only. Should these
> be in header files too?
Well, generally we only put data type definitions and constants into
*_types.h files. If you need multiple include files for methods i'd
suggest to split amd_iomm.h into two or so.
Ingo
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [git pull] AMD-IOMMU (AMD-Vi) updates for 2.6.32
2009-09-04 14:11 ` Ingo Molnar
@ 2009-09-04 14:15 ` Joerg Roedel
0 siblings, 0 replies; 5+ messages in thread
From: Joerg Roedel @ 2009-09-04 14:15 UTC (permalink / raw)
To: Ingo Molnar; +Cc: linux-kernel
On Fri, Sep 04, 2009 at 04:11:13PM +0200, Ingo Molnar wrote:
>
> * Joerg Roedel <joerg.roedel@amd.com> wrote:
>
> > Hi Ingo,
> >
> > thanks for your comments.
> >
> > On Fri, Sep 04, 2009 at 03:06:45PM +0200, Ingo Molnar wrote:
> > > +static void dump_dte_entry(u16 devid)
> > > +{
> > > + int i;
> > > +
> > > + for (i = 0; i < 8; ++i)
> > > + pr_err("AMD-Vi: DTE[%d]: %08x\n", i,
> > > + amd_iommu_dev_table[devid].data[i]);
> > >
> > > that 8 is not very obvious - it deserves a comment. (we allocate at
> > > least one page to amd_iommu_dev_table[] so it's safe - but where the
> > > 8 comes from is not very clear.)
> >
> > Right. I will add a comment.
> >
> > > Also, we tend to write 'i++' not '++i' in loops. (there's other
> > > examples of this too in the iommu files)
> >
> > Ok, I use ++i for historic reasons from my old c++ times ;-) Is there a
> > specific reason i++ is prefered?
> >
> > > This log printing pattern:
> > >
> > > printk(KERN_ERR "AMD-Vi: Event logged [");
> > >
> > > switch (type) {
> > > case EVENT_TYPE_ILL_DEV:
> > > printk("ILLEGAL_DEV_TABLE_ENTRY device=%02x:%02x.%x "
> > > "address=0x%016llx flags=0x%04x]\n",
> > >
> > > is now broken (produces an unexpected newline) due to:
> > >
> > > 5fd29d6: printk: clean up handling of log-levels and newlines
> > >
> > > you probably want to convert all printk's to pr_*() calls, and use
> > > pr_cont() in the above place.
> >
> > Ok, I will chance this too.
> >
> > > Similar comments hold for dump_command() as well.
> > >
> > > +++ b/arch/x86/include/asm/amd_iommu_types.h
> > > @@ -457,4 +457,7 @@ static inline void amd_iommu_stats_init(void) {
> > > }
> > >
> > > #endif /* CONFIG_AMD_IOMMU_STATS */
> > >
> > > +/* some function prototypes */
> > > +extern void amd_iommu_reset_cmd_buffer(struct amd_iommu *iommu);
> > > +
> > >
> > > function prototypes belong into amd_iommu.h, not amd_iommu_types.h.
> >
> > The plan is to do it the other way around. Currently amd_iommu.h
> > contains the driver exported function prototypes and the
> > prototypes of functions only shared between amd_iommu_init.c and
> > amd_iommu.c. So my plan is to move the prototypes of the functions
> > only shared between the two driver source files to
> > amd_iommu_types.h. The prototypes I put into source files should
> > all be forward declarations of static functions only. Should these
> > be in header files too?
>
> Well, generally we only put data type definitions and constants into
> *_types.h files. If you need multiple include files for methods i'd
> suggest to split amd_iomm.h into two or so.
Ok, right, its better to split amd_iommu.h here then.
Joerg
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2009-09-04 14:18 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-09-04 10:05 [git pull] AMD-IOMMU (AMD-Vi) updates for 2.6.32 Joerg Roedel
2009-09-04 13:06 ` Ingo Molnar
2009-09-04 13:56 ` Joerg Roedel
2009-09-04 14:11 ` Ingo Molnar
2009-09-04 14:15 ` Joerg Roedel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox