From nobody Mon Dec 15 01:55:55 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=1606216041; cv=none; d=zohomail.com; s=zohoarc; b=Rr2/bADxdfqeAOhV9Q+YbyokRWRIr7fqIw8VuTu/zCjSTBtHEWlfsUP5QfZuRZU8aBaTpSaG1Akfan0eApcmppLnk2f2dDdZ95z+cEzfQ2P2yUMz/JJnQRc/QyfZnpv+0hqvvtj9FFL2NtSkNiLCjAuLaOmfk8Gks6iu/OtiTUc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1606216041; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:MIME-Version:Message-ID:References:Sender:Subject:To; bh=qtRPLwpKNHHX4A72gqL1K43gUekCBg50lPKPLgjt/a0=; b=VzjTGWyFRntPf4CsCrYkYQO+unlL3C26rVRNe2Bghhprt7gunHH65CoQUQtH1CSelprV6iU8H1b+YvKt5WktwSft6uQwTtG7LBhTsHGxTdPLJbWLK/rFTPpAgXqWCiolcaAMzix1uUSAM4Vp9pL7OKO/XDSi/bQSfN271t1yLRQ= 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 1606216041241726.9478497598216; Tue, 24 Nov 2020 03:07:21 -0800 (PST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732614AbgKXLGs (ORCPT ); Tue, 24 Nov 2020 06:06:48 -0500 Received: from mail.kernel.org ([198.145.29.99]:33820 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732506AbgKXLGg (ORCPT ); Tue, 24 Nov 2020 06:06:36 -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 2472C2158C; Tue, 24 Nov 2020 11:06:31 +0000 (UTC) Received: from mchehab by mail.kernel.org with local (Exim 4.94) (envelope-from ) id 1khW9V-000FaE-3y; Tue, 24 Nov 2020 12:06:29 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1606215991; bh=FsnHhUeH7Dg4dJaNDX9Y+iZXIBPzxEeXZ7JZS+myAYE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=2J+wGY6aO8iqOEmrsr2m4WzEDiLCHfInGU4agKQ4zGxPR9HqUsapuyZPLxAyOe+fA Pfy2GCMDczH8ElwD5A9g3ILzBs2dsAYAkKRRdMqz5Ymu71bjKdCEBvXyo1UMm3m1NV MKD9y+6p9VVySy73/sOzKUGaQwSgk9ZWypxiFERA= 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 20/31] media: vidtv: simplify PSI write function Date: Tue, 24 Nov 2020 12:06:16 +0100 Message-Id: <35a8bc0c01e9165f661881195366248206c39a18.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 function vidtv_psi_ts_psi_write_into() initializes the ts_header fields several times, and receives a struct as argument, instead of using a pointer to struct. Cleanup the function, in order to reduce its stack usage and to avoid initializing the ts_header multiple times. Signed-off-by: Mauro Carvalho Chehab --- drivers/media/test-drivers/vidtv/vidtv_psi.c | 128 +++++++++---------- 1 file changed, 62 insertions(+), 66 deletions(-) diff --git a/drivers/media/test-drivers/vidtv/vidtv_psi.c b/drivers/media/t= est-drivers/vidtv/vidtv_psi.c index 92fdf1149f0d..36f1c56d9e24 100644 --- a/drivers/media/test-drivers/vidtv/vidtv_psi.c +++ b/drivers/media/test-drivers/vidtv/vidtv_psi.c @@ -162,79 +162,75 @@ static void vidtv_psi_set_sec_len(struct vidtv_psi_ta= ble_header *h, u16 new_len) * manage the continuity_counter * add stuffing (i.e. padding bytes) after the CRC */ -static u32 vidtv_psi_ts_psi_write_into(struct psi_write_args args) +static u32 vidtv_psi_ts_psi_write_into(struct psi_write_args *args) { - - u32 nbytes_past_boundary =3D (args.dest_offset % TS_PACKET_LEN); + struct vidtv_mpeg_ts ts_header =3D { + .sync_byte =3D TS_SYNC_BYTE, + .bitfield =3D cpu_to_be16((args->new_psi_section << 14) | args->pid), + .scrambling =3D 0, + .payload =3D 1, + .adaptation_field =3D 0, /* no adaptation field */ + }; + u32 nbytes_past_boundary =3D (args->dest_offset % TS_PACKET_LEN); bool aligned =3D (nbytes_past_boundary =3D=3D 0); - struct vidtv_mpeg_ts ts_header =3D {}; - u32 remaining_len =3D args.len; + u32 remaining_len =3D args->len; u32 payload_write_len =3D 0; u32 payload_offset =3D 0; u32 nbytes =3D 0; =20 - const u16 PAYLOAD_START =3D args.new_psi_section; - - if (!args.crc && !args.is_crc) + if (!args->crc && !args->is_crc) pr_warn_ratelimited("Missing CRC for chunk\n"); =20 - if (args.crc) - *args.crc =3D dvb_crc32(*args.crc, args.from, args.len); + if (args->crc) + *args->crc =3D dvb_crc32(*args->crc, args->from, args->len); =20 - if (args.new_psi_section && !aligned) { + if (args->new_psi_section && !aligned) { pr_warn_ratelimited("Cannot write a new PSI section in a misaligned buff= er\n"); =20 /* forcibly align and hope for the best */ - nbytes +=3D vidtv_memset(args.dest_buf, - args.dest_offset + nbytes, - args.dest_buf_sz, + nbytes +=3D vidtv_memset(args->dest_buf, + args->dest_offset + nbytes, + args->dest_buf_sz, TS_FILL_BYTE, TS_PACKET_LEN - nbytes_past_boundary); } =20 while (remaining_len) { - nbytes_past_boundary =3D (args.dest_offset + nbytes) % TS_PACKET_LEN; + nbytes_past_boundary =3D (args->dest_offset + nbytes) % TS_PACKET_LEN; aligned =3D (nbytes_past_boundary =3D=3D 0); =20 if (aligned) { /* if at a packet boundary, write a new TS header */ - ts_header.sync_byte =3D TS_SYNC_BYTE; - ts_header.bitfield =3D cpu_to_be16((PAYLOAD_START << 14) | args.pid); - ts_header.scrambling =3D 0; - ts_header.continuity_counter =3D *args.continuity_counter; - ts_header.payload =3D 1; - /* no adaptation field */ - ts_header.adaptation_field =3D 0; + ts_header.continuity_counter =3D *args->continuity_counter; =20 - /* copy the header */ - nbytes +=3D vidtv_memcpy(args.dest_buf, - args.dest_offset + nbytes, - args.dest_buf_sz, + nbytes +=3D vidtv_memcpy(args->dest_buf, + args->dest_offset + nbytes, + args->dest_buf_sz, &ts_header, sizeof(ts_header)); /* * This will trigger a discontinuity if the buffer is full, * effectively dropping the packet. */ - vidtv_ts_inc_cc(args.continuity_counter); + vidtv_ts_inc_cc(args->continuity_counter); } =20 /* write the pointer_field in the first byte of the payload */ - if (args.new_psi_section) - nbytes +=3D vidtv_memset(args.dest_buf, - args.dest_offset + nbytes, - args.dest_buf_sz, + if (args->new_psi_section) + nbytes +=3D vidtv_memset(args->dest_buf, + args->dest_offset + nbytes, + args->dest_buf_sz, 0x0, 1); =20 /* write as much of the payload as possible */ - nbytes_past_boundary =3D (args.dest_offset + nbytes) % TS_PACKET_LEN; + nbytes_past_boundary =3D (args->dest_offset + nbytes) % TS_PACKET_LEN; payload_write_len =3D min(TS_PACKET_LEN - nbytes_past_boundary, remainin= g_len); =20 - nbytes +=3D vidtv_memcpy(args.dest_buf, - args.dest_offset + nbytes, - args.dest_buf_sz, - args.from + payload_offset, + nbytes +=3D vidtv_memcpy(args->dest_buf, + args->dest_offset + nbytes, + args->dest_buf_sz, + args->from + payload_offset, payload_write_len); =20 /* 'payload_write_len' written from a total of 'len' requested*/ @@ -246,12 +242,12 @@ static u32 vidtv_psi_ts_psi_write_into(struct psi_wri= te_args args) * fill the rest of the packet if there is any remaining space unused */ =20 - nbytes_past_boundary =3D (args.dest_offset + nbytes) % TS_PACKET_LEN; + nbytes_past_boundary =3D (args->dest_offset + nbytes) % TS_PACKET_LEN; =20 - if (args.is_crc) - nbytes +=3D vidtv_memset(args.dest_buf, - args.dest_offset + nbytes, - args.dest_buf_sz, + if (args->is_crc) + nbytes +=3D vidtv_memset(args->dest_buf, + args->dest_offset + nbytes, + args->dest_buf_sz, TS_FILL_BYTE, TS_PACKET_LEN - nbytes_past_boundary); =20 @@ -275,7 +271,7 @@ static u32 table_section_crc32_write_into(struct crc32_= write_args args) psi_args.is_crc =3D true; psi_args.dest_buf_sz =3D args.dest_buf_sz; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 return nbytes; } @@ -662,7 +658,7 @@ static u32 vidtv_psi_desc_write_into(struct desc_write_= args args) psi_args.dest_buf_sz =3D args.dest_buf_sz; psi_args.crc =3D args.crc; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 switch (args.desc->type) { case SERVICE_DESCRIPTOR: @@ -671,25 +667,25 @@ static u32 vidtv_psi_desc_write_into(struct desc_writ= e_args args) sizeof_field(struct vidtv_psi_desc_service, provider_name_len); psi_args.from =3D &((struct vidtv_psi_desc_service *)args.desc)->service= _type; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 psi_args.dest_offset =3D args.dest_offset + nbytes; psi_args.len =3D ((struct vidtv_psi_desc_service *)args.desc)->provider_= name_len; psi_args.from =3D ((struct vidtv_psi_desc_service *)args.desc)->provider= _name; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 psi_args.dest_offset =3D args.dest_offset + nbytes; psi_args.len =3D sizeof_field(struct vidtv_psi_desc_service, service_nam= e_len); psi_args.from =3D &((struct vidtv_psi_desc_service *)args.desc)->service= _name_len; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 psi_args.dest_offset =3D args.dest_offset + nbytes; psi_args.len =3D ((struct vidtv_psi_desc_service *)args.desc)->service_n= ame_len; psi_args.from =3D ((struct vidtv_psi_desc_service *)args.desc)->service_= name; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); break; =20 case NETWORK_NAME_DESCRIPTOR: @@ -697,7 +693,7 @@ static u32 vidtv_psi_desc_write_into(struct desc_write_= args args) psi_args.len =3D args.desc->length; psi_args.from =3D ((struct vidtv_psi_desc_network_name *)args.desc)->net= work_name; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); break; =20 case SERVICE_LIST_DESCRIPTOR: @@ -708,7 +704,7 @@ static u32 vidtv_psi_desc_write_into(struct desc_write_= args args) sizeof(struct vidtv_psi_desc_service_list_entry *); psi_args.from =3D serv_list_entry; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 serv_list_entry =3D serv_list_entry->next; } @@ -720,32 +716,32 @@ static u32 vidtv_psi_desc_write_into(struct desc_writ= e_args args) psi_args.from =3D ((struct vidtv_psi_desc_short_event *) args.desc)->iso_language_code; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 psi_args.dest_offset =3D args.dest_offset + nbytes; psi_args.len =3D sizeof_field(struct vidtv_psi_desc_short_event, event_n= ame_len); psi_args.from =3D &((struct vidtv_psi_desc_short_event *) args.desc)->event_name_len; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 psi_args.dest_offset =3D args.dest_offset + nbytes; psi_args.len =3D ((struct vidtv_psi_desc_short_event *)args.desc)->event= _name_len; psi_args.from =3D ((struct vidtv_psi_desc_short_event *)args.desc)->even= t_name; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 psi_args.dest_offset =3D args.dest_offset + nbytes; psi_args.len =3D sizeof_field(struct vidtv_psi_desc_short_event, text_le= n); psi_args.from =3D &((struct vidtv_psi_desc_short_event *)args.desc)->tex= t_len; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 psi_args.dest_offset =3D args.dest_offset + nbytes; psi_args.len =3D ((struct vidtv_psi_desc_short_event *)args.desc)->text_= len; psi_args.from =3D ((struct vidtv_psi_desc_short_event *)args.desc)->text; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 break; =20 @@ -755,7 +751,7 @@ static u32 vidtv_psi_desc_write_into(struct desc_write_= args args) psi_args.len =3D args.desc->length; psi_args.from =3D &args.desc->data; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); break; } =20 @@ -780,7 +776,7 @@ vidtv_psi_table_header_write_into(struct header_write_a= rgs args) psi_args.dest_buf_sz =3D args.dest_buf_sz; psi_args.crc =3D args.crc; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 return nbytes; } @@ -1014,7 +1010,7 @@ u32 vidtv_psi_pat_write_into(struct vidtv_psi_pat_wri= te_args args) sizeof(struct vidtv_psi_table_pat_program *); psi_args.dest_offset =3D args.offset + nbytes; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 p =3D p->next; } @@ -1207,7 +1203,7 @@ u32 vidtv_psi_pmt_write_into(struct vidtv_psi_pmt_wri= te_args args) psi_args.dest_buf_sz =3D args.buf_sz; psi_args.crc =3D &crc; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 while (table_descriptor) { /* write the descriptors, if any */ @@ -1232,7 +1228,7 @@ u32 vidtv_psi_pmt_write_into(struct vidtv_psi_pmt_wri= te_args args) sizeof_field(struct vidtv_psi_table_pmt_stream, bitfield2); psi_args.dest_offset =3D args.offset + nbytes; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 stream_descriptor =3D stream->descriptor; =20 @@ -1360,7 +1356,7 @@ u32 vidtv_psi_sdt_write_into(struct vidtv_psi_sdt_wri= te_args args) psi_args.crc =3D &crc; =20 /* copy u16 network_id + u8 reserved)*/ - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 while (service) { /* copy the services, if any */ @@ -1371,7 +1367,7 @@ u32 vidtv_psi_sdt_write_into(struct vidtv_psi_sdt_wri= te_args args) sizeof(struct vidtv_psi_table_sdt_service *); psi_args.dest_offset =3D args.offset + nbytes; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 service_desc =3D service->descriptor; =20 @@ -1694,7 +1690,7 @@ u32 vidtv_psi_nit_write_into(struct vidtv_psi_nit_wri= te_args args) psi_args.dest_buf_sz =3D args.buf_sz; psi_args.crc =3D &crc; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 while (table_descriptor) { /* write the descriptors, if any */ @@ -1718,7 +1714,7 @@ u32 vidtv_psi_nit_write_into(struct vidtv_psi_nit_wri= te_args args) psi_args.dest_offset =3D args.offset + nbytes; psi_args.pid =3D VIDTV_NIT_PID; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 while (transport) { /* write the transport sections, if any */ @@ -1728,7 +1724,7 @@ u32 vidtv_psi_nit_write_into(struct vidtv_psi_nit_wri= te_args args) sizeof_field(struct vidtv_psi_table_transport, bitfield); psi_args.dest_offset =3D args.offset + nbytes; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 transport_descriptor =3D transport->descriptor; =20 @@ -1907,7 +1903,7 @@ u32 vidtv_psi_eit_write_into(struct vidtv_psi_eit_wri= te_args args) psi_args.dest_buf_sz =3D args.buf_sz; psi_args.crc =3D &crc; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 while (event) { /* copy the events, if any */ @@ -1918,7 +1914,7 @@ u32 vidtv_psi_eit_write_into(struct vidtv_psi_eit_wri= te_args args) sizeof(struct vidtv_psi_table_eit_event *); psi_args.dest_offset =3D args.offset + nbytes; =20 - nbytes +=3D vidtv_psi_ts_psi_write_into(psi_args); + nbytes +=3D vidtv_psi_ts_psi_write_into(&psi_args); =20 event_descriptor =3D event->descriptor; =20 --=20 2.28.0