2012-02-13 14:48:32

by Seth Jennings

[permalink] [raw]
Subject: [PATCH] staging: fix powerpc linux-next break on zsmalloc

linux/vmalloc.h added to zsmalloc-main.c to resolve implicit
declaration errors.

X86 dependency added to zsmalloc and dependent drivers zcache and zram.

This X86 only requirement is not ideal. Working to find portable
functions for __flush_tlb_one and set_pte.

Signed-off-by: Seth Jennings <[email protected]>
---
drivers/staging/zcache/Kconfig | 4 +++-
drivers/staging/zram/Kconfig | 4 +++-
drivers/staging/zsmalloc/Kconfig | 5 ++++-
drivers/staging/zsmalloc/zsmalloc-main.c | 1 +
4 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/zcache/Kconfig b/drivers/staging/zcache/Kconfig
index 94e48aa..5a36fcf 100644
--- a/drivers/staging/zcache/Kconfig
+++ b/drivers/staging/zcache/Kconfig
@@ -1,6 +1,8 @@
config ZCACHE
tristate "Dynamic compression of swap pages and clean pagecache pages"
- depends on (CLEANCACHE || FRONTSWAP) && CRYPTO
+ # X86 dependency is because zsmalloc uses non-portable pte/tlb
+ # functions
+ depends on (CLEANCACHE || FRONTSWAP) && CRYPTO && X86
select ZSMALLOC
select CRYPTO_LZO
default n
diff --git a/drivers/staging/zram/Kconfig b/drivers/staging/zram/Kconfig
index ee23a86..9d11a4c 100644
--- a/drivers/staging/zram/Kconfig
+++ b/drivers/staging/zram/Kconfig
@@ -1,6 +1,8 @@
config ZRAM
tristate "Compressed RAM block device support"
- depends on BLOCK && SYSFS
+ # X86 dependency is because zsmalloc uses non-portable pte/tlb
+ # functions
+ depends on BLOCK && SYSFS && X86
select ZSMALLOC
select LZO_COMPRESS
select LZO_DECOMPRESS
diff --git a/drivers/staging/zsmalloc/Kconfig b/drivers/staging/zsmalloc/Kconfig
index 3e7a8d4..8e2c6a0 100644
--- a/drivers/staging/zsmalloc/Kconfig
+++ b/drivers/staging/zsmalloc/Kconfig
@@ -1,6 +1,9 @@
config ZSMALLOC
tristate "Memory allocator for compressed pages"
- depends on SPARSEMEM
+ # X86 dependency is because of the use of __flush_tlb_one and set_pte
+ # in zsmalloc-main.c.
+ # TODO: convert these to portable functions
+ depends on SPARSEMEM && X86
default n
help
zsmalloc is a slab-based memory allocator designed to store
diff --git a/drivers/staging/zsmalloc/zsmalloc-main.c b/drivers/staging/zsmalloc/zsmalloc-main.c
index 189fb42..455fc2f 100644
--- a/drivers/staging/zsmalloc/zsmalloc-main.c
+++ b/drivers/staging/zsmalloc/zsmalloc-main.c
@@ -26,6 +26,7 @@
#include <asm/pgtable.h>
#include <linux/cpumask.h>
#include <linux/cpu.h>
+#include <linux/vmalloc.h>

#include "zsmalloc.h"
#include "zsmalloc_int.h"
--
1.7.5.4


2012-02-14 11:22:26

by Marc Dietrich

[permalink] [raw]
Subject: Re: [PATCH] staging: fix powerpc linux-next break on zsmalloc

Am 13.02.2012 15:47, schrieb Seth Jennings:
> linux/vmalloc.h added to zsmalloc-main.c to resolve implicit
> declaration errors.
>
> X86 dependency added to zsmalloc and dependent drivers zcache and zram.
>
> This X86 only requirement is not ideal. Working to find portable
> functions for __flush_tlb_one and set_pte.

sorry, zcache/zram works fine one ARM here. Why not depend on !POWERPC?

Marc

