From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oi0-f71.google.com (mail-oi0-f71.google.com [209.85.218.71]) by kanga.kvack.org (Postfix) with ESMTP id 9EDA56B0261 for ; Mon, 6 Jun 2016 16:12:12 -0400 (EDT) Received: by mail-oi0-f71.google.com with SMTP id w9so101608479oia.3 for ; Mon, 06 Jun 2016 13:12:12 -0700 (PDT) Received: from aserp1040.oracle.com (aserp1040.oracle.com. [141.146.126.69]) by mx.google.com with ESMTPS id wj5si1586019pab.33.2016.06.06.13.12.11 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 06 Jun 2016 13:12:12 -0700 (PDT) Date: Mon, 6 Jun 2016 23:11:51 +0300 From: Dan Carpenter Subject: re: zsmalloc: support compaction Message-ID: <20160606201151.GA26398@mwanda> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Sender: owner-linux-mm@kvack.org List-ID: To: minchan@kernel.org Cc: Sergey Senozhatsky , linux-mm@kvack.org Hello Minchan Kim, The patch 312fcae22703: "zsmalloc: support compaction" from Apr 15, 2015, leads to the following static checker warning: mm/zsmalloc.c:1521 obj_malloc() warn: 'OBJ_ALLOCATED_TAG' is a shifter (not for '|='). mm/zsmalloc.c 1510 static unsigned long obj_malloc(struct size_class *class, 1511 struct zspage *zspage, unsigned long handle) 1512 { 1513 int i, nr_page, offset; 1514 unsigned long obj; 1515 struct link_free *link; 1516 1517 struct page *m_page; 1518 unsigned long m_offset; 1519 void *vaddr; 1520 1521 handle |= OBJ_ALLOCATED_TAG; ^^^^^^^^^^^^^^^^^ It's weird to use the same define for a bit number 1522 obj = get_freeobj(zspage); 1523 1524 offset = obj * class->size; 1525 nr_page = offset >> PAGE_SHIFT; 1526 m_offset = offset & ~PAGE_MASK; 1527 m_page = get_first_page(zspage); 1528 1529 for (i = 0; i < nr_page; i++) 1530 m_page = get_next_page(m_page); 1531 1532 vaddr = kmap_atomic(m_page); 1533 link = (struct link_free *)vaddr + m_offset / sizeof(*link); 1534 set_freeobj(zspage, link->next >> OBJ_ALLOCATED_TAG); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ And also a bit shifter. TAG normally implies it is a bit and not a shift? 1535 if (likely(!PageHugeObject(m_page))) 1536 /* record handle in the header of allocated chunk */ 1537 link->handle = handle; 1538 else 1539 /* record handle to page->index */ 1540 zspage->first_page->index = handle; 1541 1542 kunmap_atomic(vaddr); 1543 mod_zspage_inuse(zspage, 1); 1544 zs_stat_inc(class, OBJ_USED, 1); 1545 1546 obj = location_to_obj(m_page, obj); 1547 1548 return obj; 1549 } regards, dan carpenter -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ig0-f199.google.com (mail-ig0-f199.google.com [209.85.213.199]) by kanga.kvack.org (Postfix) with ESMTP id 3919D6B0005 for ; Tue, 7 Jun 2016 00:50:46 -0400 (EDT) Received: by mail-ig0-f199.google.com with SMTP id lp2so135463611igb.3 for ; Mon, 06 Jun 2016 21:50:46 -0700 (PDT) Received: from lgeamrelo11.lge.com (LGEAMRELO11.lge.com. [156.147.23.51]) by mx.google.com with ESMTP id z127si16041995itc.9.2016.06.06.21.50.44 for ; Mon, 06 Jun 2016 21:50:45 -0700 (PDT) Date: Tue, 7 Jun 2016 13:51:46 +0900 From: Minchan Kim Subject: Re: zsmalloc: support compaction Message-ID: <20160607045146.GF26230@bbox> References: <20160606201151.GA26398@mwanda> MIME-Version: 1.0 In-Reply-To: <20160606201151.GA26398@mwanda> Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline Sender: owner-linux-mm@kvack.org List-ID: To: Dan Carpenter , Andrew Morton Cc: Sergey Senozhatsky , linux-mm@kvack.org On Mon, Jun 06, 2016 at 11:11:51PM +0300, Dan Carpenter wrote: > Hello Minchan Kim, > > The patch 312fcae22703: "zsmalloc: support compaction" from Apr 15, > 2015, leads to the following static checker warning: > > mm/zsmalloc.c:1521 obj_malloc() > warn: 'OBJ_ALLOCATED_TAG' is a shifter (not for '|='). > > mm/zsmalloc.c > 1510 static unsigned long obj_malloc(struct size_class *class, > 1511 struct zspage *zspage, unsigned long handle) > 1512 { > 1513 int i, nr_page, offset; > 1514 unsigned long obj; > 1515 struct link_free *link; > 1516 > 1517 struct page *m_page; > 1518 unsigned long m_offset; > 1519 void *vaddr; > 1520 > 1521 handle |= OBJ_ALLOCATED_TAG; > ^^^^^^^^^^^^^^^^^ > It's weird to use the same define for a bit number > > 1522 obj = get_freeobj(zspage); > 1523 > 1524 offset = obj * class->size; > 1525 nr_page = offset >> PAGE_SHIFT; > 1526 m_offset = offset & ~PAGE_MASK; > 1527 m_page = get_first_page(zspage); > 1528 > 1529 for (i = 0; i < nr_page; i++) > 1530 m_page = get_next_page(m_page); > 1531 > 1532 vaddr = kmap_atomic(m_page); > 1533 link = (struct link_free *)vaddr + m_offset / sizeof(*link); > 1534 set_freeobj(zspage, link->next >> OBJ_ALLOCATED_TAG); > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > And also a bit shifter. TAG normally implies it is a bit and not a > shift? Thanks for the report, Dan!