media: vidtv: avoid data copy when initializing the multiplexer
authorMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tue, 22 Sep 2020 08:28:12 +0000 (10:28 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Thu, 26 Nov 2020 06:45:20 +0000 (07:45 +0100)
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>
drivers/media/test-drivers/vidtv/vidtv_bridge.c
drivers/media/test-drivers/vidtv/vidtv_mux.c
drivers/media/test-drivers/vidtv/vidtv_mux.h

index e846aaa..3fc7bf0 100644 (file)
@@ -161,7 +161,17 @@ vidtv_bridge_on_new_pkts_avail(void *priv, u8 *buf, u32 npkts)
 
 static int vidtv_start_streaming(struct vidtv_dvb *dvb)
 {
-       struct vidtv_mux_init_args mux_args = {0};
+       struct vidtv_mux_init_args mux_args = {
+               .mux_rate_kbytes_sec         = mux_rate_kbytes_sec,
+               .on_new_packets_available_cb = vidtv_bridge_on_new_pkts_avail,
+               .pcr_period_usecs            = pcr_period_msec * USEC_PER_MSEC,
+               .si_period_usecs             = si_period_msec * USEC_PER_MSEC,
+               .pcr_pid                     = pcr_pid,
+               .transport_stream_id         = VIDTV_DEFAULT_TS_ID,
+               .network_id                  = VIDTV_DEFAULT_NETWORK_ID,
+               .network_name                = VIDTV_DEFAULT_NETWORK_NAME,
+               .priv                        = dvb,
+       };
        struct device *dev = &dvb->pdev->dev;
        u32 mux_buf_sz;
 
@@ -170,21 +180,13 @@ static int vidtv_start_streaming(struct vidtv_dvb *dvb)
                return 0;
        }
 
-       mux_buf_sz = (mux_buf_sz_pkts) ? mux_buf_sz_pkts : vidtv_bridge_mux_buf_sz_for_mux_rate();
+       mux_buf_sz = (mux_buf_sz_pkts) ? mux_buf_sz_pkts :
+                                        vidtv_bridge_mux_buf_sz_for_mux_rate();
 
-       mux_args.mux_rate_kbytes_sec         = mux_rate_kbytes_sec;
-       mux_args.on_new_packets_available_cb = vidtv_bridge_on_new_pkts_avail;
-       mux_args.mux_buf_sz                  = mux_buf_sz;
-       mux_args.pcr_period_usecs            = pcr_period_msec * 1000;
-       mux_args.si_period_usecs             = si_period_msec * 1000;
-       mux_args.pcr_pid                     = pcr_pid;
-       mux_args.transport_stream_id         = VIDTV_DEFAULT_TS_ID;
-       mux_args.network_id                  = VIDTV_DEFAULT_NETWORK_ID,
-       mux_args.network_name                = VIDTV_DEFAULT_NETWORK_NAME,
-       mux_args.priv                        = dvb;
+       mux_args.mux_buf_sz  = mux_buf_sz;
 
        dvb->streaming = true;
-       dvb->mux = vidtv_mux_init(dvb->fe[0], dev, mux_args);
+       dvb->mux = vidtv_mux_init(dvb->fe[0], dev, &mux_args);
        if (!dvb->mux)
                return -ENOMEM;
        vidtv_mux_start_thread(dvb->mux);
index bba3f23..89b19f0 100644 (file)
@@ -466,7 +466,7 @@ void vidtv_mux_stop_thread(struct vidtv_mux *m)
 
 struct vidtv_mux *vidtv_mux_init(struct dvb_frontend *fe,
                                 struct device *dev,
-                                struct vidtv_mux_init_args args)
+                                struct vidtv_mux_init_args *args)
 {
        struct vidtv_mux *m;
 
@@ -476,28 +476,28 @@ struct vidtv_mux *vidtv_mux_init(struct dvb_frontend *fe,
 
        m->dev = dev;
        m->fe = fe;
-       m->timing.pcr_period_usecs = args.pcr_period_usecs;
-       m->timing.si_period_usecs  = args.si_period_usecs;
+       m->timing.pcr_period_usecs = args->pcr_period_usecs;
+       m->timing.si_period_usecs  = args->si_period_usecs;
 
-       m->mux_rate_kbytes_sec = args.mux_rate_kbytes_sec;
+       m->mux_rate_kbytes_sec = args->mux_rate_kbytes_sec;
 
-       m->on_new_packets_available_cb = args.on_new_packets_available_cb;
+       m->on_new_packets_available_cb = args->on_new_packets_available_cb;
 
-       m->mux_buf = vzalloc(args.mux_buf_sz);
+       m->mux_buf = vzalloc(args->mux_buf_sz);
        if (!m->mux_buf)
                goto free_mux;
 
-       m->mux_buf_sz = args.mux_buf_sz;
+       m->mux_buf_sz = args->mux_buf_sz;
 
-       m->pcr_pid = args.pcr_pid;
-       m->transport_stream_id = args.transport_stream_id;
-       m->priv = args.priv;
-       m->network_id = args.network_id;
-       m->network_name = kstrdup(args.network_name, GFP_KERNEL);
+       m->pcr_pid = args->pcr_pid;
+       m->transport_stream_id = args->transport_stream_id;
+       m->priv = args->priv;
+       m->network_id = args->network_id;
+       m->network_name = kstrdup(args->network_name, GFP_KERNEL);
        m->timing.current_jiffies = get_jiffies_64();
 
-       if (args.channels)
-               m->channels = args.channels;
+       if (args->channels)
+               m->channels = args->channels;
        else
                if (vidtv_channels_init(m) < 0)
                        goto free_mux_buf;
index 005b707..e186094 100644 (file)
@@ -170,7 +170,7 @@ struct vidtv_mux_init_args {
 
 struct vidtv_mux *vidtv_mux_init(struct dvb_frontend *fe,
                                 struct device *dev,
-                                struct vidtv_mux_init_args args);
+                                struct vidtv_mux_init_args *args);
 void vidtv_mux_destroy(struct vidtv_mux *m);
 
 void vidtv_mux_start_thread(struct vidtv_mux *m);