From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=42369 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PmYJf-0000T6-FZ for qemu-devel@nongnu.org; Mon, 07 Feb 2011 16:08:14 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PmWnN-0000Eg-Ve for qemu-devel@nongnu.org; Mon, 07 Feb 2011 14:30:46 -0500 Received: from mail-ww0-f53.google.com ([74.125.82.53]:47795) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PmWnN-0000EX-RP for qemu-devel@nongnu.org; Mon, 07 Feb 2011 14:30:45 -0500 Received: by wwi18 with SMTP id 18so4835484wwi.10 for ; Mon, 07 Feb 2011 11:30:44 -0800 (PST) Message-ID: <4D504860.3090407@codemonkey.ws> Date: Mon, 07 Feb 2011 13:30:40 -0600 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] Re: [RFC: 0/2] patch for QEMU HPET periodic timer emulation to alleviate time drift References: <480481933.225059.1296734409954.JavaMail.root@zmail07.collab.prod.int.phx2.redhat.com> <1375835067.226263.1296740625327.JavaMail.root@zmail07.collab.prod.int.phx2.redhat.com> <4D4AC99A.2070803@siemens.com> <4D4B0B07.2040904@codemonkey.ws> <4D4B1CF8.8040800@web.de> <4D4B5F23.7040801@codemonkey.ws> <4D4BBF55.9060000@web.de> <4D4FE6BF.5080502@redhat.com> <4D4FEF81.1040603@codemonkey.ws> <4D4FF02F.2030309@redhat.com> <4D4FF24A.7000004@codemonkey.ws> <4D4FFD3B.2030903@siemens.com> <4D5001A0.8020503@codemonkey.ws> <4D5004FC.80000@siemens.com> <4D5007B9.7060806@codemonkey.ws> <4D500872.3070506@siemens.com> <4D50092C.1080109@codemonkey.ws> <4D500C1A.1070506@redhat.com> <4D500D08.5020709@siemens.com> <4D500FC6.2080700@redhat.com> In-Reply-To: <4D500FC6.2080700@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Avi Kivity Cc: Jan Kiszka , Glauber Costa , qemu-devel , kvm , Ulrich Obergfell On 02/07/2011 09:29 AM, Avi Kivity wrote: > On 02/07/2011 05:17 PM, Jan Kiszka wrote: >> On 2011-02-07 16:13, Avi Kivity wrote: >> > On 02/07/2011 05:01 PM, Anthony Liguori wrote: >> >> >> >> typedef struct PeriodicTimer PeriodicTimer; >> >> >> >> /** >> >> * @accumulated_ticks: the number of unacknowledged ticks in total >> >> since the creation of the timer >> >> **/ >> > >> > Outdated comment even before the code is committed. Will be hard >> to beat. >> > >> >> typedef void (PeriodicTimerFunc)(void *opaque); >> > >> > s/void *opaque/PeriodicTimer *timer/ >> > >> > Down with opaques! >> >> What else? DeviceState? > > typedef void (PeriodicTimerFunc)(PeriodicTimer *timer); > > the callback then uses container_of() to get whatever its internal > data structure is from the embedded PeriodicTimer. For the purposes of this, I think passing an opaque is better because the signature stays the same as the existing timer callback. That makes conversion a bit friendlier. I think it's better to avoid introducing stylistic changes with new interfaces. I think they should be done separately. Regards, Anthony Liguori > >> >> >> >> PeriodicTimer *periodic_timer_new(PeriodicTimerFunc *cb, void >> *opaque); >> >> >> > >> > void periodic_timer_init(PeriodicTimer *timer, PeriodicTimerFunc >> *cb); >> > >> > It is better to embed than to reference. >> >> Likely, though this diverges from exiting QEMUTimer. > > That's the more modern style. Saves allocations and dereferences, and > is more type safe. >