From nobody Sat May 10 08:41:49 2025 Delivered-To: importer2@patchew.org Received-SPF: pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; envelope-from=linux-kernel-owner@vger.kernel.org; helo=vger.kernel.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass(p=none dis=none) header.from=kernel.org ARC-Seal: i=1; a=rsa-sha256; t=1606216113; cv=none; d=zohomail.com; s=zohoarc; b=Dz33RM839ulCJa/WaQfjZ0e9NPhTHnRZEhZbd0zmuFNusofdIGUPajsTZtkLYGOwn0UZsadwOeNpzofUjhmpyfCYHys5zT/jqZQxT5cyAOjnHe5/DtyfYeX23e1VDa6x61SMeh9Zu2iPeAdH7soGO068EX3Rf+33AVyKDc+2Zu8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606216113; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:MIME-Version:Message-ID:References:Sender:Subject:To; bh=WSnNLLeCOo05owN5CgX1c37zmTFLdsPIcTw+LZseYr8=; b=ini+lVZm7x/cuzJP6s5z1GjsxdZwqlRwtvxo82xUJ2sAH7/dZjMBV06V8b53dg7+uk0b7dfYrK3ehOAqf6z8TXJtLulzVi2Oulb+1YpLBp1CYFKR6UsCxdmzUsnDVqD5Nh76ejlbffkUF2nU7UO+egzeKH8ZjrcCZbqcaB/8HZQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mx.zohomail.com with SMTP id 1606216113525571.6844284676736; Tue, 24 Nov 2020 03:08:33 -0800 (PST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732795AbgKXLHy (ORCPT ); Tue, 24 Nov 2020 06:07:54 -0500 Received: from mail.kernel.org ([198.145.29.99]:33790 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732421AbgKXLGf (ORCPT ); Tue, 24 Nov 2020 06:06:35 -0500 Received: from mail.kernel.org (ip5f5ad5c3.dynamic.kabel-deutschland.de [95.90.213.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id E9006208DB; Tue, 24 Nov 2020 11:06:30 +0000 (UTC) Received: from mchehab by mail.kernel.org with local (Exim 4.94) (envelope-from ) id 1khW9U-000FZR-Kx; Tue, 24 Nov 2020 12:06:28 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1606215991; bh=zqP2ZLOBN255u1tK6Ne0X9rdAbfRvEZ3u2d/BpSccko=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NhHDocT0B4bzeifeaydbYu5uBZpjbvdqChfHQXXic4yyPu09QYN9j45zrY+LcrDhL blYlBnkNP84KPc0u9waskDBhvCPq48BnS2JjFuDxr9d1rBNEb4Oo24Z0yRvwGeAZOj qqYaksoMDdnXK9oFUhQ8L16G4HuJAqIFqPGmnq3g= From: Mauro Carvalho Chehab Cc: Mauro Carvalho Chehab , "Daniel W. S. Almeida" , Mauro Carvalho Chehab , linux-kernel@vger.kernel.org, linux-media@vger.kernel.org Subject: [PATCH 03/31] media: vidtv: don't use recursive functions Date: Tue, 24 Nov 2020 12:05:59 +0100 Message-Id: <319acceb592f0970448eaa81c26f3631b692ad07.1606215584.git.mchehab+huawei@kernel.org> X-Mailer: git-send-email 2.28.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: Mauro Carvalho Chehab To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" The Linux stack is too short. So, using recursive functions is a very bad idea. Convert those into non-recursive ones. Signed-off-by: Mauro Carvalho Chehab --- drivers/media/test-drivers/vidtv/vidtv_psi.c | 75 +++++++++++--------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/drivers/media/test-drivers/vidtv/vidtv_psi.c b/drivers/media/t= est-drivers/vidtv/vidtv_psi.c index b4bbd450fbe6..f92ff54fe19b 100644 --- a/drivers/media/test-drivers/vidtv/vidtv_psi.c +++ b/drivers/media/test-drivers/vidtv/vidtv_psi.c @@ -951,25 +951,29 @@ vidtv_psi_pat_program_assign(struct vidtv_psi_table_p= at *pat, { /* This function transfers ownership of p to the table */ =20 - u16 program_count =3D 0; - struct vidtv_psi_table_pat_program *program =3D p; + u16 program_count; + struct vidtv_psi_table_pat_program *program; =20 - if (p =3D=3D pat->program) - return; + do { + program_count =3D 0; + program =3D p; =20 - while (program) { - ++program_count; - program =3D program->next; - } + if (p =3D=3D pat->program) + return; =20 - pat->programs =3D program_count; - pat->program =3D p; + while (program) { + ++program_count; + program =3D program->next; + } =20 - /* Recompute section length */ - vidtv_psi_pat_table_update_sec_len(pat); + pat->programs =3D program_count; + pat->program =3D p; =20 - if (vidtv_psi_get_sec_len(&pat->header) > MAX_SECTION_LEN) - vidtv_psi_pat_program_assign(pat, NULL); + /* Recompute section length */ + vidtv_psi_pat_table_update_sec_len(pat); + + p =3D NULL; + } while (vidtv_psi_get_sec_len(&pat->header) > MAX_SECTION_LEN); =20 vidtv_psi_update_version_num(&pat->header); } @@ -1124,15 +1128,16 @@ void vidtv_psi_pmt_stream_destroy(struct vidtv_psi_= table_pmt_stream *s) void vidtv_psi_pmt_stream_assign(struct vidtv_psi_table_pmt *pmt, struct vidtv_psi_table_pmt_stream *s) { - /* This function transfers ownership of s to the table */ - if (s =3D=3D pmt->stream) - return; + do { + /* This function transfers ownership of s to the table */ + if (s =3D=3D pmt->stream) + return; =20 - pmt->stream =3D s; - vidtv_psi_pmt_table_update_sec_len(pmt); + pmt->stream =3D s; + vidtv_psi_pmt_table_update_sec_len(pmt); =20 - if (vidtv_psi_get_sec_len(&pmt->header) > MAX_SECTION_LEN) - vidtv_psi_pmt_stream_assign(pmt, NULL); + s =3D NULL; + } while (vidtv_psi_get_sec_len(&pmt->header) > MAX_SECTION_LEN); =20 vidtv_psi_update_version_num(&pmt->header); } @@ -1500,16 +1505,17 @@ void vidtv_psi_sdt_service_assign(struct vidtv_psi_table_sdt *sdt, struct vidtv_psi_table_sdt_service *service) { - if (service =3D=3D sdt->service) - return; + do { + if (service =3D=3D sdt->service) + return; =20 - sdt->service =3D service; + sdt->service =3D service; =20 - /* recompute section length */ - vidtv_psi_sdt_table_update_sec_len(sdt); + /* recompute section length */ + vidtv_psi_sdt_table_update_sec_len(sdt); =20 - if (vidtv_psi_get_sec_len(&sdt->header) > MAX_SECTION_LEN) - vidtv_psi_sdt_service_assign(sdt, NULL); + service =3D NULL; + } while (vidtv_psi_get_sec_len(&sdt->header) > MAX_SECTION_LEN); =20 vidtv_psi_update_version_num(&sdt->header); } @@ -1832,14 +1838,15 @@ void vidtv_psi_eit_table_update_sec_len(struct vidt= v_psi_table_eit *eit) void vidtv_psi_eit_event_assign(struct vidtv_psi_table_eit *eit, struct vidtv_psi_table_eit_event *e) { - if (e =3D=3D eit->event) - return; + do { + if (e =3D=3D eit->event) + return; =20 - eit->event =3D e; - vidtv_psi_eit_table_update_sec_len(eit); + eit->event =3D e; + vidtv_psi_eit_table_update_sec_len(eit); =20 - if (vidtv_psi_get_sec_len(&eit->header) > EIT_MAX_SECTION_LEN) - vidtv_psi_eit_event_assign(eit, NULL); + e =3D NULL; + } while (vidtv_psi_get_sec_len(&eit->header) > EIT_MAX_SECTION_LEN); =20 vidtv_psi_update_version_num(&eit->header); } --=20 2.28.0