From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: kvm-37 problem w/ 64-bit division in lapic.c Date: Wed, 12 Sep 2007 12:56:12 +0300 Message-ID: <46E7B7BC.5090806@qumranet.com> References: <46E3D369.8000401@qumranet.com><20070909173640.6747418d@holly> <10EA09EFD8728347A513008B6B0DA77A02108583@pdsmsx411.ccr.corp.intel.com> <5f0e26840709100249y239692c2gcdd3938fc6b23b6c@mail.gmail.com><20070910182628.5fc7090f@holly> <46E79DCA.70101@qumranet.com> <10EA09EFD8728347A513008B6B0DA77A0210915A@pdsmsx411.ccr.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: Jindrich Makovicka , kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org To: "Dong, Eddie" Return-path: In-Reply-To: <10EA09EFD8728347A513008B6B0DA77A0210915A-wq7ZOvIWXbNpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org Errors-To: kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org List-Id: kvm.vger.kernel.org Dong, Eddie wrote: > kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org wrote: > >> Jindrich Makovicka wrote: >> >>> On Mon, 10 Sep 2007 11:49:02 +0200 >>> "Jindrich Makovicka" wrote: >>> >>> >>> >>>> On 9/10/07, Dong, Eddie wrote: >>>> >>>> >>>>> div64_32 is enough, does this function exist? >>>>> >>>>> >>>> afaik, __div64_32 is architecture specific, but do_div() could be >>>> actually used here. >>>> >>>> >>> This version should be faster. >>> >>> >>> >> [please don't post patches with extensions like ".diff2", which don't >> show in the mail reader] >> >> >>> - u32 counter_passed; >>> + u64 counter_passed; >>> ktime_t passed, now = apic->timer.dev.base->get_time(); >>> u32 tmcct = apic_get_reg(apic, APIC_TMICT); >>> >>> @@ -512,8 +512,8 @@ static u32 apic_get_tmcct(struct kvm_lapic >>> *apic) } else passed = ktime_sub(now, >>> apic->timer.last_update); >>> >>> - counter_passed = div64_64(ktime_to_ns(passed), >>> - (APIC_BUS_CYCLE_NS * >>> apic->timer.divide_count)); + counter_passed = >>> ktime_to_ns(passed); + do_div(counter_passed, >>> APIC_BUS_CYCLE_NS * apic->timer.divide_count); >>> tmcct -= counter_passed; >>> >> What if counter_passed overflows? Sure, that means kvm wasn't >> scheduled for 4 seconds, but it could happen. >> >> >> > It won't happen. see > passed = ktime_sub(now, apic->timer.last_update); > Ah, okay. I'll clean it up later. I'd like to proceed with the more important fixes first. -- error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/