From nobody Sat May 9 07:15:05 2026 Received: from m16.mail.163.com (m16.mail.163.com [117.135.210.4]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 314B583A14 for ; Tue, 28 Jan 2025 05:53:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=117.135.210.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738043593; cv=none; b=V+Wm4Z8S3VtyaiMJQeuLjGvyvQX9KlDk2psc7/dldGxt+bLtbmXu8o6VQ9LWj4Fx8Ee7DzgOnyJRiB/TA6bmIZteP0HG4zFe/GCFgZ4rEVQdNsMM4HaCbwPOzxJw7VL0tVtOJ4s93TYtc/kIQPyxRbEd3UzVxSA3MZMUhpGOsFg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738043593; c=relaxed/simple; bh=GpINQ6ZzddIbwxLm7ZXVzGSeC1OGdZ0QaoPbmgUO12U=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=IkYTg2HlAlFmZvUjsWq2i155ncmI58oZojd7mrZOoSDf4CUhXSEHB+DS7GOUQ6BpYX8mslFI1mwjp+9ROF2MIuMpjt7ushaQJ4uIHeTaTY7nikmYKOA7W1hbsG6ZkUtS5BQn5jER0iJSEGeGof6dw/vGKqtmX1GSRsARABcYm88= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b=N6gpdjc9; arc=none smtp.client-ip=117.135.210.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=163.com header.i=@163.com header.b="N6gpdjc9" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:Subject:Date:Message-ID:MIME-Version; bh=hGv6v ULkxz5mbNHtJETmL6ilm0UrsXxB4x4eWmqlYG8=; b=N6gpdjc917QzSewqSH0oE etMxATe2iw6gTNA2clKnHrvh2vUmEjcF1aNmVLUoXTCdz1QN6Jr5HAt2Stc/Li9G t0G2gQo+fcAdUp6tAmEowXeRSqiqMsDokcmfowjoebw9kmi2IK/5I0B6jWGCBu7w m1Rq2DsdK1x7YZSD5T+f9o= Received: from DESKTOP-DMSSUQ5.localdomain (unknown []) by gzga-smtp-mtada-g0-0 (Coremail) with SMTP id _____wDnz0yqcJhngcb0Iw--.31752S2; Tue, 28 Jan 2025 13:52:43 +0800 (CST) From: oushixiong1025@163.com To: Amit Shah Cc: Arnd Bergmann , Greg Kroah-Hartman , virtualization@lists.linux.dev, linux-kernel@vger.kernel.org, Shixiong Ou Subject: [PATCH] virtio_console: Convert to use devm funcs Date: Tue, 28 Jan 2025 13:52:41 +0800 Message-ID: <20250128055241.30760-1-oushixiong1025@163.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-CM-TRANSID: _____wDnz0yqcJhngcb0Iw--.31752S2 X-Coremail-Antispam: 1Uf129KBjvJXoWxCFWDuFWxKw48uryxAw13Jwb_yoWrGr1xpa 4kuF1rGFW8Jr47WrykXay8X3W5uanrAr1xKr9Fv3s7Kr15try8ZrySyFyq9FWrAr97CFW8 AF1ktFWfJF1UuFJanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07joApnUUUUU= X-CM-SenderInfo: xrxvxxx0lr0wirqskqqrwthudrp/1tbiXA3iD2eYa7YjIQAAsc Content-Type: text/plain; charset="utf-8" From: Shixiong Ou Convert to devm_* funcs so that no need to manual free in error path. Signed-off-by: Shixiong Ou --- drivers/char/virtio_console.c | 43 ++++++++++++++--------------------- 1 file changed, 17 insertions(+), 26 deletions(-) diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c index c62b208b42f1..657cf15dad55 100644 --- a/drivers/char/virtio_console.c +++ b/drivers/char/virtio_console.c @@ -1811,15 +1811,17 @@ static int init_vqs(struct ports_device *portdev) nr_ports =3D portdev->max_nr_ports; nr_queues =3D use_multiport(portdev) ? (nr_ports + 1) * 2 : 2; =20 - vqs =3D kmalloc_array(nr_queues, sizeof(struct virtqueue *), GFP_KERNEL); - vqs_info =3D kcalloc(nr_queues, sizeof(*vqs_info), GFP_KERNEL); - portdev->in_vqs =3D kmalloc_array(nr_ports, sizeof(struct virtqueue *), - GFP_KERNEL); - portdev->out_vqs =3D kmalloc_array(nr_ports, sizeof(struct virtqueue *), - GFP_KERNEL); + vqs =3D devm_kmalloc_array(&portdev->vdev->dev, nr_queues, + sizeof(struct virtqueue *), GFP_KERNEL); + vqs_info =3D devm_kcalloc(&portdev->vdev->dev, nr_queues, + sizeof(*vqs_info), GFP_KERNEL); + portdev->in_vqs =3D devm_kmalloc_array(&portdev->vdev->dev, + nr_ports, sizeof(struct virtqueue *), GFP_KERNEL); + portdev->out_vqs =3D devm_kmalloc_array(&portdev->vdev->dev, + nr_ports, sizeof(struct virtqueue *), GFP_KERNEL); if (!vqs || !vqs_info || !portdev->in_vqs || !portdev->out_vqs) { err =3D -ENOMEM; - goto free; + return err; } =20 /* @@ -1850,7 +1852,7 @@ static int init_vqs(struct ports_device *portdev) /* Find the queues. */ err =3D virtio_find_vqs(portdev->vdev, nr_queues, vqs, vqs_info, NULL); if (err) - goto free; + return err; =20 j =3D 0; portdev->in_vqs[0] =3D vqs[0]; @@ -1866,18 +1868,10 @@ static int init_vqs(struct ports_device *portdev) portdev->out_vqs[i] =3D vqs[j + 1]; } } - kfree(vqs_info); - kfree(vqs); + devm_kfree(&portdev->vdev->dev, vqs_info); + devm_kfree(&portdev->vdev->dev, vqs); =20 return 0; - -free: - kfree(portdev->out_vqs); - kfree(portdev->in_vqs); - kfree(vqs_info); - kfree(vqs); - - return err; } =20 static const struct file_operations portdev_fops =3D { @@ -1897,8 +1891,8 @@ static void remove_vqs(struct ports_device *portdev) cond_resched(); } portdev->vdev->config->del_vqs(portdev->vdev); - kfree(portdev->in_vqs); - kfree(portdev->out_vqs); + devm_kfree(&portdev->vdev->dev, portdev->in_vqs); + devm_kfree(&portdev->vdev->dev, portdev->out_vqs); } =20 static void virtcons_remove(struct virtio_device *vdev) @@ -1941,7 +1935,6 @@ static void virtcons_remove(struct virtio_device *vde= v) * away. */ remove_vqs(portdev); - kfree(portdev); } =20 /* @@ -1967,7 +1960,7 @@ static int virtcons_probe(struct virtio_device *vdev) return -EINVAL; } =20 - portdev =3D kmalloc(sizeof(*portdev), GFP_KERNEL); + portdev =3D devm_kmalloc(&vdev->dev, sizeof(*portdev), GFP_KERNEL); if (!portdev) { err =3D -ENOMEM; goto fail; @@ -1984,7 +1977,7 @@ static int virtcons_probe(struct virtio_device *vdev) "Error %d registering chrdev for device %u\n", portdev->chr_major, vdev->index); err =3D portdev->chr_major; - goto free; + goto fail; } =20 multiport =3D false; @@ -2001,7 +1994,7 @@ static int virtcons_probe(struct virtio_device *vdev) "Invalidate max_nr_ports %d", portdev->max_nr_ports); err =3D -EINVAL; - goto free; + goto fail; } multiport =3D true; } @@ -2060,8 +2053,6 @@ static int virtcons_probe(struct virtio_device *vdev) =20 free_chrdev: unregister_chrdev(portdev->chr_major, "virtio-portsdev"); -free: - kfree(portdev); fail: return err; } --=20 2.43.0