Message ID | 20230602101140.2040141-5-ckeepax@opensource.cirrus.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2,1/5] soundwire: stream: Add missing clear of alloc_slave_rt | expand |
On 6/2/23 05:11, Charles Keepax wrote: > There is a lot of code using gotos to skip small sections of code, this > is a fairly dubious use of a goto, especially when the level of > intentation is really low. Most of this code doesn't even breach 80 > characters when naively shifted over. > > Simplify the code a bit, by replacing these unnecessary gotos with > simple ifs. > > Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> > --- > > Changes since v1: > - Split out the inversion of the alloc_*_rt logic > > Worth noting this patch has no functional corrections it is just a > stylistic change, so as Pierre said on v1 we could just leave things > as is. Personally, I would prefer to merge it though, whilst the diff > is a little more of a pain to review (hopefully eased somewhat by > splitting out the alloc_*_rt logic into a separate patch), the > resulting code reads much nicer and the code will be read a lot more > times than this patch will be. Indeed, the resulting code is much nicer to look at. I ignored the diffs and just looked at the result to make up my mind. Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> > > Thanks, > Charles > > drivers/soundwire/stream.c | 124 +++++++++++++++++-------------------- > 1 file changed, 56 insertions(+), 68 deletions(-) > > diff --git a/drivers/soundwire/stream.c b/drivers/soundwire/stream.c > index df5600a80c174..93baca08a0dea 100644 > --- a/drivers/soundwire/stream.c > +++ b/drivers/soundwire/stream.c > @@ -1355,25 +1355,23 @@ static int _sdw_prepare_stream(struct sdw_stream_runtime *stream, > return -EINVAL; > } > > - if (!update_params) > - goto program_params; > - > - /* Increment cumulative bus bandwidth */ > - /* TODO: Update this during Device-Device support */ > - bus->params.bandwidth += m_rt->stream->params.rate * > - m_rt->ch_count * m_rt->stream->params.bps; > - > - /* Compute params */ > - if (bus->compute_params) { > - ret = bus->compute_params(bus); > - if (ret < 0) { > - dev_err(bus->dev, "Compute params failed: %d\n", > - ret); > - goto restore_params; > + if (update_params) { > + /* Increment cumulative bus bandwidth */ > + /* TODO: Update this during Device-Device support */ > + bus->params.bandwidth += m_rt->stream->params.rate * > + m_rt->ch_count * m_rt->stream->params.bps; > + > + /* Compute params */ > + if (bus->compute_params) { > + ret = bus->compute_params(bus); > + if (ret < 0) { > + dev_err(bus->dev, "Compute params failed: %d\n", > + ret); > + goto restore_params; > + } > } > } > > -program_params: > /* Program params */ > ret = sdw_program_params(bus, true); > if (ret < 0) { > @@ -1876,30 +1874,25 @@ int sdw_stream_add_master(struct sdw_bus *bus, > * it first), if so skip allocation and go to configuration > */ > m_rt = sdw_master_rt_find(bus, stream); > - if (m_rt) > - goto skip_alloc_master_rt; > - > - m_rt = sdw_master_rt_alloc(bus, stream); > if (!m_rt) { > - dev_err(bus->dev, "%s: Master runtime alloc failed for stream:%s\n", > - __func__, stream->name); > - ret = -ENOMEM; > - goto unlock; > - } > - > - alloc_master_rt = true; > -skip_alloc_master_rt: > - > - if (sdw_master_port_allocated(m_rt)) > - goto skip_alloc_master_port; > + m_rt = sdw_master_rt_alloc(bus, stream); > + if (!m_rt) { > + dev_err(bus->dev, "%s: Master runtime alloc failed for stream:%s\n", > + __func__, stream->name); > + ret = -ENOMEM; > + goto unlock; > + } > > - ret = sdw_master_port_alloc(m_rt, num_ports); > - if (ret) > - goto alloc_error; > + alloc_master_rt = true; > + } > > - stream->m_rt_count++; > + if (!sdw_master_port_allocated(m_rt)) { > + ret = sdw_master_port_alloc(m_rt, num_ports); > + if (ret) > + goto alloc_error; > > -skip_alloc_master_port: > + stream->m_rt_count++; > + } > > ret = sdw_master_rt_config(m_rt, stream_config); > if (ret < 0) > @@ -1992,46 +1985,41 @@ int sdw_stream_add_slave(struct sdw_slave *slave, > * and go to configuration > */ > m_rt = sdw_master_rt_find(slave->bus, stream); > - if (m_rt) > - goto skip_alloc_master_rt; > - > - /* > - * If this API is invoked by Slave first then m_rt is not valid. > - * So, allocate m_rt and add Slave to it. > - */ > - m_rt = sdw_master_rt_alloc(slave->bus, stream); > if (!m_rt) { > - dev_err(&slave->dev, "%s: Master runtime alloc failed for stream:%s\n", > - __func__, stream->name); > - ret = -ENOMEM; > - goto unlock; > - } > + /* > + * If this API is invoked by Slave first then m_rt is not valid. > + * So, allocate m_rt and add Slave to it. > + */ > + m_rt = sdw_master_rt_alloc(slave->bus, stream); > + if (!m_rt) { > + dev_err(&slave->dev, "%s: Master runtime alloc failed for stream:%s\n", > + __func__, stream->name); > + ret = -ENOMEM; > + goto unlock; > + } > > - alloc_master_rt = true; > + alloc_master_rt = true; > + } > > -skip_alloc_master_rt: > s_rt = sdw_slave_rt_find(slave, stream); > - if (s_rt) > - goto skip_alloc_slave_rt; > - > - s_rt = sdw_slave_rt_alloc(slave, m_rt); > if (!s_rt) { > - dev_err(&slave->dev, "Slave runtime alloc failed for stream:%s\n", stream->name); > - ret = -ENOMEM; > - goto alloc_error; > - } > - > - alloc_slave_rt = true; > + s_rt = sdw_slave_rt_alloc(slave, m_rt); > + if (!s_rt) { > + dev_err(&slave->dev, "Slave runtime alloc failed for stream:%s\n", > + stream->name); > + ret = -ENOMEM; > + goto alloc_error; > + } > > -skip_alloc_slave_rt: > - if (sdw_slave_port_allocated(s_rt)) > - goto skip_port_alloc; > + alloc_slave_rt = true; > + } > > - ret = sdw_slave_port_alloc(slave, s_rt, num_ports); > - if (ret) > - goto alloc_error; > + if (!sdw_slave_port_allocated(s_rt)) { > + ret = sdw_slave_port_alloc(slave, s_rt, num_ports); > + if (ret) > + goto alloc_error; > + } > > -skip_port_alloc: > ret = sdw_master_rt_config(m_rt, stream_config); > if (ret) > goto unlock;
diff --git a/drivers/soundwire/stream.c b/drivers/soundwire/stream.c index df5600a80c174..93baca08a0dea 100644 --- a/drivers/soundwire/stream.c +++ b/drivers/soundwire/stream.c @@ -1355,25 +1355,23 @@ static int _sdw_prepare_stream(struct sdw_stream_runtime *stream, return -EINVAL; } - if (!update_params) - goto program_params; - - /* Increment cumulative bus bandwidth */ - /* TODO: Update this during Device-Device support */ - bus->params.bandwidth += m_rt->stream->params.rate * - m_rt->ch_count * m_rt->stream->params.bps; - - /* Compute params */ - if (bus->compute_params) { - ret = bus->compute_params(bus); - if (ret < 0) { - dev_err(bus->dev, "Compute params failed: %d\n", - ret); - goto restore_params; + if (update_params) { + /* Increment cumulative bus bandwidth */ + /* TODO: Update this during Device-Device support */ + bus->params.bandwidth += m_rt->stream->params.rate * + m_rt->ch_count * m_rt->stream->params.bps; + + /* Compute params */ + if (bus->compute_params) { + ret = bus->compute_params(bus); + if (ret < 0) { + dev_err(bus->dev, "Compute params failed: %d\n", + ret); + goto restore_params; + } } } -program_params: /* Program params */ ret = sdw_program_params(bus, true); if (ret < 0) { @@ -1876,30 +1874,25 @@ int sdw_stream_add_master(struct sdw_bus *bus, * it first), if so skip allocation and go to configuration */ m_rt = sdw_master_rt_find(bus, stream); - if (m_rt) - goto skip_alloc_master_rt; - - m_rt = sdw_master_rt_alloc(bus, stream); if (!m_rt) { - dev_err(bus->dev, "%s: Master runtime alloc failed for stream:%s\n", - __func__, stream->name); - ret = -ENOMEM; - goto unlock; - } - - alloc_master_rt = true; -skip_alloc_master_rt: - - if (sdw_master_port_allocated(m_rt)) - goto skip_alloc_master_port; + m_rt = sdw_master_rt_alloc(bus, stream); + if (!m_rt) { + dev_err(bus->dev, "%s: Master runtime alloc failed for stream:%s\n", + __func__, stream->name); + ret = -ENOMEM; + goto unlock; + } - ret = sdw_master_port_alloc(m_rt, num_ports); - if (ret) - goto alloc_error; + alloc_master_rt = true; + } - stream->m_rt_count++; + if (!sdw_master_port_allocated(m_rt)) { + ret = sdw_master_port_alloc(m_rt, num_ports); + if (ret) + goto alloc_error; -skip_alloc_master_port: + stream->m_rt_count++; + } ret = sdw_master_rt_config(m_rt, stream_config); if (ret < 0) @@ -1992,46 +1985,41 @@ int sdw_stream_add_slave(struct sdw_slave *slave, * and go to configuration */ m_rt = sdw_master_rt_find(slave->bus, stream); - if (m_rt) - goto skip_alloc_master_rt; - - /* - * If this API is invoked by Slave first then m_rt is not valid. - * So, allocate m_rt and add Slave to it. - */ - m_rt = sdw_master_rt_alloc(slave->bus, stream); if (!m_rt) { - dev_err(&slave->dev, "%s: Master runtime alloc failed for stream:%s\n", - __func__, stream->name); - ret = -ENOMEM; - goto unlock; - } + /* + * If this API is invoked by Slave first then m_rt is not valid. + * So, allocate m_rt and add Slave to it. + */ + m_rt = sdw_master_rt_alloc(slave->bus, stream); + if (!m_rt) { + dev_err(&slave->dev, "%s: Master runtime alloc failed for stream:%s\n", + __func__, stream->name); + ret = -ENOMEM; + goto unlock; + } - alloc_master_rt = true; + alloc_master_rt = true; + } -skip_alloc_master_rt: s_rt = sdw_slave_rt_find(slave, stream); - if (s_rt) - goto skip_alloc_slave_rt; - - s_rt = sdw_slave_rt_alloc(slave, m_rt); if (!s_rt) { - dev_err(&slave->dev, "Slave runtime alloc failed for stream:%s\n", stream->name); - ret = -ENOMEM; - goto alloc_error; - } - - alloc_slave_rt = true; + s_rt = sdw_slave_rt_alloc(slave, m_rt); + if (!s_rt) { + dev_err(&slave->dev, "Slave runtime alloc failed for stream:%s\n", + stream->name); + ret = -ENOMEM; + goto alloc_error; + } -skip_alloc_slave_rt: - if (sdw_slave_port_allocated(s_rt)) - goto skip_port_alloc; + alloc_slave_rt = true; + } - ret = sdw_slave_port_alloc(slave, s_rt, num_ports); - if (ret) - goto alloc_error; + if (!sdw_slave_port_allocated(s_rt)) { + ret = sdw_slave_port_alloc(slave, s_rt, num_ports); + if (ret) + goto alloc_error; + } -skip_port_alloc: ret = sdw_master_rt_config(m_rt, stream_config); if (ret) goto unlock;
There is a lot of code using gotos to skip small sections of code, this is a fairly dubious use of a goto, especially when the level of intentation is really low. Most of this code doesn't even breach 80 characters when naively shifted over. Simplify the code a bit, by replacing these unnecessary gotos with simple ifs. Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> --- Changes since v1: - Split out the inversion of the alloc_*_rt logic Worth noting this patch has no functional corrections it is just a stylistic change, so as Pierre said on v1 we could just leave things as is. Personally, I would prefer to merge it though, whilst the diff is a little more of a pain to review (hopefully eased somewhat by splitting out the alloc_*_rt logic into a separate patch), the resulting code reads much nicer and the code will be read a lot more times than this patch will be. Thanks, Charles drivers/soundwire/stream.c | 124 +++++++++++++++++-------------------- 1 file changed, 56 insertions(+), 68 deletions(-)