* [PATCH 0/3] ALSA-RME Digi32: Fine-tuning for seven function implementations
@ 2017-11-17 21:14 ` SF Markus Elfring
0 siblings, 0 replies; 12+ messages in thread
From: SF Markus Elfring @ 2017-11-17 21:14 UTC (permalink / raw
To: alsa-devel, Bhumika Goyal, Jaroslav Kysela, Takashi Iwai,
Takashi Sakamoto
Cc: LKML, kernel-janitors
From: Markus Elfring <elfring@users.sourceforge.net>
Date: Fri, 17 Nov 2017 22:08:44 +0100
A few update suggestions were taken into account
from static source code analysis.
Markus Elfring (3):
Adjust 15 function calls together with a variable assignment
Use common error handling code in snd_rme32_probe()
Improve unlocking of an IRQ in two functions
sound/pci/rme32.c | 127 +++++++++++++++++++++++++++++++-----------------------
1 file changed, 74 insertions(+), 53 deletions(-)
--
2.15.0
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 0/3] ALSA-RME Digi32: Fine-tuning for seven function implementations
@ 2017-11-17 21:14 ` SF Markus Elfring
0 siblings, 0 replies; 12+ messages in thread
From: SF Markus Elfring @ 2017-11-17 21:14 UTC (permalink / raw
To: alsa-devel, Bhumika Goyal, Jaroslav Kysela, Takashi Iwai,
Takashi Sakamoto
Cc: kernel-janitors, LKML
From: Markus Elfring <elfring@users.sourceforge.net>
Date: Fri, 17 Nov 2017 22:08:44 +0100
A few update suggestions were taken into account
from static source code analysis.
Markus Elfring (3):
Adjust 15 function calls together with a variable assignment
Use common error handling code in snd_rme32_probe()
Improve unlocking of an IRQ in two functions
sound/pci/rme32.c | 127 +++++++++++++++++++++++++++++++-----------------------
1 file changed, 74 insertions(+), 53 deletions(-)
--
2.15.0
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 0/3] ALSA-RME Digi32: Fine-tuning for seven function implementations
@ 2017-11-17 21:14 ` SF Markus Elfring
0 siblings, 0 replies; 12+ messages in thread
From: SF Markus Elfring @ 2017-11-17 21:14 UTC (permalink / raw
To: alsa-devel, Bhumika Goyal, Jaroslav Kysela, Takashi Iwai,
Takashi Sakamoto
Cc: kernel-janitors, LKML
From: Markus Elfring <elfring@users.sourceforge.net>
Date: Fri, 17 Nov 2017 22:08:44 +0100
A few update suggestions were taken into account
from static source code analysis.
Markus Elfring (3):
Adjust 15 function calls together with a variable assignment
Use common error handling code in snd_rme32_probe()
Improve unlocking of an IRQ in two functions
sound/pci/rme32.c | 127 +++++++++++++++++++++++++++++++-----------------------
1 file changed, 74 insertions(+), 53 deletions(-)
--
2.15.0
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/3] ALSA: rme32: Adjust 15 function calls together with a variable assignment
2017-11-17 21:14 ` SF Markus Elfring
(?)
@ 2017-11-17 21:16 ` SF Markus Elfring
-1 siblings, 0 replies; 12+ messages in thread
From: SF Markus Elfring @ 2017-11-17 21:16 UTC (permalink / raw
To: alsa-devel, Bhumika Goyal, Jaroslav Kysela, Takashi Iwai,
Takashi Sakamoto
Cc: LKML, kernel-janitors
From: Markus Elfring <elfring@users.sourceforge.net>
Date: Fri, 17 Nov 2017 21:00:37 +0100
The script "checkpatch.pl" pointed information out like the following.
ERROR: do not use assignment in if condition
Thus fix affected source code places.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
sound/pci/rme32.c | 65 ++++++++++++++++++++++++++++++++++++-------------------
1 file changed, 43 insertions(+), 22 deletions(-)
diff --git a/sound/pci/rme32.c b/sound/pci/rme32.c
index f0906ba416d4..e58e9873c514 100644
--- a/sound/pci/rme32.c
+++ b/sound/pci/rme32.c
@@ -691,11 +691,16 @@ snd_rme32_playback_hw_params(struct snd_pcm_substream *substream,
spin_unlock_irq(&rme32->lock);
return -EIO;
}
- } else if ((err = snd_rme32_playback_setrate(rme32, params_rate(params))) < 0) {
- spin_unlock_irq(&rme32->lock);
- return err;
+ } else {
+ err = snd_rme32_playback_setrate(rme32, params_rate(params));
+ if (err < 0) {
+ spin_unlock_irq(&rme32->lock);
+ return err;
+ }
}
- if ((err = snd_rme32_setformat(rme32, params_format(params))) < 0) {
+
+ err = snd_rme32_setformat(rme32, params_format(params));
+ if (err < 0) {
spin_unlock_irq(&rme32->lock);
return err;
}
@@ -743,15 +748,18 @@ snd_rme32_capture_hw_params(struct snd_pcm_substream *substream,
rme32->wcreg |= RME32_WCR_AUTOSYNC;
writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
- if ((err = snd_rme32_setformat(rme32, params_format(params))) < 0) {
+ err = snd_rme32_setformat(rme32, params_format(params));
+ if (err < 0) {
spin_unlock_irq(&rme32->lock);
return err;
}
- if ((err = snd_rme32_playback_setrate(rme32, params_rate(params))) < 0) {
+ err = snd_rme32_playback_setrate(rme32, params_rate(params));
+ if (err < 0) {
spin_unlock_irq(&rme32->lock);
return err;
}
- if ((rate = snd_rme32_capture_getrate(rme32, &isadat)) > 0) {
+ rate = snd_rme32_capture_getrate(rme32, &isadat);
+ if (rate > 0) {
if ((int)params_rate(params) != rate) {
spin_unlock_irq(&rme32->lock);
return -EIO;
@@ -923,7 +931,9 @@ static int snd_rme32_capture_spdif_open(struct snd_pcm_substream *substream)
runtime->hw.rates |= SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000;
runtime->hw.rate_max = 96000;
}
- if ((rate = snd_rme32_capture_getrate(rme32, &isadat)) > 0) {
+
+ rate = snd_rme32_capture_getrate(rme32, &isadat);
+ if (rate > 0) {
if (isadat) {
return -EIO;
}
@@ -983,7 +993,9 @@ snd_rme32_capture_adat_open(struct snd_pcm_substream *substream)
runtime->hw = snd_rme32_adat_fd_info;
else
runtime->hw = snd_rme32_adat_info;
- if ((rate = snd_rme32_capture_getrate(rme32, &isadat)) > 0) {
+
+ rate = snd_rme32_capture_getrate(rme32, &isadat);
+ if (rate > 0) {
if (!isadat) {
return -EIO;
}
@@ -1357,10 +1369,12 @@ static int snd_rme32_create(struct rme32 *rme32)
rme32->irq = -1;
spin_lock_init(&rme32->lock);
- if ((err = pci_enable_device(pci)) < 0)
+ err = pci_enable_device(pci);
+ if (err < 0)
return err;
- if ((err = pci_request_regions(pci, "RME32")) < 0)
+ err = pci_request_regions(pci, "RME32");
+ if (err < 0)
return err;
rme32->port = pci_resource_start(rme32->pci, 0);
@@ -1383,9 +1397,11 @@ static int snd_rme32_create(struct rme32 *rme32)
pci_read_config_byte(pci, 8, &rme32->rev);
/* set up ALSA pcm device for S/PDIF */
- if ((err = snd_pcm_new(rme32->card, "Digi32 IEC958", 0, 1, 1, &rme32->spdif_pcm)) < 0) {
+ err = snd_pcm_new(rme32->card, "Digi32 IEC958",
+ 0, 1, 1, &rme32->spdif_pcm);
+ if (err < 0)
return err;
- }
+
rme32->spdif_pcm->private_data = rme32;
rme32->spdif_pcm->private_free = snd_rme32_free_spdif_pcm;
strcpy(rme32->spdif_pcm->name, "Digi32 IEC958");
@@ -1413,11 +1429,11 @@ static int snd_rme32_create(struct rme32 *rme32)
rme32->adat_pcm = NULL;
}
else {
- if ((err = snd_pcm_new(rme32->card, "Digi32 ADAT", 1,
- 1, 1, &rme32->adat_pcm)) < 0)
- {
+ err = snd_pcm_new(rme32->card, "Digi32 ADAT",
+ 1, 1, 1, &rme32->adat_pcm);
+ if (err < 0)
return err;
- }
+
rme32->adat_pcm->private_data = rme32;
rme32->adat_pcm->private_free = snd_rme32_free_adat_pcm;
strcpy(rme32->adat_pcm->name, "Digi32 ADAT");
@@ -1460,9 +1476,9 @@ static int snd_rme32_create(struct rme32 *rme32)
/* init switch interface */
- if ((err = snd_rme32_create_switches(rme32->card, rme32)) < 0) {
+ err = snd_rme32_create_switches(rme32->card, rme32);
+ if (err < 0)
return err;
- }
/* init proc interface */
snd_rme32_proc_init(rme32);
@@ -1908,7 +1924,9 @@ static int snd_rme32_create_switches(struct snd_card *card, struct rme32 * rme32
struct snd_kcontrol *kctl;
for (idx = 0; idx < (int)ARRAY_SIZE(snd_rme32_controls); idx++) {
- if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_rme32_controls[idx], rme32))) < 0)
+ kctl = snd_ctl_new1(&snd_rme32_controls[idx], rme32);
+ err = snd_ctl_add(card, kctl);
+ if (err < 0)
return err;
if (idx == 1) /* IEC958 (S/PDIF) Stream */
rme32->spdif_ctl = kctl;
@@ -1952,7 +1970,9 @@ snd_rme32_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
rme32->pci = pci;
if (fullduplex[dev])
rme32->fullduplex_mode = 1;
- if ((err = snd_rme32_create(rme32)) < 0) {
+
+ err = snd_rme32_create(rme32);
+ if (err < 0) {
snd_card_free(card);
return err;
}
@@ -1972,7 +1992,8 @@ snd_rme32_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
sprintf(card->longname, "%s (Rev. %d) at 0x%lx, irq %d",
card->shortname, rme32->rev, rme32->port, rme32->irq);
- if ((err = snd_card_register(card)) < 0) {
+ err = snd_card_register(card);
+ if (err < 0) {
snd_card_free(card);
return err;
}
--
2.15.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 1/3] ALSA: rme32: Adjust 15 function calls together with a variable assignment
@ 2017-11-17 21:16 ` SF Markus Elfring
0 siblings, 0 replies; 12+ messages in thread
From: SF Markus Elfring @ 2017-11-17 21:16 UTC (permalink / raw
To: alsa-devel, Bhumika Goyal, Jaroslav Kysela, Takashi Iwai,
Takashi Sakamoto
Cc: kernel-janitors, LKML
From: Markus Elfring <elfring@users.sourceforge.net>
Date: Fri, 17 Nov 2017 21:00:37 +0100
The script "checkpatch.pl" pointed information out like the following.
ERROR: do not use assignment in if condition
Thus fix affected source code places.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
sound/pci/rme32.c | 65 ++++++++++++++++++++++++++++++++++++-------------------
1 file changed, 43 insertions(+), 22 deletions(-)
diff --git a/sound/pci/rme32.c b/sound/pci/rme32.c
index f0906ba416d4..e58e9873c514 100644
--- a/sound/pci/rme32.c
+++ b/sound/pci/rme32.c
@@ -691,11 +691,16 @@ snd_rme32_playback_hw_params(struct snd_pcm_substream *substream,
spin_unlock_irq(&rme32->lock);
return -EIO;
}
- } else if ((err = snd_rme32_playback_setrate(rme32, params_rate(params))) < 0) {
- spin_unlock_irq(&rme32->lock);
- return err;
+ } else {
+ err = snd_rme32_playback_setrate(rme32, params_rate(params));
+ if (err < 0) {
+ spin_unlock_irq(&rme32->lock);
+ return err;
+ }
}
- if ((err = snd_rme32_setformat(rme32, params_format(params))) < 0) {
+
+ err = snd_rme32_setformat(rme32, params_format(params));
+ if (err < 0) {
spin_unlock_irq(&rme32->lock);
return err;
}
@@ -743,15 +748,18 @@ snd_rme32_capture_hw_params(struct snd_pcm_substream *substream,
rme32->wcreg |= RME32_WCR_AUTOSYNC;
writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
- if ((err = snd_rme32_setformat(rme32, params_format(params))) < 0) {
+ err = snd_rme32_setformat(rme32, params_format(params));
+ if (err < 0) {
spin_unlock_irq(&rme32->lock);
return err;
}
- if ((err = snd_rme32_playback_setrate(rme32, params_rate(params))) < 0) {
+ err = snd_rme32_playback_setrate(rme32, params_rate(params));
+ if (err < 0) {
spin_unlock_irq(&rme32->lock);
return err;
}
- if ((rate = snd_rme32_capture_getrate(rme32, &isadat)) > 0) {
+ rate = snd_rme32_capture_getrate(rme32, &isadat);
+ if (rate > 0) {
if ((int)params_rate(params) != rate) {
spin_unlock_irq(&rme32->lock);
return -EIO;
@@ -923,7 +931,9 @@ static int snd_rme32_capture_spdif_open(struct snd_pcm_substream *substream)
runtime->hw.rates |= SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000;
runtime->hw.rate_max = 96000;
}
- if ((rate = snd_rme32_capture_getrate(rme32, &isadat)) > 0) {
+
+ rate = snd_rme32_capture_getrate(rme32, &isadat);
+ if (rate > 0) {
if (isadat) {
return -EIO;
}
@@ -983,7 +993,9 @@ snd_rme32_capture_adat_open(struct snd_pcm_substream *substream)
runtime->hw = snd_rme32_adat_fd_info;
else
runtime->hw = snd_rme32_adat_info;
- if ((rate = snd_rme32_capture_getrate(rme32, &isadat)) > 0) {
+
+ rate = snd_rme32_capture_getrate(rme32, &isadat);
+ if (rate > 0) {
if (!isadat) {
return -EIO;
}
@@ -1357,10 +1369,12 @@ static int snd_rme32_create(struct rme32 *rme32)
rme32->irq = -1;
spin_lock_init(&rme32->lock);
- if ((err = pci_enable_device(pci)) < 0)
+ err = pci_enable_device(pci);
+ if (err < 0)
return err;
- if ((err = pci_request_regions(pci, "RME32")) < 0)
+ err = pci_request_regions(pci, "RME32");
+ if (err < 0)
return err;
rme32->port = pci_resource_start(rme32->pci, 0);
@@ -1383,9 +1397,11 @@ static int snd_rme32_create(struct rme32 *rme32)
pci_read_config_byte(pci, 8, &rme32->rev);
/* set up ALSA pcm device for S/PDIF */
- if ((err = snd_pcm_new(rme32->card, "Digi32 IEC958", 0, 1, 1, &rme32->spdif_pcm)) < 0) {
+ err = snd_pcm_new(rme32->card, "Digi32 IEC958",
+ 0, 1, 1, &rme32->spdif_pcm);
+ if (err < 0)
return err;
- }
+
rme32->spdif_pcm->private_data = rme32;
rme32->spdif_pcm->private_free = snd_rme32_free_spdif_pcm;
strcpy(rme32->spdif_pcm->name, "Digi32 IEC958");
@@ -1413,11 +1429,11 @@ static int snd_rme32_create(struct rme32 *rme32)
rme32->adat_pcm = NULL;
}
else {
- if ((err = snd_pcm_new(rme32->card, "Digi32 ADAT", 1,
- 1, 1, &rme32->adat_pcm)) < 0)
- {
+ err = snd_pcm_new(rme32->card, "Digi32 ADAT",
+ 1, 1, 1, &rme32->adat_pcm);
+ if (err < 0)
return err;
- }
+
rme32->adat_pcm->private_data = rme32;
rme32->adat_pcm->private_free = snd_rme32_free_adat_pcm;
strcpy(rme32->adat_pcm->name, "Digi32 ADAT");
@@ -1460,9 +1476,9 @@ static int snd_rme32_create(struct rme32 *rme32)
/* init switch interface */
- if ((err = snd_rme32_create_switches(rme32->card, rme32)) < 0) {
+ err = snd_rme32_create_switches(rme32->card, rme32);
+ if (err < 0)
return err;
- }
/* init proc interface */
snd_rme32_proc_init(rme32);
@@ -1908,7 +1924,9 @@ static int snd_rme32_create_switches(struct snd_card *card, struct rme32 * rme32
struct snd_kcontrol *kctl;
for (idx = 0; idx < (int)ARRAY_SIZE(snd_rme32_controls); idx++) {
- if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_rme32_controls[idx], rme32))) < 0)
+ kctl = snd_ctl_new1(&snd_rme32_controls[idx], rme32);
+ err = snd_ctl_add(card, kctl);
+ if (err < 0)
return err;
if (idx == 1) /* IEC958 (S/PDIF) Stream */
rme32->spdif_ctl = kctl;
@@ -1952,7 +1970,9 @@ snd_rme32_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
rme32->pci = pci;
if (fullduplex[dev])
rme32->fullduplex_mode = 1;
- if ((err = snd_rme32_create(rme32)) < 0) {
+
+ err = snd_rme32_create(rme32);
+ if (err < 0) {
snd_card_free(card);
return err;
}
@@ -1972,7 +1992,8 @@ snd_rme32_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
sprintf(card->longname, "%s (Rev. %d) at 0x%lx, irq %d",
card->shortname, rme32->rev, rme32->port, rme32->irq);
- if ((err = snd_card_register(card)) < 0) {
+ err = snd_card_register(card);
+ if (err < 0) {
snd_card_free(card);
return err;
}
--
2.15.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 1/3] ALSA: rme32: Adjust 15 function calls together with a variable assignment
@ 2017-11-17 21:16 ` SF Markus Elfring
0 siblings, 0 replies; 12+ messages in thread
From: SF Markus Elfring @ 2017-11-17 21:16 UTC (permalink / raw
To: alsa-devel, Bhumika Goyal, Jaroslav Kysela, Takashi Iwai,
Takashi Sakamoto
Cc: kernel-janitors, LKML
From: Markus Elfring <elfring@users.sourceforge.net>
Date: Fri, 17 Nov 2017 21:00:37 +0100
The script "checkpatch.pl" pointed information out like the following.
ERROR: do not use assignment in if condition
Thus fix affected source code places.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
sound/pci/rme32.c | 65 ++++++++++++++++++++++++++++++++++++-------------------
1 file changed, 43 insertions(+), 22 deletions(-)
diff --git a/sound/pci/rme32.c b/sound/pci/rme32.c
index f0906ba416d4..e58e9873c514 100644
--- a/sound/pci/rme32.c
+++ b/sound/pci/rme32.c
@@ -691,11 +691,16 @@ snd_rme32_playback_hw_params(struct snd_pcm_substream *substream,
spin_unlock_irq(&rme32->lock);
return -EIO;
}
- } else if ((err = snd_rme32_playback_setrate(rme32, params_rate(params))) < 0) {
- spin_unlock_irq(&rme32->lock);
- return err;
+ } else {
+ err = snd_rme32_playback_setrate(rme32, params_rate(params));
+ if (err < 0) {
+ spin_unlock_irq(&rme32->lock);
+ return err;
+ }
}
- if ((err = snd_rme32_setformat(rme32, params_format(params))) < 0) {
+
+ err = snd_rme32_setformat(rme32, params_format(params));
+ if (err < 0) {
spin_unlock_irq(&rme32->lock);
return err;
}
@@ -743,15 +748,18 @@ snd_rme32_capture_hw_params(struct snd_pcm_substream *substream,
rme32->wcreg |= RME32_WCR_AUTOSYNC;
writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
- if ((err = snd_rme32_setformat(rme32, params_format(params))) < 0) {
+ err = snd_rme32_setformat(rme32, params_format(params));
+ if (err < 0) {
spin_unlock_irq(&rme32->lock);
return err;
}
- if ((err = snd_rme32_playback_setrate(rme32, params_rate(params))) < 0) {
+ err = snd_rme32_playback_setrate(rme32, params_rate(params));
+ if (err < 0) {
spin_unlock_irq(&rme32->lock);
return err;
}
- if ((rate = snd_rme32_capture_getrate(rme32, &isadat)) > 0) {
+ rate = snd_rme32_capture_getrate(rme32, &isadat);
+ if (rate > 0) {
if ((int)params_rate(params) != rate) {
spin_unlock_irq(&rme32->lock);
return -EIO;
@@ -923,7 +931,9 @@ static int snd_rme32_capture_spdif_open(struct snd_pcm_substream *substream)
runtime->hw.rates |= SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000;
runtime->hw.rate_max = 96000;
}
- if ((rate = snd_rme32_capture_getrate(rme32, &isadat)) > 0) {
+
+ rate = snd_rme32_capture_getrate(rme32, &isadat);
+ if (rate > 0) {
if (isadat) {
return -EIO;
}
@@ -983,7 +993,9 @@ snd_rme32_capture_adat_open(struct snd_pcm_substream *substream)
runtime->hw = snd_rme32_adat_fd_info;
else
runtime->hw = snd_rme32_adat_info;
- if ((rate = snd_rme32_capture_getrate(rme32, &isadat)) > 0) {
+
+ rate = snd_rme32_capture_getrate(rme32, &isadat);
+ if (rate > 0) {
if (!isadat) {
return -EIO;
}
@@ -1357,10 +1369,12 @@ static int snd_rme32_create(struct rme32 *rme32)
rme32->irq = -1;
spin_lock_init(&rme32->lock);
- if ((err = pci_enable_device(pci)) < 0)
+ err = pci_enable_device(pci);
+ if (err < 0)
return err;
- if ((err = pci_request_regions(pci, "RME32")) < 0)
+ err = pci_request_regions(pci, "RME32");
+ if (err < 0)
return err;
rme32->port = pci_resource_start(rme32->pci, 0);
@@ -1383,9 +1397,11 @@ static int snd_rme32_create(struct rme32 *rme32)
pci_read_config_byte(pci, 8, &rme32->rev);
/* set up ALSA pcm device for S/PDIF */
- if ((err = snd_pcm_new(rme32->card, "Digi32 IEC958", 0, 1, 1, &rme32->spdif_pcm)) < 0) {
+ err = snd_pcm_new(rme32->card, "Digi32 IEC958",
+ 0, 1, 1, &rme32->spdif_pcm);
+ if (err < 0)
return err;
- }
+
rme32->spdif_pcm->private_data = rme32;
rme32->spdif_pcm->private_free = snd_rme32_free_spdif_pcm;
strcpy(rme32->spdif_pcm->name, "Digi32 IEC958");
@@ -1413,11 +1429,11 @@ static int snd_rme32_create(struct rme32 *rme32)
rme32->adat_pcm = NULL;
}
else {
- if ((err = snd_pcm_new(rme32->card, "Digi32 ADAT", 1,
- 1, 1, &rme32->adat_pcm)) < 0)
- {
+ err = snd_pcm_new(rme32->card, "Digi32 ADAT",
+ 1, 1, 1, &rme32->adat_pcm);
+ if (err < 0)
return err;
- }
+
rme32->adat_pcm->private_data = rme32;
rme32->adat_pcm->private_free = snd_rme32_free_adat_pcm;
strcpy(rme32->adat_pcm->name, "Digi32 ADAT");
@@ -1460,9 +1476,9 @@ static int snd_rme32_create(struct rme32 *rme32)
/* init switch interface */
- if ((err = snd_rme32_create_switches(rme32->card, rme32)) < 0) {
+ err = snd_rme32_create_switches(rme32->card, rme32);
+ if (err < 0)
return err;
- }
/* init proc interface */
snd_rme32_proc_init(rme32);
@@ -1908,7 +1924,9 @@ static int snd_rme32_create_switches(struct snd_card *card, struct rme32 * rme32
struct snd_kcontrol *kctl;
for (idx = 0; idx < (int)ARRAY_SIZE(snd_rme32_controls); idx++) {
- if ((err = snd_ctl_add(card, kctl = snd_ctl_new1(&snd_rme32_controls[idx], rme32))) < 0)
+ kctl = snd_ctl_new1(&snd_rme32_controls[idx], rme32);
+ err = snd_ctl_add(card, kctl);
+ if (err < 0)
return err;
if (idx = 1) /* IEC958 (S/PDIF) Stream */
rme32->spdif_ctl = kctl;
@@ -1952,7 +1970,9 @@ snd_rme32_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
rme32->pci = pci;
if (fullduplex[dev])
rme32->fullduplex_mode = 1;
- if ((err = snd_rme32_create(rme32)) < 0) {
+
+ err = snd_rme32_create(rme32);
+ if (err < 0) {
snd_card_free(card);
return err;
}
@@ -1972,7 +1992,8 @@ snd_rme32_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
sprintf(card->longname, "%s (Rev. %d) at 0x%lx, irq %d",
card->shortname, rme32->rev, rme32->port, rme32->irq);
- if ((err = snd_card_register(card)) < 0) {
+ err = snd_card_register(card);
+ if (err < 0) {
snd_card_free(card);
return err;
}
--
2.15.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/3] ALSA: rme32: Use common error handling code in snd_rme32_probe()
2017-11-17 21:14 ` SF Markus Elfring
(?)
@ 2017-11-17 21:18 ` SF Markus Elfring
-1 siblings, 0 replies; 12+ messages in thread
From: SF Markus Elfring @ 2017-11-17 21:18 UTC (permalink / raw
To: alsa-devel, Bhumika Goyal, Jaroslav Kysela, Takashi Iwai,
Takashi Sakamoto
Cc: LKML, kernel-janitors
From: Markus Elfring <elfring@users.sourceforge.net>
Date: Fri, 17 Nov 2017 21:14:48 +0100
Add a jump target so that a bit of exception handling can be better reused
at the end of this function.
This issue was detected by using the Coccinelle software.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
sound/pci/rme32.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/sound/pci/rme32.c b/sound/pci/rme32.c
index e58e9873c514..9e6e0fe3a285 100644
--- a/sound/pci/rme32.c
+++ b/sound/pci/rme32.c
@@ -1972,10 +1972,8 @@ snd_rme32_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
rme32->fullduplex_mode = 1;
err = snd_rme32_create(rme32);
- if (err < 0) {
- snd_card_free(card);
- return err;
- }
+ if (err < 0)
+ goto free_card;
strcpy(card->driver, "Digi32");
switch (rme32->pci->device) {
@@ -1993,13 +1991,16 @@ snd_rme32_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
card->shortname, rme32->rev, rme32->port, rme32->irq);
err = snd_card_register(card);
- if (err < 0) {
- snd_card_free(card);
- return err;
- }
+ if (err < 0)
+ goto free_card;
+
pci_set_drvdata(pci, card);
dev++;
return 0;
+
+free_card:
+ snd_card_free(card);
+ return err;
}
static void snd_rme32_remove(struct pci_dev *pci)
--
2.15.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/3] ALSA: rme32: Use common error handling code in snd_rme32_probe()
@ 2017-11-17 21:18 ` SF Markus Elfring
0 siblings, 0 replies; 12+ messages in thread
From: SF Markus Elfring @ 2017-11-17 21:18 UTC (permalink / raw
To: alsa-devel, Bhumika Goyal, Jaroslav Kysela, Takashi Iwai,
Takashi Sakamoto
Cc: kernel-janitors, LKML
From: Markus Elfring <elfring@users.sourceforge.net>
Date: Fri, 17 Nov 2017 21:14:48 +0100
Add a jump target so that a bit of exception handling can be better reused
at the end of this function.
This issue was detected by using the Coccinelle software.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
sound/pci/rme32.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/sound/pci/rme32.c b/sound/pci/rme32.c
index e58e9873c514..9e6e0fe3a285 100644
--- a/sound/pci/rme32.c
+++ b/sound/pci/rme32.c
@@ -1972,10 +1972,8 @@ snd_rme32_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
rme32->fullduplex_mode = 1;
err = snd_rme32_create(rme32);
- if (err < 0) {
- snd_card_free(card);
- return err;
- }
+ if (err < 0)
+ goto free_card;
strcpy(card->driver, "Digi32");
switch (rme32->pci->device) {
@@ -1993,13 +1991,16 @@ snd_rme32_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
card->shortname, rme32->rev, rme32->port, rme32->irq);
err = snd_card_register(card);
- if (err < 0) {
- snd_card_free(card);
- return err;
- }
+ if (err < 0)
+ goto free_card;
+
pci_set_drvdata(pci, card);
dev++;
return 0;
+
+free_card:
+ snd_card_free(card);
+ return err;
}
static void snd_rme32_remove(struct pci_dev *pci)
--
2.15.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/3] ALSA: rme32: Use common error handling code in snd_rme32_probe()
@ 2017-11-17 21:18 ` SF Markus Elfring
0 siblings, 0 replies; 12+ messages in thread
From: SF Markus Elfring @ 2017-11-17 21:18 UTC (permalink / raw
To: alsa-devel, Bhumika Goyal, Jaroslav Kysela, Takashi Iwai,
Takashi Sakamoto
Cc: kernel-janitors, LKML
From: Markus Elfring <elfring@users.sourceforge.net>
Date: Fri, 17 Nov 2017 21:14:48 +0100
Add a jump target so that a bit of exception handling can be better reused
at the end of this function.
This issue was detected by using the Coccinelle software.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
sound/pci/rme32.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/sound/pci/rme32.c b/sound/pci/rme32.c
index e58e9873c514..9e6e0fe3a285 100644
--- a/sound/pci/rme32.c
+++ b/sound/pci/rme32.c
@@ -1972,10 +1972,8 @@ snd_rme32_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
rme32->fullduplex_mode = 1;
err = snd_rme32_create(rme32);
- if (err < 0) {
- snd_card_free(card);
- return err;
- }
+ if (err < 0)
+ goto free_card;
strcpy(card->driver, "Digi32");
switch (rme32->pci->device) {
@@ -1993,13 +1991,16 @@ snd_rme32_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
card->shortname, rme32->rev, rme32->port, rme32->irq);
err = snd_card_register(card);
- if (err < 0) {
- snd_card_free(card);
- return err;
- }
+ if (err < 0)
+ goto free_card;
+
pci_set_drvdata(pci, card);
dev++;
return 0;
+
+free_card:
+ snd_card_free(card);
+ return err;
}
static void snd_rme32_remove(struct pci_dev *pci)
--
2.15.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/3] ALSA: rme32: Improve unlocking of an IRQ in two functions
2017-11-17 21:14 ` SF Markus Elfring
(?)
@ 2017-11-17 21:20 ` SF Markus Elfring
-1 siblings, 0 replies; 12+ messages in thread
From: SF Markus Elfring @ 2017-11-17 21:20 UTC (permalink / raw
To: alsa-devel, Bhumika Goyal, Jaroslav Kysela, Takashi Iwai,
Takashi Sakamoto
Cc: LKML, kernel-janitors
From: Markus Elfring <elfring@users.sourceforge.net>
Date: Fri, 17 Nov 2017 21:51:54 +0100
* Add jump targets so that a call of the function "spin_unlock_irq"
is stored only twice in these function implementations.
* Replace nine calls by goto statements.
This issue was detected by using the Coccinelle software.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
sound/pci/rme32.c | 65 +++++++++++++++++++++++++++----------------------------
1 file changed, 32 insertions(+), 33 deletions(-)
diff --git a/sound/pci/rme32.c b/sound/pci/rme32.c
index 9e6e0fe3a285..81de4f8f2ca3 100644
--- a/sound/pci/rme32.c
+++ b/sound/pci/rme32.c
@@ -688,28 +688,24 @@ snd_rme32_playback_hw_params(struct snd_pcm_substream *substream,
(rate = snd_rme32_capture_getrate(rme32, &dummy)) > 0) {
/* AutoSync */
if ((int)params_rate(params) != rate) {
- spin_unlock_irq(&rme32->lock);
- return -EIO;
+ err = -EIO;
+ goto unlock;
}
} else {
err = snd_rme32_playback_setrate(rme32, params_rate(params));
- if (err < 0) {
- spin_unlock_irq(&rme32->lock);
- return err;
- }
+ if (err < 0)
+ goto unlock;
}
err = snd_rme32_setformat(rme32, params_format(params));
- if (err < 0) {
- spin_unlock_irq(&rme32->lock);
- return err;
- }
+ if (err < 0)
+ goto unlock;
snd_rme32_setframelog(rme32, params_channels(params), 1);
if (rme32->capture_periodsize != 0) {
if (params_period_size(params) << rme32->playback_frlog != rme32->capture_periodsize) {
- spin_unlock_irq(&rme32->lock);
- return -EBUSY;
+ err = -EBUSY;
+ goto unlock;
}
}
rme32->playback_periodsize = params_period_size(params) << rme32->playback_frlog;
@@ -722,6 +718,10 @@ snd_rme32_playback_hw_params(struct snd_pcm_substream *substream,
spin_unlock_irq(&rme32->lock);
return 0;
+
+unlock:
+ spin_unlock_irq(&rme32->lock);
+ return err;
}
static int
@@ -749,27 +749,20 @@ snd_rme32_capture_hw_params(struct snd_pcm_substream *substream,
writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
err = snd_rme32_setformat(rme32, params_format(params));
- if (err < 0) {
- spin_unlock_irq(&rme32->lock);
- return err;
- }
+ if (err < 0)
+ goto unlock;
+
err = snd_rme32_playback_setrate(rme32, params_rate(params));
- if (err < 0) {
- spin_unlock_irq(&rme32->lock);
- return err;
- }
+ if (err < 0)
+ goto unlock;
+
rate = snd_rme32_capture_getrate(rme32, &isadat);
- if (rate > 0) {
- if ((int)params_rate(params) != rate) {
- spin_unlock_irq(&rme32->lock);
- return -EIO;
- }
- if ((isadat && runtime->hw.channels_min == 2) ||
- (!isadat && runtime->hw.channels_min == 8)) {
- spin_unlock_irq(&rme32->lock);
- return -EIO;
- }
- }
+ if (rate > 0 &&
+ ((int)params_rate(params) != rate ||
+ (isadat && runtime->hw.channels_min == 2) ||
+ (!isadat && runtime->hw.channels_min == 8)))
+ goto e_io;
+
/* AutoSync off for recording */
rme32->wcreg &= ~RME32_WCR_AUTOSYNC;
writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
@@ -778,8 +771,8 @@ snd_rme32_capture_hw_params(struct snd_pcm_substream *substream,
if (rme32->playback_periodsize != 0) {
if (params_period_size(params) << rme32->capture_frlog !=
rme32->playback_periodsize) {
- spin_unlock_irq(&rme32->lock);
- return -EBUSY;
+ err = -EBUSY;
+ goto unlock;
}
}
rme32->capture_periodsize =
@@ -787,6 +780,12 @@ snd_rme32_capture_hw_params(struct snd_pcm_substream *substream,
spin_unlock_irq(&rme32->lock);
return 0;
+
+e_io:
+ err = -EIO;
+unlock:
+ spin_unlock_irq(&rme32->lock);
+ return err;
}
static int snd_rme32_pcm_hw_free(struct snd_pcm_substream *substream)
--
2.15.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/3] ALSA: rme32: Improve unlocking of an IRQ in two functions
@ 2017-11-17 21:20 ` SF Markus Elfring
0 siblings, 0 replies; 12+ messages in thread
From: SF Markus Elfring @ 2017-11-17 21:20 UTC (permalink / raw
To: alsa-devel, Bhumika Goyal, Jaroslav Kysela, Takashi Iwai,
Takashi Sakamoto
Cc: kernel-janitors, LKML
From: Markus Elfring <elfring@users.sourceforge.net>
Date: Fri, 17 Nov 2017 21:51:54 +0100
* Add jump targets so that a call of the function "spin_unlock_irq"
is stored only twice in these function implementations.
* Replace nine calls by goto statements.
This issue was detected by using the Coccinelle software.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
sound/pci/rme32.c | 65 +++++++++++++++++++++++++++----------------------------
1 file changed, 32 insertions(+), 33 deletions(-)
diff --git a/sound/pci/rme32.c b/sound/pci/rme32.c
index 9e6e0fe3a285..81de4f8f2ca3 100644
--- a/sound/pci/rme32.c
+++ b/sound/pci/rme32.c
@@ -688,28 +688,24 @@ snd_rme32_playback_hw_params(struct snd_pcm_substream *substream,
(rate = snd_rme32_capture_getrate(rme32, &dummy)) > 0) {
/* AutoSync */
if ((int)params_rate(params) != rate) {
- spin_unlock_irq(&rme32->lock);
- return -EIO;
+ err = -EIO;
+ goto unlock;
}
} else {
err = snd_rme32_playback_setrate(rme32, params_rate(params));
- if (err < 0) {
- spin_unlock_irq(&rme32->lock);
- return err;
- }
+ if (err < 0)
+ goto unlock;
}
err = snd_rme32_setformat(rme32, params_format(params));
- if (err < 0) {
- spin_unlock_irq(&rme32->lock);
- return err;
- }
+ if (err < 0)
+ goto unlock;
snd_rme32_setframelog(rme32, params_channels(params), 1);
if (rme32->capture_periodsize != 0) {
if (params_period_size(params) << rme32->playback_frlog != rme32->capture_periodsize) {
- spin_unlock_irq(&rme32->lock);
- return -EBUSY;
+ err = -EBUSY;
+ goto unlock;
}
}
rme32->playback_periodsize = params_period_size(params) << rme32->playback_frlog;
@@ -722,6 +718,10 @@ snd_rme32_playback_hw_params(struct snd_pcm_substream *substream,
spin_unlock_irq(&rme32->lock);
return 0;
+
+unlock:
+ spin_unlock_irq(&rme32->lock);
+ return err;
}
static int
@@ -749,27 +749,20 @@ snd_rme32_capture_hw_params(struct snd_pcm_substream *substream,
writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
err = snd_rme32_setformat(rme32, params_format(params));
- if (err < 0) {
- spin_unlock_irq(&rme32->lock);
- return err;
- }
+ if (err < 0)
+ goto unlock;
+
err = snd_rme32_playback_setrate(rme32, params_rate(params));
- if (err < 0) {
- spin_unlock_irq(&rme32->lock);
- return err;
- }
+ if (err < 0)
+ goto unlock;
+
rate = snd_rme32_capture_getrate(rme32, &isadat);
- if (rate > 0) {
- if ((int)params_rate(params) != rate) {
- spin_unlock_irq(&rme32->lock);
- return -EIO;
- }
- if ((isadat && runtime->hw.channels_min == 2) ||
- (!isadat && runtime->hw.channels_min == 8)) {
- spin_unlock_irq(&rme32->lock);
- return -EIO;
- }
- }
+ if (rate > 0 &&
+ ((int)params_rate(params) != rate ||
+ (isadat && runtime->hw.channels_min == 2) ||
+ (!isadat && runtime->hw.channels_min == 8)))
+ goto e_io;
+
/* AutoSync off for recording */
rme32->wcreg &= ~RME32_WCR_AUTOSYNC;
writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
@@ -778,8 +771,8 @@ snd_rme32_capture_hw_params(struct snd_pcm_substream *substream,
if (rme32->playback_periodsize != 0) {
if (params_period_size(params) << rme32->capture_frlog !=
rme32->playback_periodsize) {
- spin_unlock_irq(&rme32->lock);
- return -EBUSY;
+ err = -EBUSY;
+ goto unlock;
}
}
rme32->capture_periodsize =
@@ -787,6 +780,12 @@ snd_rme32_capture_hw_params(struct snd_pcm_substream *substream,
spin_unlock_irq(&rme32->lock);
return 0;
+
+e_io:
+ err = -EIO;
+unlock:
+ spin_unlock_irq(&rme32->lock);
+ return err;
}
static int snd_rme32_pcm_hw_free(struct snd_pcm_substream *substream)
--
2.15.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/3] ALSA: rme32: Improve unlocking of an IRQ in two functions
@ 2017-11-17 21:20 ` SF Markus Elfring
0 siblings, 0 replies; 12+ messages in thread
From: SF Markus Elfring @ 2017-11-17 21:20 UTC (permalink / raw
To: alsa-devel, Bhumika Goyal, Jaroslav Kysela, Takashi Iwai,
Takashi Sakamoto
Cc: kernel-janitors, LKML
From: Markus Elfring <elfring@users.sourceforge.net>
Date: Fri, 17 Nov 2017 21:51:54 +0100
* Add jump targets so that a call of the function "spin_unlock_irq"
is stored only twice in these function implementations.
* Replace nine calls by goto statements.
This issue was detected by using the Coccinelle software.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
sound/pci/rme32.c | 65 +++++++++++++++++++++++++++----------------------------
1 file changed, 32 insertions(+), 33 deletions(-)
diff --git a/sound/pci/rme32.c b/sound/pci/rme32.c
index 9e6e0fe3a285..81de4f8f2ca3 100644
--- a/sound/pci/rme32.c
+++ b/sound/pci/rme32.c
@@ -688,28 +688,24 @@ snd_rme32_playback_hw_params(struct snd_pcm_substream *substream,
(rate = snd_rme32_capture_getrate(rme32, &dummy)) > 0) {
/* AutoSync */
if ((int)params_rate(params) != rate) {
- spin_unlock_irq(&rme32->lock);
- return -EIO;
+ err = -EIO;
+ goto unlock;
}
} else {
err = snd_rme32_playback_setrate(rme32, params_rate(params));
- if (err < 0) {
- spin_unlock_irq(&rme32->lock);
- return err;
- }
+ if (err < 0)
+ goto unlock;
}
err = snd_rme32_setformat(rme32, params_format(params));
- if (err < 0) {
- spin_unlock_irq(&rme32->lock);
- return err;
- }
+ if (err < 0)
+ goto unlock;
snd_rme32_setframelog(rme32, params_channels(params), 1);
if (rme32->capture_periodsize != 0) {
if (params_period_size(params) << rme32->playback_frlog != rme32->capture_periodsize) {
- spin_unlock_irq(&rme32->lock);
- return -EBUSY;
+ err = -EBUSY;
+ goto unlock;
}
}
rme32->playback_periodsize = params_period_size(params) << rme32->playback_frlog;
@@ -722,6 +718,10 @@ snd_rme32_playback_hw_params(struct snd_pcm_substream *substream,
spin_unlock_irq(&rme32->lock);
return 0;
+
+unlock:
+ spin_unlock_irq(&rme32->lock);
+ return err;
}
static int
@@ -749,27 +749,20 @@ snd_rme32_capture_hw_params(struct snd_pcm_substream *substream,
writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
err = snd_rme32_setformat(rme32, params_format(params));
- if (err < 0) {
- spin_unlock_irq(&rme32->lock);
- return err;
- }
+ if (err < 0)
+ goto unlock;
+
err = snd_rme32_playback_setrate(rme32, params_rate(params));
- if (err < 0) {
- spin_unlock_irq(&rme32->lock);
- return err;
- }
+ if (err < 0)
+ goto unlock;
+
rate = snd_rme32_capture_getrate(rme32, &isadat);
- if (rate > 0) {
- if ((int)params_rate(params) != rate) {
- spin_unlock_irq(&rme32->lock);
- return -EIO;
- }
- if ((isadat && runtime->hw.channels_min = 2) ||
- (!isadat && runtime->hw.channels_min = 8)) {
- spin_unlock_irq(&rme32->lock);
- return -EIO;
- }
- }
+ if (rate > 0 &&
+ ((int)params_rate(params) != rate ||
+ (isadat && runtime->hw.channels_min = 2) ||
+ (!isadat && runtime->hw.channels_min = 8)))
+ goto e_io;
+
/* AutoSync off for recording */
rme32->wcreg &= ~RME32_WCR_AUTOSYNC;
writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
@@ -778,8 +771,8 @@ snd_rme32_capture_hw_params(struct snd_pcm_substream *substream,
if (rme32->playback_periodsize != 0) {
if (params_period_size(params) << rme32->capture_frlog ! rme32->playback_periodsize) {
- spin_unlock_irq(&rme32->lock);
- return -EBUSY;
+ err = -EBUSY;
+ goto unlock;
}
}
rme32->capture_periodsize @@ -787,6 +780,12 @@ snd_rme32_capture_hw_params(struct snd_pcm_substream *substream,
spin_unlock_irq(&rme32->lock);
return 0;
+
+e_io:
+ err = -EIO;
+unlock:
+ spin_unlock_irq(&rme32->lock);
+ return err;
}
static int snd_rme32_pcm_hw_free(struct snd_pcm_substream *substream)
--
2.15.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
end of thread, other threads:[~2017-11-17 21:20 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-11-17 21:14 [PATCH 0/3] ALSA-RME Digi32: Fine-tuning for seven function implementations SF Markus Elfring
2017-11-17 21:14 ` SF Markus Elfring
2017-11-17 21:14 ` SF Markus Elfring
2017-11-17 21:16 ` [PATCH 1/3] ALSA: rme32: Adjust 15 function calls together with a variable assignment SF Markus Elfring
2017-11-17 21:16 ` SF Markus Elfring
2017-11-17 21:16 ` SF Markus Elfring
2017-11-17 21:18 ` [PATCH 2/3] ALSA: rme32: Use common error handling code in snd_rme32_probe() SF Markus Elfring
2017-11-17 21:18 ` SF Markus Elfring
2017-11-17 21:18 ` SF Markus Elfring
2017-11-17 21:20 ` [PATCH 3/3] ALSA: rme32: Improve unlocking of an IRQ in two functions SF Markus Elfring
2017-11-17 21:20 ` SF Markus Elfring
2017-11-17 21:20 ` SF Markus Elfring
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.