Skip to content

Commit 0a33ab1

Browse files
committed
media: vidtv: avoid data copy when initializing the multiplexer
Initialize the fields of the arguments directly when declaring it, and pass the args as a pointer, instead of copying them. Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
1 parent 0d271a7 commit 0a33ab1

3 files changed

Lines changed: 30 additions & 28 deletions

File tree

drivers/media/test-drivers/vidtv/vidtv_bridge.c

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,17 @@ vidtv_bridge_on_new_pkts_avail(void *priv, u8 *buf, u32 npkts)
161161

162162
static int vidtv_start_streaming(struct vidtv_dvb *dvb)
163163
{
164-
struct vidtv_mux_init_args mux_args = {0};
164+
struct vidtv_mux_init_args mux_args = {
165+
.mux_rate_kbytes_sec = mux_rate_kbytes_sec,
166+
.on_new_packets_available_cb = vidtv_bridge_on_new_pkts_avail,
167+
.pcr_period_usecs = pcr_period_msec * USEC_PER_MSEC,
168+
.si_period_usecs = si_period_msec * USEC_PER_MSEC,
169+
.pcr_pid = pcr_pid,
170+
.transport_stream_id = VIDTV_DEFAULT_TS_ID,
171+
.network_id = VIDTV_DEFAULT_NETWORK_ID,
172+
.network_name = VIDTV_DEFAULT_NETWORK_NAME,
173+
.priv = dvb,
174+
};
165175
struct device *dev = &dvb->pdev->dev;
166176
u32 mux_buf_sz;
167177

@@ -170,21 +180,13 @@ static int vidtv_start_streaming(struct vidtv_dvb *dvb)
170180
return 0;
171181
}
172182

173-
mux_buf_sz = (mux_buf_sz_pkts) ? mux_buf_sz_pkts : vidtv_bridge_mux_buf_sz_for_mux_rate();
183+
mux_buf_sz = (mux_buf_sz_pkts) ? mux_buf_sz_pkts :
184+
vidtv_bridge_mux_buf_sz_for_mux_rate();
174185

175-
mux_args.mux_rate_kbytes_sec = mux_rate_kbytes_sec;
176-
mux_args.on_new_packets_available_cb = vidtv_bridge_on_new_pkts_avail;
177-
mux_args.mux_buf_sz = mux_buf_sz;
178-
mux_args.pcr_period_usecs = pcr_period_msec * 1000;
179-
mux_args.si_period_usecs = si_period_msec * 1000;
180-
mux_args.pcr_pid = pcr_pid;
181-
mux_args.transport_stream_id = VIDTV_DEFAULT_TS_ID;
182-
mux_args.network_id = VIDTV_DEFAULT_NETWORK_ID,
183-
mux_args.network_name = VIDTV_DEFAULT_NETWORK_NAME,
184-
mux_args.priv = dvb;
186+
mux_args.mux_buf_sz = mux_buf_sz;
185187

186188
dvb->streaming = true;
187-
dvb->mux = vidtv_mux_init(dvb->fe[0], dev, mux_args);
189+
dvb->mux = vidtv_mux_init(dvb->fe[0], dev, &mux_args);
188190
if (!dvb->mux)
189191
return -ENOMEM;
190192
vidtv_mux_start_thread(dvb->mux);

drivers/media/test-drivers/vidtv/vidtv_mux.c

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,7 @@ void vidtv_mux_stop_thread(struct vidtv_mux *m)
466466

467467
struct vidtv_mux *vidtv_mux_init(struct dvb_frontend *fe,
468468
struct device *dev,
469-
struct vidtv_mux_init_args args)
469+
struct vidtv_mux_init_args *args)
470470
{
471471
struct vidtv_mux *m;
472472

@@ -476,28 +476,28 @@ struct vidtv_mux *vidtv_mux_init(struct dvb_frontend *fe,
476476

477477
m->dev = dev;
478478
m->fe = fe;
479-
m->timing.pcr_period_usecs = args.pcr_period_usecs;
480-
m->timing.si_period_usecs = args.si_period_usecs;
479+
m->timing.pcr_period_usecs = args->pcr_period_usecs;
480+
m->timing.si_period_usecs = args->si_period_usecs;
481481

482-
m->mux_rate_kbytes_sec = args.mux_rate_kbytes_sec;
482+
m->mux_rate_kbytes_sec = args->mux_rate_kbytes_sec;
483483

484-
m->on_new_packets_available_cb = args.on_new_packets_available_cb;
484+
m->on_new_packets_available_cb = args->on_new_packets_available_cb;
485485

486-
m->mux_buf = vzalloc(args.mux_buf_sz);
486+
m->mux_buf = vzalloc(args->mux_buf_sz);
487487
if (!m->mux_buf)
488488
goto free_mux;
489489

490-
m->mux_buf_sz = args.mux_buf_sz;
490+
m->mux_buf_sz = args->mux_buf_sz;
491491

492-
m->pcr_pid = args.pcr_pid;
493-
m->transport_stream_id = args.transport_stream_id;
494-
m->priv = args.priv;
495-
m->network_id = args.network_id;
496-
m->network_name = kstrdup(args.network_name, GFP_KERNEL);
492+
m->pcr_pid = args->pcr_pid;
493+
m->transport_stream_id = args->transport_stream_id;
494+
m->priv = args->priv;
495+
m->network_id = args->network_id;
496+
m->network_name = kstrdup(args->network_name, GFP_KERNEL);
497497
m->timing.current_jiffies = get_jiffies_64();
498498

499-
if (args.channels)
500-
m->channels = args.channels;
499+
if (args->channels)
500+
m->channels = args->channels;
501501
else
502502
if (vidtv_channels_init(m) < 0)
503503
goto free_mux_buf;

drivers/media/test-drivers/vidtv/vidtv_mux.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ struct vidtv_mux_init_args {
170170

171171
struct vidtv_mux *vidtv_mux_init(struct dvb_frontend *fe,
172172
struct device *dev,
173-
struct vidtv_mux_init_args args);
173+
struct vidtv_mux_init_args *args);
174174
void vidtv_mux_destroy(struct vidtv_mux *m);
175175

176176
void vidtv_mux_start_thread(struct vidtv_mux *m);

0 commit comments

Comments
 (0)