From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752573AbcAFA41 (ORCPT ); Tue, 5 Jan 2016 19:56:27 -0500 Received: from szxga03-in.huawei.com ([119.145.14.66]:55143 "EHLO szxga03-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752506AbcAFA4Y (ORCPT ); Tue, 5 Jan 2016 19:56:24 -0500 Subject: Re: [PATCH] net: hns: avoid uninitialized variable warning: To: Arnd Bergmann , "David S. Miller" References: <6649249.INrAY8KJG0@wuerfel> CC: , , , , , , From: Yisen Zhuang Message-ID: <568C6621.5090500@huawei.com> Date: Wed, 6 Jan 2016 08:56:01 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0 MIME-Version: 1.0 In-Reply-To: <6649249.INrAY8KJG0@wuerfel> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Originating-IP: [10.74.157.38] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A020202.568C662F.0135,ss=1,re=0.000,recu=0.000,reip=0.000,cl=1,cld=1,fgs=0, ip=0.0.0.0, so=2013-05-26 15:14:31, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: ac520ca4de34679633afbb867b305c49 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 在 2016/1/2 6:27, Arnd Bergmann 写道: > gcc fails to see that the use of the 'last_offset' variable > in hns_nic_reuse_page() is used correctly and issues a bogus > warning: > > drivers/net/ethernet/hisilicon/hns/hns_enet.c: In function 'hns_nic_reuse_page': > drivers/net/ethernet/hisilicon/hns/hns_enet.c:541:6: warning: 'last_offset' may be used uninitialized in this function [-Wmaybe-uninitialized] > > This simplifies the function to make it more obvious what is > going on to both readers and compilers, which makes the warning > go away. > Hi Arnd, This patch is fine to me. Many thanks, Yisen > Signed-off-by: Arnd Bergmann > --- > Compile-tested only, and complex enough that this requires a proper > review and testing before it gets apply. Please have a look at this. > > diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c > index 5a81dafd725e..0e30846a24f8 100644 > --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c > +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c > @@ -499,50 +499,47 @@ static void hns_nic_reuse_page(struct sk_buff *skb, int i, > struct hnae_desc *desc; > int truesize, size; > int last_offset; > + bool twobufs; > + > + twobufs = ((PAGE_SIZE < 8192) && hnae_buf_size(ring) == HNS_BUFFER_SIZE_2048); > > desc = &ring->desc[ring->next_to_clean]; > size = le16_to_cpu(desc->rx.size); > > -#if (PAGE_SIZE < 8192) > - if (hnae_buf_size(ring) == HNS_BUFFER_SIZE_2048) { > + if (twobufs) { > truesize = hnae_buf_size(ring); > } else { > truesize = ALIGN(size, L1_CACHE_BYTES); > last_offset = hnae_page_size(ring) - hnae_buf_size(ring); > } > > -#else > - truesize = ALIGN(size, L1_CACHE_BYTES); > - last_offset = hnae_page_size(ring) - hnae_buf_size(ring); > -#endif > - > skb_add_rx_frag(skb, i, desc_cb->priv, desc_cb->page_offset + pull_len, > size - pull_len, truesize - pull_len); > > /* avoid re-using remote pages,flag default unreuse */ > - if (likely(page_to_nid(desc_cb->priv) == numa_node_id())) { > -#if (PAGE_SIZE < 8192) > - if (hnae_buf_size(ring) == HNS_BUFFER_SIZE_2048) { > - /* if we are only owner of page we can reuse it */ > - if (likely(page_count(desc_cb->priv) == 1)) { > - /* flip page offset to other buffer */ > - desc_cb->page_offset ^= truesize; > - > - desc_cb->reuse_flag = 1; > - /* bump ref count on page before it is given*/ > - get_page(desc_cb->priv); > - } > - return; > - } > -#endif > - /* move offset up to the next cache line */ > - desc_cb->page_offset += truesize; > + if (unlikely(page_to_nid(desc_cb->priv) != numa_node_id())) > + return; > + > + if (twobufs) { > + /* if we are only owner of page we can reuse it */ > + if (likely(page_count(desc_cb->priv) == 1)) { > + /* flip page offset to other buffer */ > + desc_cb->page_offset ^= truesize; > > - if (desc_cb->page_offset <= last_offset) { > desc_cb->reuse_flag = 1; > /* bump ref count on page before it is given*/ > get_page(desc_cb->priv); > } > + return; > + } > + > + /* move offset up to the next cache line */ > + desc_cb->page_offset += truesize; > + > + if (desc_cb->page_offset <= last_offset) { > + desc_cb->reuse_flag = 1; > + /* bump ref count on page before it is given*/ > + get_page(desc_cb->priv); > } > } > > > > . >