> Signed-off-by: Seth Jennings<[email protected]>
> ---
> drivers/staging/zcache/Kconfig | 4 +++-
> drivers/staging/zram/Kconfig | 4 +++-
> drivers/staging/zsmalloc/Kconfig | 5 ++++-
> drivers/staging/zsmalloc/zsmalloc-main.c | 1 +
> 4 files changed, 11 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/staging/zcache/Kconfig b/drivers/staging/zcache/Kconfig
> index 94e48aa..5a36fcf 100644
> --- a/drivers/staging/zcache/Kconfig
> +++ b/drivers/staging/zcache/Kconfig
> @@ -1,6 +1,8 @@
> config ZCACHE
> tristate "Dynamic compression of swap pages and clean pagecache pages"
> - depends on (CLEANCACHE || FRONTSWAP)&& CRYPTO
> + # X86 dependency is because zsmalloc uses non-portable pte/tlb
> + # functions
> + depends on (CLEANCACHE || FRONTSWAP)&& CRYPTO&& X86
> select ZSMALLOC
> select CRYPTO_LZO
> default n
> diff --git a/drivers/staging/zram/Kconfig b/drivers/staging/zram/Kconfig
> index ee23a86..9d11a4c 100644
> --- a/drivers/staging/zram/Kconfig
> +++ b/drivers/staging/zram/Kconfig
> @@ -1,6 +1,8 @@
> config ZRAM
> tristate "Compressed RAM block device support"
> - depends on BLOCK&& SYSFS
> + # X86 dependency is because zsmalloc uses non-portable pte/tlb
> + # functions
> + depends on BLOCK&& SYSFS&& X86
> select ZSMALLOC
> select LZO_COMPRESS
> select LZO_DECOMPRESS
> diff --git a/drivers/staging/zsmalloc/Kconfig b/drivers/staging/zsmalloc/Kconfig
> index 3e7a8d4..8e2c6a0 100644
> --- a/drivers/staging/zsmalloc/Kconfig
> +++ b/drivers/staging/zsmalloc/Kconfig
> @@ -1,6 +1,9 @@
> config ZSMALLOC
> tristate "Memory allocator for compressed pages"
> - depends on SPARSEMEM
> + # X86 dependency is because of the use of __flush_tlb_one and set_pte
> + # in zsmalloc-main.c.
> + # TODO: convert these to portable functions
> + depends on SPARSEMEM&& X86
> default n
> help
> zsmalloc is a slab-based memory allocator designed to store
> diff --git a/drivers/staging/zsmalloc/zsmalloc-main.c b/drivers/staging/zsmalloc/zsmalloc-main.c
> index 189fb42..455fc2f 100644
> --- a/drivers/staging/zsmalloc/zsmalloc-main.c
> +++ b/drivers/staging/zsmalloc/zsmalloc-main.c
> @@ -26,6 +26,7 @@
> #include<asm/pgtable.h>
> #include<linux/cpumask.h>
> #include<linux/cpu.h>
> +#include<linux/vmalloc.h>
>
> #include "zsmalloc.h"
> #include "zsmalloc_int.h"

2012-02-14 11:40:01

by Marc Dietrich

[permalink] [raw]
Subject: Re: [PATCH] staging: fix powerpc linux-next break on zsmalloc

Am 14.02.2012 12:22, schrieb Marc Dietrich:
> Am 13.02.2012 15:47, schrieb Seth Jennings:
>> linux/vmalloc.h added to zsmalloc-main.c to resolve implicit
>> declaration errors.
>>
>> X86 dependency added to zsmalloc and dependent drivers zcache and zram.
>>
>> This X86 only requirement is not ideal. Working to find portable
>> functions for __flush_tlb_one and set_pte.
>
> sorry, zcache/zram works fine one ARM here. Why not depend on !POWERPC?

ups, sorry again, I tested an older version only. flush_tlb_one and
set_pte is only used with the new allocator as it seems.

> Marc
>
>> Signed-off-by: Seth Jennings<[email protected]>
>> ---
>> drivers/staging/zcache/Kconfig | 4 +++-
>> drivers/staging/zram/Kconfig | 4 +++-
>> drivers/staging/zsmalloc/Kconfig | 5 ++++-
>> drivers/staging/zsmalloc/zsmalloc-main.c | 1 +
>> 4 files changed, 11 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/staging/zcache/Kconfig b/drivers/staging/zcache/Kconfig
>> index 94e48aa..5a36fcf 100644
>> --- a/drivers/staging/zcache/Kconfig
>> +++ b/drivers/staging/zcache/Kconfig
>> @@ -1,6 +1,8 @@
>> config ZCACHE
>> tristate "Dynamic compression of swap pages and clean pagecache pages"
>> - depends on (CLEANCACHE || FRONTSWAP)&& CRYPTO
>> + # X86 dependency is because zsmalloc uses non-portable pte/tlb
>> + # functions
>> + depends on (CLEANCACHE || FRONTSWAP)&& CRYPTO&& X86
>> select ZSMALLOC
>> select CRYPTO_LZO
>> default n
>> diff --git a/drivers/staging/zram/Kconfig b/drivers/staging/zram/Kconfig
>> index ee23a86..9d11a4c 100644
>> --- a/drivers/staging/zram/Kconfig
>> +++ b/drivers/staging/zram/Kconfig
>> @@ -1,6 +1,8 @@
>> config ZRAM
>> tristate "Compressed RAM block device support"
>> - depends on BLOCK&& SYSFS
>> + # X86 dependency is because zsmalloc uses non-portable pte/tlb
>> + # functions
>> + depends on BLOCK&& SYSFS&& X86
>> select ZSMALLOC
>> select LZO_COMPRESS
>> select LZO_DECOMPRESS
>> diff --git a/drivers/staging/zsmalloc/Kconfig b/drivers/staging/zsmalloc/Kconfig
>> index 3e7a8d4..8e2c6a0 100644
>> --- a/drivers/staging/zsmalloc/Kconfig
>> +++ b/drivers/staging/zsmalloc/Kconfig
>> @@ -1,6 +1,9 @@
>> config ZSMALLOC
>> tristate "Memory allocator for compressed pages"
>> - depends on SPARSEMEM
>> + # X86 dependency is because of the use of __flush_tlb_one and set_pte
>> + # in zsmalloc-main.c.
>> + # TODO: convert these to portable functions
>> + depends on SPARSEMEM&& X86
>> default n
>> help
>> zsmalloc is a slab-based memory allocator designed to store
>> diff --git a/drivers/staging/zsmalloc/zsmalloc-main.c b/drivers/staging/zsmalloc/zsmalloc-main.c
>> index 189fb42..455fc2f 100644
>> --- a/drivers/staging/zsmalloc/zsmalloc-main.c
>> +++ b/drivers/staging/zsmalloc/zsmalloc-main.c
>> @@ -26,6 +26,7 @@
>> #include<asm/pgtable.h>
>> #include<linux/cpumask.h>
>> #include<linux/cpu.h>
>> +#include<linux/vmalloc.h>
>>
>> #include "zsmalloc.h"
>> #include "zsmalloc_int.h"
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/

