From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51268) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bfegg-0007jj-EX for qemu-devel@nongnu.org; Thu, 01 Sep 2016 22:58:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bfegd-0000XR-8n for qemu-devel@nongnu.org; Thu, 01 Sep 2016 22:58:38 -0400 Date: Fri, 2 Sep 2016 12:37:51 +1000 From: David Gibson Message-ID: <20160902023751.GA2990@voom.fritz.box> References: <1472717449-12501-1-git-send-email-lvivier@redhat.com> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="XsQoSWH+UP9D9v3l" Content-Disposition: inline In-Reply-To: <1472717449-12501-1-git-send-email-lvivier@redhat.com> Subject: Re: [Qemu-devel] [PATCH] spapr: implement H_CHANGE_LOGICAL_LAN_MAC h_call List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Laurent Vivier Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org --XsQoSWH+UP9D9v3l Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, Sep 01, 2016 at 10:10:49AM +0200, Laurent Vivier wrote: > Since kernel v4.0, linux uses H_CHANGE_LOGICAL_LAN_MAC to change lively > the MAC address of an ibmveth interface. >=20 > As QEMU doesn't implement this h_call, we can't change anymore the > MAC address of an spapr-vlan interface. >=20 > Signed-off-by: Laurent Vivier Mostly looks good, but I have a couple of queries. > --- > hw/net/spapr_llan.c | 30 ++++++++++++++++++++++++++++++ > 1 file changed, 30 insertions(+) >=20 > diff --git a/hw/net/spapr_llan.c b/hw/net/spapr_llan.c > index b273eda..4bb95a5 100644 > --- a/hw/net/spapr_llan.c > +++ b/hw/net/spapr_llan.c > @@ -106,6 +106,7 @@ typedef struct VIOsPAPRVLANDevice { > VIOsPAPRDevice sdev; > NICConf nicconf; > NICState *nic; > + MACAddr perm_mac; Looking at virtio-net, I see that it copies the mac address from nic->conf on reset. Could we do that, to avoid creating an extra field in the state? > bool isopen; > hwaddr buf_list; > uint32_t add_buf_ptr, use_buf_ptr, rx_bufs; > @@ -316,6 +317,10 @@ static void spapr_vlan_reset(VIOsPAPRDevice *sdev) > spapr_vlan_reset_rx_pool(dev->rx_pool[i]); > } > } > + > + memcpy(&dev->nicconf.macaddr.a, &dev->perm_mac.a, > + sizeof(dev->nicconf.macaddr.a)); > + qemu_format_nic_info_str(qemu_get_queue(dev->nic), dev->nicconf.maca= ddr.a); > } > =20 > static void spapr_vlan_realize(VIOsPAPRDevice *sdev, Error **errp) > @@ -324,6 +329,8 @@ static void spapr_vlan_realize(VIOsPAPRDevice *sdev, = Error **errp) > =20 > qemu_macaddr_default_if_unset(&dev->nicconf.macaddr); > =20 > + memcpy(&dev->perm_mac.a, &dev->nicconf.macaddr.a, sizeof(dev->perm_m= ac.a)); > + > dev->nic =3D qemu_new_nic(&net_spapr_vlan_info, &dev->nicconf, > object_get_typename(OBJECT(sdev)), sdev->qde= v.id, dev); > qemu_format_nic_info_str(qemu_get_queue(dev->nic), dev->nicconf.maca= ddr.a); > @@ -756,6 +763,27 @@ static target_ulong h_multicast_ctrl(PowerPCCPU *cpu= , sPAPRMachineState *spapr, > return H_SUCCESS; > } > =20 > +static target_ulong h_change_logical_lan_mac(PowerPCCPU *cpu, > + sPAPRMachineState *spapr, > + target_ulong opcode, > + target_ulong *args) > +{ > + target_ulong reg =3D args[0]; > + target_ulong macaddr =3D args[1]; > + VIOsPAPRDevice *sdev =3D spapr_vio_find_by_reg(spapr->vio_bus, reg); > + VIOsPAPRVLANDevice *dev =3D VIO_SPAPR_VLAN_DEVICE(sdev); > + int i; > + > + for (i =3D 0; i < ETH_ALEN; i++) { > + dev->nicconf.macaddr.a[ETH_ALEN - i - 1] =3D macaddr & 0xff; > + macaddr >>=3D 8; > + } > + > + qemu_format_nic_info_str(qemu_get_queue(dev->nic), dev->nicconf.maca= ddr.a); > + > + return H_SUCCESS; > +} > + > static Property spapr_vlan_properties[] =3D { > DEFINE_SPAPR_PROPERTIES(VIOsPAPRVLANDevice, sdev), > DEFINE_NIC_PROPERTIES(VIOsPAPRVLANDevice, nicconf), > @@ -854,6 +882,8 @@ static void spapr_vlan_register_types(void) > spapr_register_hypercall(H_ADD_LOGICAL_LAN_BUFFER, > h_add_logical_lan_buffer); > spapr_register_hypercall(H_MULTICAST_CTRL, h_multicast_ctrl); > + spapr_register_hypercall(H_CHANGE_LOGICAL_LAN_MAC, > + h_change_logical_lan_mac); > type_register_static(&spapr_vlan_info); > } Now that the MAC is guest changeable, do we need to add something to let it be migrated? Or is that already included in the migration state for the base NIC info? --=20 David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson --XsQoSWH+UP9D9v3l Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIcBAEBAgAGBQJXyOX/AAoJEGw4ysog2bOS50QP/2C2pdrBsnRFNIZsO6bf3nni RS4cY5cDRdh1i23lIxSapOhcksTKsTX3F5bY6LG/wxD8krqfbXfwoJvNd/GL392G 6yOIYRsMUilsV9M0LTTQ6KCXGbE0LAPDpvHCdGvKKaHa8LWjR3Dvc8Nbn91l0u5d Kv26NFwmRYv6xgSPWnl+bu1ahiPsdZYq21RBR/YXVYeAYhj/131FqJ0bmjxS2CPX LUeViSrkJNde2WmO7ajsEq9cO5AGIepG2SHNWTPP0/I29CkfLs0DqRBtnLBEouDP YBdcbziwoIL/965jMt19abCyYSYhbzFY3Vj4WOInBJcWzmjDnARxktkeJRV0Luy3 itkuYG8eVEQjHjddkTou+FvGLtAGobSfthO8tYdcYOhaWeDXwMsCX03OUlNOfYKC 5WY1Tz832dwkkdER1rqEPJxLnA/Bz+a3DY3usHNw5zsiKc8FUlz7sQtItNLY+AeA TdLLhukoNGh4h1fWbDPLMhvZlIvReAnwXkbXS4bp6ilpuXiFgw56bzht4knr6JFY mpOI7bvVf2Lfn3nhPj3KKSp8yrbL3WMFuMRQxea5VOOBkhv6Ix7rowuCpRonb5CG U13PAYi1iWC27zCt2X1vxzjKhvESWnYHF4AfWXq3oH7UI4AKW71bWs+Se4qYk2UY m9DdBV/cadjgOFFEvZXw =ag+h -----END PGP SIGNATURE----- --XsQoSWH+UP9D9v3l--