Skip to contentSkip to conversation

sound: hda_intel: add card number to irq description

PATCH Superseded Heiner Kallweit 2 participants 3 messages Dec 21, 2015 – Dec 22, 2015 Sound

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 sound: hda_intel: add card number to irq description

Currently the info in /proc/interrupts doesn't allow to figure out which interrupt belongs to which card (HDMI, PCH, ..).
Therefore add card details to the interrupt description. With the patch the info in /proc/interrupts looks like this:

PCI-MSI 442368-edge snd_hda_intel:card1
PCI-MSI 49152-edge snd_hda_intel:card0

This could be partially reused for the hda_tegra driver as it also uses struct azx.

---
 sound/pci/hda/hda_controller.h | 2 ++
 sound/pci/hda/hda_intel.c      | 4 +++-
 2 files changed, 5 insertions(+), 1 deletion(-)
sound/pci/hda/hda_controller.h +2 -0
index ec63bbf..9c6344f 100644
@@ -125,6 +125,8 @@ struct azx {
 	int num_streams;
 	const int *jackpoll_ms; /* per-card jack poll interval */
 
+	char irq_descr[32]; /* Interrupt description */
+
 	/* Register interaction. */
 	const struct hda_controller_ops *ops;
 
sound/pci/hda/hda_intel.c +3 -1
index 83800ac..ef4e06b 100644
@@ -725,7 +725,7 @@ static int azx_acquire_irq(struct azx *chip, int do_disconnect)
 
 	if (request_irq(chip->pci->irq, azx_interrupt,
 			chip->msi ? 0 : IRQF_SHARED,
-			KBUILD_MODNAME, chip)) {
+			chip->irq_descr, chip)) {
 		dev_err(chip->card->dev,
 			"unable to grab IRQ %d, disabling device\n",
 			chip->pci->irq);
@@ -1605,6 +1605,8 @@ static int azx_create(struct snd_card *card, struct pci_dev *pci,
 	check_msi(chip);
 	chip->dev_index = dev;
 	chip->jackpoll_ms = jackpoll_ms;
+	snprintf(chip->irq_descr, sizeof(chip->irq_descr), "%s:%s",
+		 KBUILD_MODNAME, dev_name(&card->card_dev));
 	INIT_LIST_HEAD(&chip->pcm_list);
 	INIT_WORK(&hda->irq_pending_work, azx_irq_pending_work);
 	INIT_LIST_HEAD(&hda->list);
Signature · 1 line
2.6.4
#1 lore raw
Quoted 6 lines · Heiner Kallweit

Currently the info in /proc/interrupts doesn't allow to figure out which interrupt belongs to which card (HDMI, PCH, ..).
Therefore add card details to the interrupt description. With the patch the info in /proc/interrupts looks like this:

Quoted 7 lines

PCI-MSI 442368-edge snd_hda_intel:card1
PCI-MSI 49152-edge snd_hda_intel:card0

This could be partially reused for the hda_tegra driver as it also uses struct azx.

Thanks for the patch. The change here itself isn't wrong, per se. It's an improvement indeed.

However, I wonder whether this needs to be implemented in that way -- namely, driver-specific way. This problem is common in most sound drivers that support multiple instances. Can we have a solution that can be shared more?

Takashi

Quoted 44 lines
---
 sound/pci/hda/hda_controller.h | 2 ++
 sound/pci/hda/hda_intel.c      | 4 +++-
 2 files changed, 5 insertions(+), 1 deletion(-)
sound/pci/hda/hda_controller.h +2 -0
index ec63bbf..9c6344f 100644
@@ -125,6 +125,8 @@ struct azx {
 	int num_streams;
 	const int *jackpoll_ms; /* per-card jack poll interval */
 
+	char irq_descr[32]; /* Interrupt description */
+
 	/* Register interaction. */
 	const struct hda_controller_ops *ops;
 
sound/pci/hda/hda_intel.c +3 -1
index 83800ac..ef4e06b 100644
@@ -725,7 +725,7 @@ static int azx_acquire_irq(struct azx *chip, int do_disconnect)
 
 	if (request_irq(chip->pci->irq, azx_interrupt,
 			chip->msi ? 0 : IRQF_SHARED,
-			KBUILD_MODNAME, chip)) {
+			chip->irq_descr, chip)) {
 		dev_err(chip->card->dev,
 			"unable to grab IRQ %d, disabling device\n",
 			chip->pci->irq);
@@ -1605,6 +1605,8 @@ static int azx_create(struct snd_card *card, struct pci_dev *pci,
 	check_msi(chip);
 	chip->dev_index = dev;
 	chip->jackpoll_ms = jackpoll_ms;
+	snprintf(chip->irq_descr, sizeof(chip->irq_descr), "%s:%s",
+		 KBUILD_MODNAME, dev_name(&card->card_dev));
 	INIT_LIST_HEAD(&chip->pcm_list);
 	INIT_WORK(&hda->irq_pending_work, azx_irq_pending_work);
 	INIT_LIST_HEAD(&hda->list);
Signature · 1 line
2.6.4
#2 lore raw

Am 22.12.2015 um 10:13 schrieb Takashi Iwai:

Quoted 16 lines
Quoted 6 lines · Heiner Kallweit

Currently the info in /proc/interrupts doesn't allow to figure out which interrupt belongs to which card (HDMI, PCH, ..).
Therefore add card details to the interrupt description. With the patch the info in /proc/interrupts looks like this:

Quoted 7 lines

PCI-MSI 442368-edge snd_hda_intel:card1
PCI-MSI 49152-edge snd_hda_intel:card0

This could be partially reused for the hda_tegra driver as it also uses struct azx.

Quoted 8 lines

Thanks for the patch. The change here itself isn't wrong, per se. It's an improvement indeed.

However, I wonder whether this needs to be implemented in that way -- namely, driver-specific way. This problem is common in most sound drivers that support multiple instances. Can we have a solution that can be shared more?

Indeed, we could implement the extension one layer below in struct snd_card. Then it would be more generic. I'll send a v2.

Heiner

Quoted 48 lines

Takashi

Quoted 44 lines
---
 sound/pci/hda/hda_controller.h | 2 ++
 sound/pci/hda/hda_intel.c      | 4 +++-
 2 files changed, 5 insertions(+), 1 deletion(-)
sound/pci/hda/hda_controller.h +2 -0
index ec63bbf..9c6344f 100644
@@ -125,6 +125,8 @@ struct azx {
 	int num_streams;
 	const int *jackpoll_ms; /* per-card jack poll interval */
 
+	char irq_descr[32]; /* Interrupt description */
+
 	/* Register interaction. */
 	const struct hda_controller_ops *ops;
 
sound/pci/hda/hda_intel.c +3 -1
index 83800ac..ef4e06b 100644
@@ -725,7 +725,7 @@ static int azx_acquire_irq(struct azx *chip, int do_disconnect)
 
 	if (request_irq(chip->pci->irq, azx_interrupt,
 			chip->msi ? 0 : IRQF_SHARED,
-			KBUILD_MODNAME, chip)) {
+			chip->irq_descr, chip)) {
 		dev_err(chip->card->dev,
 			"unable to grab IRQ %d, disabling device\n",
 			chip->pci->irq);
@@ -1605,6 +1605,8 @@ static int azx_create(struct snd_card *card, struct pci_dev *pci,
 	check_msi(chip);
 	chip->dev_index = dev;
 	chip->jackpoll_ms = jackpoll_ms;
+	snprintf(chip->irq_descr, sizeof(chip->irq_descr), "%s:%s",
+		 KBUILD_MODNAME, dev_name(&card->card_dev));
 	INIT_LIST_HEAD(&chip->pcm_list);
 	INIT_WORK(&hda->irq_pending_work, azx_irq_pending_work);
 	INIT_LIST_HEAD(&hda->list);
Signature · 1 line
2.6.4