Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp2312434ybl; Thu, 15 Aug 2019 09:47:45 -0700 (PDT) X-Google-Smtp-Source: APXvYqzaXeNH5QiACMNdFYPOiDxbR782wI6bQU/rTiKix/VQhsQLmcHKEG/CB/yCzbvRclePL70H X-Received: by 2002:a63:e54f:: with SMTP id z15mr4224503pgj.4.1565887664811; Thu, 15 Aug 2019 09:47:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1565887664; cv=none; d=google.com; s=arc-20160816; b=h5FF3hPKqDPYkQlMNIUO482Jvl7I/XfdeatWgRABH+Jtabrmtxnz1p5/aTojvN1SPF Qx+VP5K+i3OSdrm2GpxDOUVH0uK8TRGlRmL9Q4poLbmxDkkxm0vAd19OzG17qjW5wL0j xFYlhUmu1ZHTVuXM7IWxJ1ZS+zKVorzl68VGB+VdyhPDPdqCecC6759BcZ+0INeVdUOi 44Cy6utmqC1A7o4fnPrCdkpbuwtYJy6z+Tv8MB7a1i4zHa9QjlYIDCg4U3ZTvOOzv4Fy u0NOY9guVSkpNsDY5WwG7XXFJkRCN+EA4HzJ8otqQMuQczcTPCBHU6Tsle4k/NG10n0O SI2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :message-id:in-reply-to:subject:cc:to:from:date; bh=gFx+BD4XIimLf1iqBt8LzUX3Fm2vRwTmCHK554Lr1QQ=; b=WTZ+rj8SHcFOM+dIiFvmsS64nu/rIs4Zko3Y1orzNV9NJBBOVZJzDqSRZrGWwTwpH5 unz9RNU8//5mMPOH4/rLJr5rkh6XrXroh/IQP4pQwluHq1wTubFQ2kS6VlxZd27+ELzj 96H89Epr3MsTZdQ9X39ayBL8ioZK8oZ8+3nbJj+Ff9nn05ImhuLUX5Fxa7FxL6+bvvpd w6WuDd1e6P7OE3OYJ7nE3rUn7If6NGBALOihJ9+vjwN8svicA7ghMieutpdJAMAVZaHS n6HuSSUP454RMZMggCP60yah6rwFUYPUDkFNOAjp6kZ98AiIzm0xOKULCspKFxYYEtqn l0MA== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id gn1si2281120plb.9.2019.08.15.09.47.28; Thu, 15 Aug 2019 09:47:44 -0700 (PDT) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730150AbfHOQpd (ORCPT + 99 others); Thu, 15 Aug 2019 12:45:33 -0400 Received: from Galois.linutronix.de ([193.142.43.55]:40209 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726099AbfHOQpd (ORCPT ); Thu, 15 Aug 2019 12:45:33 -0400 Received: from pd9ef1cb8.dip0.t-ipconnect.de ([217.239.28.184] helo=nanos.glx-home) by Galois.linutronix.de with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1hyIsS-0001TI-7S; Thu, 15 Aug 2019 18:45:28 +0200 Date: Thu, 15 Aug 2019 18:45:27 +0200 (CEST) From: Thomas Gleixner To: Ben Luo cc: alex.williamson@redhat.com, linux-kernel@vger.kernel.org, tao.ma@linux.alibaba.com, gerry@linux.alibaba.com, nanhai.zou@linux.alibaba.com, linyunsheng@huawei.com Subject: Re: [PATCH v3 3/3] vfio_pci: make use of update_irq_devid and optimize irq ops In-Reply-To: Message-ID: References: User-Agent: Alpine 2.21 (DEB 202 2017-01-01) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Linutronix-Spam-Score: -1.0 X-Linutronix-Spam-Level: - X-Linutronix-Spam-Status: No , -1.0 points, 5.0 required, ALL_TRUSTED=-1,SHORTCIRCUIT=-0.0001 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 15 Aug 2019, Ben Luo wrote: > if (vdev->ctx[vector].trigger) { > - free_irq(irq, vdev->ctx[vector].trigger); > - irq_bypass_unregister_producer(&vdev->ctx[vector].producer); > - kfree(vdev->ctx[vector].name); > - eventfd_ctx_put(vdev->ctx[vector].trigger); > - vdev->ctx[vector].trigger = NULL; > + if (vdev->ctx[vector].trigger == trigger) { > + irq_bypass_unregister_producer(&vdev->ctx[vector].producer); What's the point of unregistering the producer, just to register it again below? > + } else if (trigger) { > + ret = update_irq_devid(irq, > + vdev->ctx[vector].trigger, trigger); > + if (unlikely(ret)) { > + dev_info(&pdev->dev, > + "update_irq_devid %d (token %p) fails: %d\n", s/fails/failed/ > + irq, vdev->ctx[vector].trigger, ret); > + eventfd_ctx_put(trigger); > + return ret; > + } This lacks any form of comment why this is correct. dev_id is updated and the producer with the old token is still registered. > + irq_bypass_unregister_producer(&vdev->ctx[vector].producer); Now it's unregistered. > + eventfd_ctx_put(vdev->ctx[vector].trigger); > + vdev->ctx[vector].producer.token = trigger; The token is updated and then it's newly registered below. > + vdev->ctx[vector].trigger = trigger; > - vdev->ctx[vector].producer.token = trigger; > - vdev->ctx[vector].producer.irq = irq; > + /* always update irte for posted mode */ > ret = irq_bypass_register_producer(&vdev->ctx[vector].producer); > if (unlikely(ret)) > dev_info(&pdev->dev, > "irq bypass producer (token %p) registration fails: %d\n", > vdev->ctx[vector].producer.token, ret); I know this code already existed, but again this looks inconsistent. If the registration fails then a subsequent update will try to unregister a not registered producer. Does not make any sense to me. Thanks, tglx