From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=51720 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Prtiu-0001H1-7l for qemu-devel@nongnu.org; Tue, 22 Feb 2011 10:00:20 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Prtit-0003Ry-5y for qemu-devel@nongnu.org; Tue, 22 Feb 2011 10:00:20 -0500 Received: from mail-vw0-f45.google.com ([209.85.212.45]:58187) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Prtit-0003Rt-0d for qemu-devel@nongnu.org; Tue, 22 Feb 2011 10:00:19 -0500 Received: by vws19 with SMTP id 19so2840072vws.4 for ; Tue, 22 Feb 2011 07:00:17 -0800 (PST) Message-ID: <4D63CF82.8060006@codemonkey.ws> Date: Tue, 22 Feb 2011 09:00:18 -0600 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH 2/7] iohandlers: Introduce a new API References: <3d41a2ca603b8132e2496976e89fca09fc246683.1298369272.git.amit.shah@redhat.com> <4D63B9E2.5060201@redhat.com> In-Reply-To: <4D63B9E2.5060201@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: Amit Shah , qemu list , Gerd Hoffmann On 02/22/2011 07:28 AM, Avi Kivity wrote: > On 02/22/2011 12:18 PM, Amit Shah wrote: >> Introduce a new iohandler api that doesn't have multiple callbacks. >> Instead, a single callback and a mask of events that got set will be >> passed on to the handler. This will ease our transition to a poll() >> interface instead of the current select() that happens on the fds. >> >> >> + >> +/* iohandler masks */ >> +#define IOH_MASK_CAN_READ (1U<< 0) >> +#define IOH_MASK_READ (1U<< 1) >> +#define IOH_MASK_WRITE (1U<< 2) >> + >> +typedef int IOAllHandler(void *opaque, unsigned int mask); > > Strange name. > > Drop the opaque, instead put the IOHandler in there (or maybe the > CharDev?) and use container_of(). You know, I'm not there that this is automatically better. >> + >> +int assign_iohandler(int fd, IOAllHandler *handler, unsigned int mask, >> + void *opaque); >> +int remove_iohandler(int fd); >> +int update_fd_mask(int fd, unsigned int mask); >> +int get_fd_mask(int fd, unsigned int *mask); >> + > > iohandler_init(IOHandler *ioh, int fd, IOEventHandler *handler, > unsigned mask) > iohandler_del(IOHandler *ioh) > iohandler_set_event_mask(IOHandler *ioh, unsigned mask) > iohandler_event_mask(IOHandler *ioh) > > No opaques, use an object as a key so you don't have to search for it. I don't think there should be a setter/getter for the event mask. Just delete the handler and re-add it. Why is there an IOHandler and an IOEventHandler argument for init? Regards, Anthony Liguori