On Wed, Nov 6, 2013 at 2:10 PM, Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx> wrote: > On Wed, Nov 06, 2013 at 01:09:59PM -0800, Nitin Gupta wrote: >> On Tue, Nov 5, 2013 at 5:56 PM, Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx> wrote: >> > On Tue, Nov 05, 2013 at 04:54:12PM -0800, Olav Haugan wrote: >> >> zsmalloc encodes a handle using the page pfn and an object >> >> index. On some hardware platforms the pfn could be 0 and this >> >> causes the encoded handle to be 0 which is interpreted as an >> >> allocation failure. >> > >> > What platforms specifically have this issue? >> > >> >> >> >> To prevent this false error we ensure that the encoded handle >> >> will not be 0 when allocation succeeds. >> >> >> >> Change-Id: Ifff930dcf254915b497aec5cb36f152a5e5365d6 >> > >> > What is this? What can anyone do with it? >> > >> >> Signed-off-by: Olav Haugan <ohaugan@xxxxxxxxxxxxxx> >> >> --- >> >> drivers/staging/zsmalloc/zsmalloc-main.c | 4 ++-- >> >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> >> >> diff --git a/drivers/staging/zsmalloc/zsmalloc-main.c b/drivers/staging/zsmalloc/zsmalloc-main.c >> >> index 523b937..0e32c0f 100644 >> >> --- a/drivers/staging/zsmalloc/zsmalloc-main.c >> >> +++ b/drivers/staging/zsmalloc/zsmalloc-main.c >> >> @@ -441,7 +441,7 @@ static void *obj_location_to_handle(struct page *page, unsigned long obj_idx) >> >> } >> >> >> >> handle = page_to_pfn(page) << OBJ_INDEX_BITS; >> >> - handle |= (obj_idx & OBJ_INDEX_MASK); >> >> + handle |= ((obj_idx + 1) & OBJ_INDEX_MASK); >> >> >> >> return (void *)handle; >> >> } >> >> @@ -451,7 +451,7 @@ static void obj_handle_to_location(unsigned long handle, struct page **page, >> >> unsigned long *obj_idx) >> >> { >> >> *page = pfn_to_page(handle >> OBJ_INDEX_BITS); >> >> - *obj_idx = handle & OBJ_INDEX_MASK; >> >> + *obj_idx = (handle & OBJ_INDEX_MASK) - 1; >> >> } >> > >> > I need someone who knows how to test this code to ack it before I can >> > take it... >> > >> > And I thought we were deleting zsmalloc anyway, why are you using this >> > code? Isn't it no longer needed anymore? >> > >> >> zsmalloc is used by zram. Other zstuff has switched to zbud since they >> need to do shrinking which is much easier to implement with simpler >> design of zbud. For zram, which is a block device, we don't do such >> active shrinking, so uses zsmalloc which provides much better density. > > Ok, so what's the plan of getting these other things out of staging? Other zstuff: zswap and zcache 1) zswap (along with zbud allocator, frontcache, cleancache) is already out of staging into mm/ (by Seth Jennings) 2) zcache seems to have been completely removed (not sure if Dan ever wants to reintroduce it) > I'm getting really tired of them hanging around in here for many years > now... > Minchan has tried many times to promote zram out of staging. This was his most recent attempt: https://lkml.org/lkml/2013/8/21/54 There he provided arguments for zram inclusion, how it can help in situations where zswap can't and why generalizing /dev/ramX would not be a great idea. So, cannot say why it wasn't picked up for inclusion at that time. > Should I just remove them if no one is working on getting them merged > "properly"? > Please refer the mail thread (link above) and see Minchan's justifications for zram. If they don't sound convincing enough then please remove zram+zsmalloc from staging. Nitin -- To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html