Received: by 10.223.176.46 with SMTP id f43csp17232wra; Thu, 18 Jan 2018 13:13:17 -0800 (PST) X-Google-Smtp-Source: ACJfBovDuccmUV+y/wfx0fxh+H+BcibCa2ZrkL+NWmMo6q9WGPZpBRerh7B0AmdGf0k3dOyAL2qJ X-Received: by 10.101.77.207 with SMTP id q15mr13135647pgt.163.1516309997419; Thu, 18 Jan 2018 13:13:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516309997; cv=none; d=google.com; s=arc-20160816; b=JKOAd4D6F4K1N5OBP5uWr7NdxmpJqXRwZT9pqj8ZTnH/SDQuvPts7hjuOeCahDIQqu oJIVx3vnGQpFk+CnpZVCRkJrp86eCpd1RNpnm010pmWpbZ2utWTtaWtIz5om2wr0avmF 6Iuvf+uyDGejdxE8ASna+vCfvn/G10IfNVMZbYfg2Oqwr7kVRIUTN9MMQGcV/jU1Xo+g O5RnsZg+CtOnFrgGY2POaxXFechIiC/5P1fQrzkfo9+PsV7g0TIRPFUfMF2kj2NDD2HH 0gxlYNh+mTvxbaAwbSWmshgthOWS+xME9eENaOZz3sn4q2HjrcUTZ2pg1uInPfC5pWYl o9RQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:date:message-id:in-reply-to :references:from:subject:cc:to:arc-authentication-results; bh=1Jj/Sz1lgpZm5R3ZG+jJCEIIALN7MrKK5/E18zGgmmE=; b=GHzHF0FG+Du8xtQVdLGzEEC7I2GksnqABj7uSXWAMAxYb/xKV0+5GREM5ZlhAVBvr4 x0EbbjqaY5puaHW9zWDu7SetWf/ciIQQgGIMn6f8wdzAV0yTNmUw54CGzzN5l4eJnJts JIzpAFXRLBdzuVs+74fFkvLMfeQnuwet3vf2FVQPpIQSkBZGn9yuix0qjszD/Lx6BmNj N7yUdq0+2VIxCmNfb33Xxvqg8Qbb1auFm0Kg4OzB6L4/0z3ZRKeddk40si7w68tk3eVu XZ0mOftfa54+KnXfdURY1DlKx+0GDgSklSLLwAOuAIN7V8/4yCeues9Fihh19A3I4TWJ ZYmw== 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 o20-v6si208354pli.757.2018.01.18.13.13.03; Thu, 18 Jan 2018 13:13:17 -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; 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 S1753908AbeARVLx (ORCPT + 99 others); Thu, 18 Jan 2018 16:11:53 -0500 Received: from www262.sakura.ne.jp ([202.181.97.72]:24073 "EHLO www262.sakura.ne.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754247AbeARVLg (ORCPT ); Thu, 18 Jan 2018 16:11:36 -0500 Received: from fsav105.sakura.ne.jp (fsav105.sakura.ne.jp [27.133.134.232]) by www262.sakura.ne.jp (8.14.5/8.14.5) with ESMTP id w0ILBZoT021510; Fri, 19 Jan 2018 06:11:35 +0900 (JST) (envelope-from penguin-kernel@I-love.SAKURA.ne.jp) Received: from www262.sakura.ne.jp (202.181.97.72) by fsav105.sakura.ne.jp (F-Secure/fsigk_smtp/530/fsav105.sakura.ne.jp); Fri, 19 Jan 2018 06:11:35 +0900 (JST) X-Virus-Status: clean(F-Secure/fsigk_smtp/530/fsav105.sakura.ne.jp) Received: from AQUA (softbank126074156036.bbtec.net [126.74.156.36]) (authenticated bits=0) by www262.sakura.ne.jp (8.14.5/8.14.5) with ESMTP id w0ILBZTE021503; Fri, 19 Jan 2018 06:11:35 +0900 (JST) (envelope-from penguin-kernel@I-love.SAKURA.ne.jp) To: mst@redhat.com Cc: wei.w.wang@intel.com, virtio-dev@lists.oasis-open.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, kvm@vger.kernel.org, linux-mm@kvack.org, mhocko@kernel.org, akpm@linux-foundation.org, pbonzini@redhat.com, liliang.opensource@gmail.com, yang.zhang.wz@gmail.com, quan.xu0@gmail.com, nilal@redhat.com, riel@redhat.com Subject: Re: [PATCH v22 2/3] virtio-balloon: VIRTIO_BALLOON_F_FREE_PAGE_VQ From: Tetsuo Handa References: <1516165812-3995-1-git-send-email-wei.w.wang@intel.com> <1516165812-3995-3-git-send-email-wei.w.wang@intel.com> <20180117180337-mutt-send-email-mst@kernel.org> <2bb0e3d9-1679-9ad3-b402-f0781f6cf094@I-love.SAKURA.ne.jp> <20180118210239-mutt-send-email-mst@kernel.org> In-Reply-To: <20180118210239-mutt-send-email-mst@kernel.org> Message-Id: <201801190611.HGI18722.FVtOMQLSHFFOOJ@I-love.SAKURA.ne.jp> X-Mailer: Winbiff [Version 2.51 PL2] X-Accept-Language: ja,en,zh Date: Fri, 19 Jan 2018 06:11:31 +0900 Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Michael S. Tsirkin wrote: > On Thu, Jan 18, 2018 at 10:30:18PM +0900, Tetsuo Handa wrote: > > On 2018/01/18 1:44, Michael S. Tsirkin wrote: > > >> +static void add_one_sg(struct virtqueue *vq, unsigned long pfn, uint32_t len) > > >> +{ > > >> + struct scatterlist sg; > > >> + unsigned int unused; > > >> + int err; > > >> + > > >> + sg_init_table(&sg, 1); > > >> + sg_set_page(&sg, pfn_to_page(pfn), len, 0); > > >> + > > >> + /* Detach all the used buffers from the vq */ > > >> + while (virtqueue_get_buf(vq, &unused)) > > >> + ; > > >> + > > >> + /* > > >> + * Since this is an optimization feature, losing a couple of free > > >> + * pages to report isn't important. > > >> We simply resturn > > > > > > return > > > > > >> without adding > > >> + * the page if the vq is full. We are adding one entry each time, > > >> + * which essentially results in no memory allocation, so the > > >> + * GFP_KERNEL flag below can be ignored. > > >> + */ > > >> + if (vq->num_free) { > > >> + err = virtqueue_add_inbuf(vq, &sg, 1, vq, GFP_KERNEL); > > > > > > Should we kick here? At least when ring is close to > > > being full. Kick at half way full? > > > Otherwise it's unlikely ring will > > > ever be cleaned until we finish the scan. > > > > Since this add_one_sg() is called between spin_lock_irqsave(&zone->lock, flags) > > and spin_unlock_irqrestore(&zone->lock, flags), it is not permitted to sleep. > > kick takes a while sometimes but it doesn't sleep. I don't know about virtio. But the purpose of kicking here is to wait for pending data to be flushed in order to increase vq->num_free, isn't it? Then, doesn't waiting for pending data to be flushed involve sleeping? If yes, we can wait for completion of kick but we can't wait for completion of flush. Is pending data flushed without sleep? > > > And walk_free_mem_block() is not ready to handle resume. > > > > By the way, specifying GFP_KERNEL here is confusing even though it is never used. > > walk_free_mem_block() says: > > > > * The callback itself must not sleep or perform any operations which would > > * require any memory allocations directly (not even GFP_NOWAIT/GFP_ATOMIC) > > * or via any lock dependency. > > Yea, GFP_ATOMIC would do just as well. But I think any allocation > on this path would be problematic. > > How about a flag to make all allocations fail? > > E.g. > > #define GFP_FORBIDDEN (___GFP_DMA | ___GFP_HIGHMEM) > > Still this is not a blocker, we can worry about this later. > > > > > > > >> + /* > > >> + * This is expected to never fail, because there is always an > > >> + * entry available on the vq. > > >> + */ > > >> + BUG_ON(err); > > >> + } > > >> +} >