From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1BD1FC10F11 for ; Wed, 24 Apr 2019 18:53:55 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id DAF1A208E4 for ; Wed, 24 Apr 2019 18:53:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727504AbfDXSxx (ORCPT ); Wed, 24 Apr 2019 14:53:53 -0400 Received: from shards.monkeyblade.net ([23.128.96.9]:32986 "EHLO shards.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726419AbfDXSxx (ORCPT ); Wed, 24 Apr 2019 14:53:53 -0400 Received: from localhost (unknown [IPv6:2601:601:9f80:35cd::d71]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) (Authenticated sender: davem-davemloft) by shards.monkeyblade.net (Postfix) with ESMTPSA id DF9D2148855A4; Wed, 24 Apr 2019 11:53:52 -0700 (PDT) Date: Wed, 24 Apr 2019 11:53:52 -0700 (PDT) Message-Id: <20190424.115352.862921093841832872.davem@davemloft.net> To: vladbu@mellanox.com Cc: netdev@vger.kernel.org, jhs@mojatatu.com, xiyou.wangcong@gmail.com, jiri@resnulli.us, jakub.kicinski@netronome.com Subject: Re: [PATCH net-next v2] net: sched: flower: refactor reoffload for concurrent access From: David Miller In-Reply-To: <20190424065331.31046-1-vladbu@mellanox.com> References: <20190424065331.31046-1-vladbu@mellanox.com> X-Mailer: Mew version 6.8 on Emacs 26.1 Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.5.12 (shards.monkeyblade.net [149.20.54.216]); Wed, 24 Apr 2019 11:53:53 -0700 (PDT) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Vlad Buslov Date: Wed, 24 Apr 2019 09:53:31 +0300 > Recent changes that introduced unlocked flower did not properly account for > case when reoffload is initiated concurrently with filter updates. To fix > the issue, extend flower with 'hw_filters' list that is used to store > filters that don't have 'skip_hw' flag set. Filter is added to the list > when it is inserted to hardware and only removed from it after being > unoffloaded from all drivers that parent block is attached to. This ensures > that concurrent reoffload can still access filter that is being deleted and > prevents race condition when driver callback can be removed when filter is > no longer accessible trough idr, but is still present in hardware. > > Refactor fl_change() to respect new filter reference counter and to release > filter reference with __fl_put() in case of error, instead of directly > deallocating filter memory. This allows for concurrent access to filter > from fl_reoffload() and protects it with reference counting. Refactor > fl_reoffload() to iterate over hw_filters list instead of idr. Implement > fl_get_next_hw_filter() helper function that is used to iterate over > hw_filters list with reference counting and skips filters that are being > concurrently deleted. > > Fixes: 92149190067d ("net: sched: flower: set unlocked flag for flower proto ops") > Signed-off-by: Vlad Buslov Applied, thank you.