Received: by 10.223.185.116 with SMTP id b49csp3836639wrg; Mon, 19 Feb 2018 06:50:44 -0800 (PST) X-Google-Smtp-Source: AH8x226tjmZ00hslZQnAAukP8i8JHSPM7olmy0Wb4CZaEFGYH0k244LqZZMcrkW+j4dRpeqmezCe X-Received: by 10.98.141.208 with SMTP id p77mr14746210pfk.5.1519051843849; Mon, 19 Feb 2018 06:50:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519051843; cv=none; d=google.com; s=arc-20160816; b=XvOaMdPHfWlqYGijjtnZxkDgMk5ecN6OPBw56NtiK1t5dqR0+pLHoBDROHYi6hUT2A hw+s/sD5yNfFS6mltNlQ939bNrmRxomvVMYLe31q2DROCWvyGnFaXXWXeK/1wvZxK3bn 4OyAyLVcy4hExHN77EtXGdq2rOsmkGdxoefsYmw0yUrtkYQ19NrmjEuagN3G5mcbxnBJ C3dS90jOyb1aDpRnfS7UbIaaSYnVlP+eCebbFWX5PdsTP9hRaKIrZnnYmTzuvmu9dy8h 1uB2gsYZrbm72QcgpJ9O57mKDzh38W6TfuF92F7nQju8ZSPhT9rydqxfEN6U/azRFA/2 KwdQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=Qy1zTE5MfIrqvJS2dgM4kpef0XZmVrSIbZZQ2IXwa3Q=; b=AvGqAygJ4hWNRPL7swf7RgOYcpLyv3y/upKPN5k32pd7G9lXXGcNqkwAn21Hfrc1WM 5CQGyNbctQufXmmqhX7gnLNSghXCBMbV5QxtPOpbqWIQ8KD7qx9mZ7PnW/MgRuETkMBF nqOfMKSHhde5Y8ACEr6v/g8VXyl9mAdvbRISai7IqYEc1XNh1bZuFudo/u2PBOruX1OY PmHA3K/XzzFM6PygoXWWc8ukmcSC8mjy+EWa6B3/JYsGqnKj56K+uwRAHgU83ciywGuW +/Mze+aoHjiHbtfBvHd7Ly/Q0373JvZwJJIaKgj1z/l7iOQQkXqqE9lml9R3MiR6/k70 2RNw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=cGlAsNyb; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w10si2173247pgc.282.2018.02.19.06.50.28; Mon, 19 Feb 2018 06:50:43 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=cGlAsNyb; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753053AbeBSOtY (ORCPT + 99 others); Mon, 19 Feb 2018 09:49:24 -0500 Received: from mail-qk0-f194.google.com ([209.85.220.194]:33346 "EHLO mail-qk0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753052AbeBSOtV (ORCPT ); Mon, 19 Feb 2018 09:49:21 -0500 Received: by mail-qk0-f194.google.com with SMTP id f25so12519362qkm.0 for ; Mon, 19 Feb 2018 06:49:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=Qy1zTE5MfIrqvJS2dgM4kpef0XZmVrSIbZZQ2IXwa3Q=; b=cGlAsNybmz6g/y2+ykActoOX7iwkeO5NedTPXKljfjKV/kYW6fBXrbzg0NaE4i2M4D NZjvtDsxRv9vCutd1SIn2t9CjZJu2S/anueidzIlRLIBFuUAbSNy/bNrRuMwjZWwuD8u GBdE3nMa4XhhnlSGN3MH36dARGYnkb1bfFAxLC40LU4gZVfHMvMi1H5uOs27Na3KcE1v RwQvPe25HmgZIBJhqLBjq25JrH5vIzIXl9SM9lgzGWIMhZlUi2JYiwpLMnGMzIfAG9Na WegyA7tEkBlgDyiJMwPIFj3eFfSpS5UotuYI3RNEwqN/vkl4GDV+2rLhbNFcWzwJsycA O63Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=Qy1zTE5MfIrqvJS2dgM4kpef0XZmVrSIbZZQ2IXwa3Q=; b=dwgHfiVO1FbEam7sIG/sFfWnSYU+LtZfb5CbN+bBlk8Axmkwv7zlENfw+kxChPzxmw qJkS9oJrnSXLvnmKfWbSpB/CjuURPqkPCrHEp/pu3yHcUK9ten+xFzay6qhZBUY1CVNX RcdeTvPeChMj7dItEQZY4I8eCivgp+hm4/DSL5hMmR8HmqzU8YhRNQcETd0hJbzmma8U Hi0IcqOcPkhHvtWSW6zzxSj6d5s4APSHtF5al8p0/7ijSCCE1soA1HuQB5SFknigxz5L W5D5/t3rqKtWR5+Kr/xbAqYBiGxqGT/8QzdVCdFbuw2nmy8a6Wo41AiODCe1FxhXQER3 Znwg== X-Gm-Message-State: APf1xPBi8/+Ccl38JMl4/WCdxtKjh2OkIbgD0mkXqUENur+WPXr/G3dz bqQkxWygZ149iyepQJ8Mw+Z/N/v0i9cUumX6DwaJD2Cg X-Received: by 10.55.110.193 with SMTP id j184mr24593407qkc.70.1519051760474; Mon, 19 Feb 2018 06:49:20 -0800 (PST) MIME-Version: 1.0 Received: by 10.12.195.80 with HTTP; Mon, 19 Feb 2018 06:49:19 -0800 (PST) In-Reply-To: <20180219140739.24383-1-khandual@linux.vnet.ibm.com> References: <20180219140739.24383-1-khandual@linux.vnet.ibm.com> From: Andy Shevchenko Date: Mon, 19 Feb 2018 16:49:19 +0200 Message-ID: Subject: Re: [PATCH V3] lib/scatterlist: Add SG_CHAIN and SG_LAST macros for LSB encodings To: Anshuman Khandual Cc: Linux Kernel Mailing List , Greg Kroah-Hartman , Bart Van Assche , Johannes Thumshirn , Jens Axboe , Chris Wilson , Tvrtko Ursulin Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Feb 19, 2018 at 4:07 PM, Anshuman Khandual wrote: > This replaces scatterlist->page_link LSB encodings with SG_CHAIN and > SG_LAST definitions without any functional change. While here also > add macro definitions SG_PAGE_BITS and SG_PAGE_MASK. > A nit below, in any case Reviewed-by: Andy Shevchenko > Signed-off-by: Anshuman Khandual > --- > Changes in V3: > - Changed SG_END as SG_LAST due to a build failure > - Added SG_PAGE_BITS and SG_PAGE_MASK as per Tvrtko > - Used BIT() macro as per Chris > > Changes in V2: > - Changed SG_EMARK as SG_END as per Johannes and Tvrtko > - Added 'UL' to the constants as per Bart > > include/linux/scatterlist.h | 26 ++++++++++++++++---------- > 1 file changed, 16 insertions(+), 10 deletions(-) > > diff --git a/include/linux/scatterlist.h b/include/linux/scatterlist.h > index 22b2131bcdcd..494b84c7f3c8 100644 > --- a/include/linux/scatterlist.h > +++ b/include/linux/scatterlist.h > @@ -66,15 +66,20 @@ struct sg_table { > > #define SG_MAGIC 0x87654321 > > +#define SG_CHAIN BIT(0) > +#define SG_LAST BIT(1) > +#define SG_PAGE_BITS (SG_CHAIN | SG_LAST) > +#define SG_PAGE_MASK (~SG_PAGE_BITS) > + > /* > * We overload the LSB of the page pointer to indicate whether it's > * a valid sg entry, or whether it points to the start of a new scatterlist. > * Those low bits are there for everyone! (thanks mason :-) > */ > -#define sg_is_chain(sg) ((sg)->page_link & 0x01) > -#define sg_is_last(sg) ((sg)->page_link & 0x02) > +#define sg_is_chain(sg) ((sg)->page_link & SG_CHAIN) > +#define sg_is_last(sg) ((sg)->page_link & SG_LAST) > #define sg_chain_ptr(sg) \ > - ((struct scatterlist *) ((sg)->page_link & ~0x03)) > + ((struct scatterlist *) ((sg)->page_link & SG_PAGE_MASK)) > > /** > * sg_assign_page - Assign a given page to an SG entry > @@ -88,13 +93,13 @@ struct sg_table { > **/ > static inline void sg_assign_page(struct scatterlist *sg, struct page *page) > { > - unsigned long page_link = sg->page_link & 0x3; > + unsigned long page_link = sg->page_link & SG_PAGE_BITS; > > /* > * In order for the low bit stealing approach to work, pages > * must be aligned at a 32-bit boundary as a minimum. > */ > - BUG_ON((unsigned long) page & 0x03); > + BUG_ON((unsigned long) page & SG_PAGE_BITS); > #ifdef CONFIG_DEBUG_SG > BUG_ON(sg->sg_magic != SG_MAGIC); > BUG_ON(sg_is_chain(sg)); > @@ -130,7 +135,7 @@ static inline struct page *sg_page(struct scatterlist *sg) > BUG_ON(sg->sg_magic != SG_MAGIC); > BUG_ON(sg_is_chain(sg)); > #endif > - return (struct page *)((sg)->page_link & ~0x3); > + return (struct page *)((sg)->page_link & SG_PAGE_MASK); > } > > /** > @@ -178,7 +183,8 @@ static inline void sg_chain(struct scatterlist *prv, unsigned int prv_nents, > * Set lowest bit to indicate a link pointer, and make sure to clear > * the termination bit if it happens to be set. > */ > - prv[prv_nents - 1].page_link = ((unsigned long) sgl | 0x01) & ~0x02; > + prv[prv_nents - 1].page_link = ((unsigned long) sgl | SG_CHAIN) > + & ~SG_LAST; If it's ~2-3 characters over 80, I would rather still keep on the same line. > } > > /** > @@ -198,8 +204,8 @@ static inline void sg_mark_end(struct scatterlist *sg) > /* > * Set termination bit, clear potential chain bit > */ > - sg->page_link |= 0x02; > - sg->page_link &= ~0x01; > + sg->page_link |= SG_LAST; > + sg->page_link &= ~SG_CHAIN; > } > > /** > @@ -215,7 +221,7 @@ static inline void sg_unmark_end(struct scatterlist *sg) > #ifdef CONFIG_DEBUG_SG > BUG_ON(sg->sg_magic != SG_MAGIC); > #endif > - sg->page_link &= ~0x02; > + sg->page_link &= ~SG_LAST; > } > > /** > -- > 2.11.0 > -- With Best Regards, Andy Shevchenko