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;