From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH v3] KVM: VMX: Execute WBINVD to keep data consistency with assigned devices Date: Mon, 28 Jun 2010 10:08:56 +0300 Message-ID: <4C284A88.9000303@redhat.com> References: <1277696187-3571-1-git-send-email-sheng@linux.intel.com> <201006281442.35437.sheng@linux.intel.com> <4C2847A6.3040500@redhat.com> <201006281456.05750.sheng@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Jan Kiszka , Marcelo Tosatti , Joerg Roedel , kvm@vger.kernel.org, "Yaozu (Eddie) Dong" To: Sheng Yang Return-path: Received: from mx1.redhat.com ([209.132.183.28]:3835 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753773Ab0F1HJF (ORCPT ); Mon, 28 Jun 2010 03:09:05 -0400 In-Reply-To: <201006281456.05750.sheng@linux.intel.com> Sender: kvm-owner@vger.kernel.org List-ID: On 06/28/2010 09:56 AM, Sheng Yang wrote: > On Monday 28 June 2010 14:56:38 Avi Kivity wrote: > >> On 06/28/2010 09:42 AM, Sheng Yang wrote: >> >>>>> +static void wbinvd_ipi(void *garbage) >>>>> +{ >>>>> + wbinvd(); >>>>> +} >>>>> >>>> Like Jan mentioned, this is quite heavy. What about a clflush() loop >>>> instead? That may take more time, but at least it's preemptible. Of >>>> course, it isn't preemptible in an IPI. >>>> >>> I think this kind of behavior happened rarely, and most recent processor >>> should have WBINVD exit which means it's an IPI... So I think it's maybe >>> acceptable here. >>> >> Several milliseconds of non-responsiveness may not be acceptable for >> some applications. So I think queue_work_on() and a clflush loop is >> better than an IPI and wbinvd. >> > OK... Would update it in the next version. > > Hm, the manual says (regarding clflush): > Invalidates the cache line that contains the linear address specified > with the source > operand from all levels of the processor cache hierarchy (data and > instruction). The > invalidation is broadcast throughout the cache coherence domain. If, > at any level of > the cache hierarchy, the line is inconsistent with memory (dirty) it > is written to > memory before invalidation. So I don't think you need to queue_work_on(), instead you can work in vcpu thread context. But better check with someone that really knows. -- I have a truly marvellous patch that fixes the bug which this signature is too narrow to contain.