2012-02-14 14:26:13

by Seth Jennings

[permalink] [raw]
Subject: Re: [PATCH] staging: fix powerpc linux-next break on zsmalloc

On 02/14/2012 05:39 AM, Marc Dietrich wrote:
> Am 14.02.2012 12:22, schrieb Marc Dietrich:
>> Am 13.02.2012 15:47, schrieb Seth Jennings:
>>> linux/vmalloc.h added to zsmalloc-main.c to resolve implicit
>>> declaration errors.
>>>
>>> X86 dependency added to zsmalloc and dependent drivers zcache and zram.
>>>
>>> This X86 only requirement is not ideal. Working to find portable
>>> functions for __flush_tlb_one and set_pte.
>>
>> sorry, zcache/zram works fine one ARM here. Why not depend on !POWERPC?
>
> ups, sorry again, I tested an older version only. flush_tlb_one and
> set_pte is only used with the new allocator as it seems.

Hey Marc,

I haven't forgotten about you. I know that zcache (and therefore) zsmalloc
must work on ARM to be viable since there are known ARM users. When we have
a solution, I'll be contacting you to test it on ARM :)

--
Seth

2012-02-14 14:36:42

by Seth Jennings

[permalink] [raw]
Subject: Re: [PATCH] staging: fix powerpc linux-next break on zsmalloc

On 02/14/2012 05:39 AM, Marc Dietrich wrote:
> Am 14.02.2012 12:22, schrieb Marc Dietrich:
>> Am 13.02.2012 15:47, schrieb Seth Jennings:
>>> linux/vmalloc.h added to zsmalloc-main.c to resolve implicit
>>> declaration errors.
>>>
>>> X86 dependency added to zsmalloc and dependent drivers zcache and zram.
>>>
>>> This X86 only requirement is not ideal. Working to find portable
>>> functions for __flush_tlb_one and set_pte.
>>
>> sorry, zcache/zram works fine one ARM here. Why not depend on !POWERPC?
>
> ups, sorry again, I tested an older version only. flush_tlb_one and
> set_pte is only used with the new allocator as it seems.

It would seem that the cpu-local tlb page flushing function for ARM
is local_flush_tlb_kernel_page(), by look at the kmap_atomic() code
in arch/arm/mm/highmem.c.

So each arch is using a slightly different approach here.

A simple #define per-arch could make a it a common call. I think
I'm going to code it up and see how it goes.

--
Seth

2012-02-14 16:21:41

by Marc Dietrich

[permalink] [raw]
Subject: Re: [PATCH] staging: fix powerpc linux-next break on zsmalloc

Hi Seth,

On Tuesday 14 February 2012 08:35:13 Seth Jennings wrote:
> On 02/14/2012 05:39 AM, Marc Dietrich wrote:
> > Am 14.02.2012 12:22, schrieb Marc Dietrich:
> >> Am 13.02.2012 15:47, schrieb Seth Jennings:
> >>> linux/vmalloc.h added to zsmalloc-main.c to resolve implicit
> >>> declaration errors.
> >>>
> >>> X86 dependency added to zsmalloc and dependent drivers zcache and
> >>> zram.
> >>>
> >>> This X86 only requirement is not ideal. Working to find portable
> >>> functions for __flush_tlb_one and set_pte.
> >>
> >> sorry, zcache/zram works fine one ARM here. Why not depend on
> >> !POWERPC?
> >
> > ups, sorry again, I tested an older version only. flush_tlb_one and
> > set_pte is only used with the new allocator as it seems.
>
> It would seem that the cpu-local tlb page flushing function for ARM
> is local_flush_tlb_kernel_page(), by look at the kmap_atomic() code
> in arch/arm/mm/highmem.c.
>
> So each arch is using a slightly different approach here.
>
> A simple #define per-arch could make a it a common call. I think
> I'm going to code it up and see how it goes.

... and I'm happy to test it ;-)

Thanks

Marc