From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:35569) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R5dO8-0007S5-RM for qemu-devel@nongnu.org; Mon, 19 Sep 2011 08:55:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1R5dO4-00044s-3S for qemu-devel@nongnu.org; Mon, 19 Sep 2011 08:55:56 -0400 Received: from fmmailgate01.web.de ([217.72.192.221]:52232) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R5dO3-00044V-Ng for qemu-devel@nongnu.org; Mon, 19 Sep 2011 08:55:52 -0400 Message-ID: <4E773BD5.8020105@web.de> Date: Mon, 19 Sep 2011 14:55:49 +0200 From: Jan Kiszka MIME-Version: 1.0 References: <4E75E7A4.50702@web.de> <4E75E96E.90101@web.de> <4E761051.9000204@redhat.com> <4E76119F.5040004@web.de> <4E761220.3080707@redhat.com> <4E761C20.4040609@web.de> <4E76212A.20000@redhat.com> <4E764185.8020500@web.de> <4E773365.9010008@redhat.com> <4E773644.8020005@web.de> <4E7738C5.6050504@redhat.com> In-Reply-To: <4E7738C5.6050504@redhat.com> Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enigE08BA47F6E2C4E6722D6129F" Sender: jan.kiszka@web.de Subject: Re: [Qemu-devel] [PATCH v2 1/2] memory: Fix old portio word accesses List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Avi Kivity Cc: qemu-devel , Richard Henderson This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enigE08BA47F6E2C4E6722D6129F Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: quoted-printable On 2011-09-19 14:42, Avi Kivity wrote: > On 09/19/2011 03:32 PM, Jan Kiszka wrote: >> > It's opt-in. If a device sets >> > MemoryRegionOps::impl.{min,max}_access_size =3D 1, it will only be = fed >> > byte accesses (the core will take care of breaking apart larger >> > writes). If it sets MemoryRegionOps::impl.{min,max}_access_size =3D= >> 4, it >> > will only get long accesses (and the core will/should shift/mask or= >> > RMW). Refusing illegal access sizes is done using >> > MemoryRegionOps::valid. Most of this is unimplemented unfortunatel= y. >> >> That makes sense (for non-old_portio users). >> >> >=20 > The trick of having a way to register N callbacks with one shot is wort= h > growing. Ideally each register in a BAR would have a callback and we'd= > do something like >=20 > MemoryRegionOps mydev_ops =3D { > .registers =3D { > { MYDEV_REG_x, 4, 4, mydev_reg_x_read, mydev_reg_x_write, = }, > ... > }, > } >=20 > with hints to the core like "this register sits at this offset, use it > for reads instead of a callback", or, "this is a read-only register". This has pros and cons. If you have n registers to dispatch, you then have to write n function prologues and maybe epilogues instead of just one. Specifically if the register access is trivial, that could case quite some LoC blowup on the device side. What may have a better ratio are generic register get/set handlers. Jan --------------enigE08BA47F6E2C4E6722D6129F Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.16 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk53O9UACgkQitSsb3rl5xSXDACcD1AC9rlPVZD+nV6uQCfEsiFe kBUAn0Bn0AMhAy3I7jsU2yWlWSsTUWG+ =qyrY -----END PGP SIGNATURE----- --------------enigE08BA47F6E2C4E6722D6129F--