2005-09-12 14:52:55

by John W. Linville

[permalink] [raw]
Subject: [patch 2.6.13] ia64: add EXPORT_SYMBOL_GPL for ia64_max_cacheline_size

The implementation of dma_get_cache_alignment for ia64 makes reference
to ia64_max_cacheline_size inside of a static inline. For this to
work for modules, this needs to be EXPORT_SYMBOL{,_GPL}.

Signed-off-by: John W. Linville <[email protected]>
---

arch/ia64/kernel/setup.c | 1 +
1 files changed, 1 insertion(+)

diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c
--- a/arch/ia64/kernel/setup.c
+++ b/arch/ia64/kernel/setup.c
@@ -79,6 +79,7 @@ unsigned long vga_console_iobase;
unsigned long vga_console_membase;

unsigned long ia64_max_cacheline_size;
+EXPORT_SYMBOL_GPL(ia64_max_cacheline_size);
unsigned long ia64_iobase; /* virtual address for I/O accesses */
EXPORT_SYMBOL(ia64_iobase);
struct io_space io_space[MAX_IO_SPACES];


2005-09-12 19:25:27

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [patch 2.6.13] ia64: add EXPORT_SYMBOL_GPL for ia64_max_cacheline_size

On Mon, Sep 12, 2005 at 10:48:52AM -0400, John W. Linville wrote:
> The implementation of dma_get_cache_alignment for ia64 makes reference
> to ia64_max_cacheline_size inside of a static inline. For this to
> work for modules, this needs to be EXPORT_SYMBOL{,_GPL}.

This is not supposed to be a _GPL api. best just move
dma_get_cache_alignment out of line.

2005-09-13 00:06:34

by John W. Linville

[permalink] [raw]
Subject: Re: [patch 2.6.13] ia64: add EXPORT_SYMBOL_GPL for ia64_max_cacheline_size

On Mon, Sep 12, 2005 at 08:25:24PM +0100, Christoph Hellwig wrote:
> On Mon, Sep 12, 2005 at 10:48:52AM -0400, John W. Linville wrote:
> > The implementation of dma_get_cache_alignment for ia64 makes reference
> > to ia64_max_cacheline_size inside of a static inline. For this to
> > work for modules, this needs to be EXPORT_SYMBOL{,_GPL}.
>
> This is not supposed to be a _GPL api. best just move
> dma_get_cache_alignment out of line.

You are thinking of something like the x86_64 implementation?
That seems reasonable to me. Patch to follow...

John
--
John W. Linville
[email protected]

2005-09-13 00:14:44

by John W. Linville

[permalink] [raw]
Subject: [patch 2.6.13] ia64: re-implement dma_get_cache_alignment to avoid EXPORT_SYMBOL

The current ia64 implementation of dma_get_cache_alignment does not
work for modules because it relies on a symbol which is not exported.
Direct access to a global is a little ugly anyway, so this patch
re-implements dma_get_cache_alignment in a manner similar to what is
currently used for x86_64.

Signed-off-by: John W. Linville <[email protected]>
---
This patch replaces the patch at the link below:

http://www.ussg.iu.edu/hypermail/linux/kernel/0509.1/1365.html

arch/ia64/kernel/setup.c | 7 +++++++
include/asm-ia64/dma-mapping.h | 7 +------
2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c
--- a/arch/ia64/kernel/setup.c
+++ b/arch/ia64/kernel/setup.c
@@ -79,6 +79,13 @@ unsigned long vga_console_iobase;
unsigned long vga_console_membase;

unsigned long ia64_max_cacheline_size;
+
+int dma_get_cache_alignment(void)
+{
+ return ia64_max_cacheline_size;
+}
+EXPORT_SYMBOL(dma_get_cache_alignment);
+
unsigned long ia64_iobase; /* virtual address for I/O accesses */
EXPORT_SYMBOL(ia64_iobase);
struct io_space io_space[MAX_IO_SPACES];
diff --git a/include/asm-ia64/dma-mapping.h b/include/asm-ia64/dma-mapping.h
--- a/include/asm-ia64/dma-mapping.h
+++ b/include/asm-ia64/dma-mapping.h
@@ -48,12 +48,7 @@ dma_set_mask (struct device *dev, u64 ma
return 0;
}

-static inline int
-dma_get_cache_alignment (void)
-{
- extern int ia64_max_cacheline_size;
- return ia64_max_cacheline_size;
-}
+extern int dma_get_cache_alignment(void);

static inline void
dma_cache_sync (void *vaddr, size_t size, enum dma_data_direction dir)
--
John W. Linville
[email protected]

2005-09-13 09:24:27

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [patch 2.6.13] ia64: re-implement dma_get_cache_alignment to avoid EXPORT_SYMBOL

On Mon, Sep 12, 2005 at 08:14:29PM -0400, John W. Linville wrote:
> The current ia64 implementation of dma_get_cache_alignment does not
> work for modules because it relies on a symbol which is not exported.
> Direct access to a global is a little ugly anyway, so this patch
> re-implements dma_get_cache_alignment in a manner similar to what is
> currently used for x86_64.

looks good to me.

2005-09-13 12:26:46

by Lion Vollnhals

[permalink] [raw]
Subject: Re: [patch 2.6.13] ia64: re-implement dma_get_cache_alignment to avoid EXPORT_SYMBOL

> unsigned long ia64_max_cacheline_size;
> +
> +int dma_get_cache_alignment(void)
> +{
> + return ia64_max_cacheline_size;
> +}
> +EXPORT_SYMBOL(dma_get_cache_alignment);
> +

Are you intentionally returning an "int" instead of an "unsigned long"?

--
Lion Vollnhals

2005-09-13 16:45:41

by Luck, Tony

[permalink] [raw]
Subject: RE: [patch 2.6.13] ia64: re-implement dma_get_cache_alignment to avoid EXPORT_SYMBOL

>> unsigned long ia64_max_cacheline_size;
>> +
>> +int dma_get_cache_alignment(void)
>> +{
>> + return ia64_max_cacheline_size;
>> +}
>> +EXPORT_SYMBOL(dma_get_cache_alignment);
>> +
>
>Are you intentionally returning an "int" instead of an "unsigned long"?

The old version used to return int, as does the the version
on other architectures. The problem appears to be the
definition "unsigned long ia64_max_cacheline_size;"

I think an int should be plenty big enough :-)

-Tony