mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Jiri Slaby <jslaby@suse.cz>
To: gregkh@linuxfoundation.org
Cc: alan@linux.intel.com, linux-kernel@vger.kernel.org
Subject: [PATCH 3/4] [IA64] hpsim, initialize chip for assigned irqs
Date: Thu,  8 Mar 2012 21:01:18 +0100	[thread overview]
Message-ID: <1331236879-20124-3-git-send-email-jslaby@suse.cz> (raw)
In-Reply-To: <1331236879-20124-1-git-send-email-jslaby@suse.cz>

Currently, when assign_irq_vector is called and the irq connected in
the simulator, the irq is not ready. request_irq will return ENOSYS
immediately. It is because the irq chip is unset.

Hence set the chip properly to irq_type_hp_sim. And make sure this is
done from both users of simulated interrupts.

Also we have to set handler here, otherwise we end up in
handle_bad_int resulting in spam in logs and no irqs handled. We use
handle_simple_irq as these are SW interrupts that need no ACK or
anything.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Signed-off-by: Tony Luck <tony.luck@intel.com>
---
 arch/ia64/hp/sim/hpsim_irq.c   |   36 ++++++++++++++++++++++++++++++------
 arch/ia64/hp/sim/hpsim_setup.c |    6 ------
 arch/ia64/hp/sim/simeth.c      |   19 +++----------------
 arch/ia64/hp/sim/simserial.c   |    3 +--
 arch/ia64/include/asm/hpsim.h  |    2 +-
 5 files changed, 35 insertions(+), 31 deletions(-)

diff --git a/arch/ia64/hp/sim/hpsim_irq.c b/arch/ia64/hp/sim/hpsim_irq.c
index 4bd9a63..0aa70eb 100644
--- a/arch/ia64/hp/sim/hpsim_irq.c
+++ b/arch/ia64/hp/sim/hpsim_irq.c
@@ -10,6 +10,8 @@
 #include <linux/sched.h>
 #include <linux/irq.h>
 
+#include "hpsim_ssc.h"
+
 static unsigned int
 hpsim_irq_startup(struct irq_data *data)
 {
@@ -37,15 +39,37 @@ static struct irq_chip irq_type_hp_sim = {
 	.irq_set_affinity =	hpsim_set_affinity_noop,
 };
 
+static void hpsim_irq_set_chip(int irq)
+{
+	struct irq_chip *chip = irq_get_chip(irq);
+
+	if (chip == &no_irq_chip)
+		irq_set_chip(irq, &irq_type_hp_sim);
+}
+
+static void hpsim_connect_irq(int intr, int irq)
+{
+	ia64_ssc(intr, irq, 0, 0, SSC_CONNECT_INTERRUPT);
+}
+
+int hpsim_get_irq(int intr)
+{
+	int irq = assign_irq_vector(AUTO_ASSIGN);
+
+	if (irq >= 0) {
+		hpsim_irq_set_chip(irq);
+		irq_set_handler(irq, handle_simple_irq);
+		hpsim_connect_irq(intr, irq);
+	}
+
+	return irq;
+}
+
 void __init
 hpsim_irq_init (void)
 {
 	int i;
 
-	for_each_active_irq(i) {
-		struct irq_chip *chip = irq_get_chip(i);
-
-		if (chip == &no_irq_chip)
-			irq_set_chip(i, &irq_type_hp_sim);
-	}
+	for_each_active_irq(i)
+		hpsim_irq_set_chip(i);
 }
diff --git a/arch/ia64/hp/sim/hpsim_setup.c b/arch/ia64/hp/sim/hpsim_setup.c
index f629e90..664a540 100644
--- a/arch/ia64/hp/sim/hpsim_setup.c
+++ b/arch/ia64/hp/sim/hpsim_setup.c
@@ -26,12 +26,6 @@
 #include "hpsim_ssc.h"
 
 void
-ia64_ssc_connect_irq (long intr, long irq)
-{
-	ia64_ssc(intr, irq, 0, 0, SSC_CONNECT_INTERRUPT);
-}
-
-void
 ia64_ctl_trace (long on)
 {
 	ia64_ssc(on, 0, 0, 0, SSC_CTL_TRACE);
diff --git a/arch/ia64/hp/sim/simeth.c b/arch/ia64/hp/sim/simeth.c
index 47afcc6..e343357 100644
--- a/arch/ia64/hp/sim/simeth.c
+++ b/arch/ia64/hp/sim/simeth.c
@@ -129,17 +129,6 @@ netdev_probe(char *name, unsigned char *ether)
 
 
 static inline int
-netdev_connect(int irq)
-{
-	/* XXX Fix me
-	 * this does not support multiple cards
-	 * also no return value
-	 */
-	ia64_ssc_connect_irq(NETWORK_INTR, irq);
-	return 0;
-}
-
-static inline int
 netdev_attach(int fd, int irq, unsigned int ipaddr)
 {
 	/* this puts the host interface in the right mode (start interrupting) */
@@ -226,15 +215,13 @@ simeth_probe1(void)
 		return err;
 	}
 
-	if ((rc = assign_irq_vector(AUTO_ASSIGN)) < 0)
-		panic("%s: out of interrupt vectors!\n", __func__);
-	dev->irq = rc;
-
 	/*
 	 * attach the interrupt in the simulator, this does enable interrupts
 	 * until a netdev_attach() is called
 	 */
-	netdev_connect(dev->irq);
+	if ((rc = hpsim_get_irq(NETWORK_INTR)) < 0)
+		panic("%s: out of interrupt vectors!\n", __func__);
+	dev->irq = rc;
 
 	printk(KERN_INFO "%s: hosteth=%s simfd=%d, HwAddr",
 	       dev->name, simeth_device, local->simfd);
diff --git a/arch/ia64/hp/sim/simserial.c b/arch/ia64/hp/sim/simserial.c
index 974cac8..797e89a 100644
--- a/arch/ia64/hp/sim/simserial.c
+++ b/arch/ia64/hp/sim/simserial.c
@@ -947,11 +947,10 @@ simrs_init (void)
 		if (state->type == PORT_UNKNOWN) continue;
 
 		if (!state->irq) {
-			if ((rc = assign_irq_vector(AUTO_ASSIGN)) < 0)
+			if ((rc = hpsim_get_irq(KEYBOARD_INTR)) < 0)
 				panic("%s: out of interrupt vectors!\n",
 				      __func__);
 			state->irq = rc;
-			ia64_ssc_connect_irq(KEYBOARD_INTR, state->irq);
 		}
 
 		printk(KERN_INFO "ttyS%d at 0x%04lx (irq = %d) is a %s\n",
diff --git a/arch/ia64/include/asm/hpsim.h b/arch/ia64/include/asm/hpsim.h
index 892ab19..0fe5022 100644
--- a/arch/ia64/include/asm/hpsim.h
+++ b/arch/ia64/include/asm/hpsim.h
@@ -10,7 +10,7 @@ int simcons_register(void);
 struct tty_driver;
 extern struct tty_driver *hp_simserial_driver;
 
-void ia64_ssc_connect_irq(long intr, long irq);
+extern int hpsim_get_irq(int intr);
 void ia64_ctl_trace(long on);
 
 #endif
-- 
1.7.9.2



  parent reply	other threads:[~2012-03-08 20:01 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-03-05 13:51 [PATCH 00/68] TTY buffer in tty_port -- prep no. 1 Jiri Slaby
2012-03-05 13:51 ` [PATCH 01/68] USB: cdc-acm, use tty_standard_install Jiri Slaby
2012-03-05 14:03   ` Jiri Slaby
2012-03-05 14:14     ` Oliver Neukum
2012-03-05 23:39   ` Alan Cox
2012-03-05 13:51 ` [PATCH 02/68] TTY: tty_io, remove buffer re-assignments Jiri Slaby
2012-03-05 13:51 ` [PATCH 03/68] TTY: let alloc_tty_driver deduce the owner automatically Jiri Slaby
2012-03-05 13:51 ` [PATCH 04/68] TTY: remove minor_num from tty_driver Jiri Slaby
2012-03-05 13:51 ` [PATCH 05/68] TTY: remove re-assignments to tty_driver members Jiri Slaby
2012-03-06 23:49   ` Tilman Schmidt
2012-03-05 13:51 ` [PATCH 06/68] TTY: simplify tty_driver_lookup_tty a bit Jiri Slaby
2012-03-05 13:51 ` [PATCH 07/68] TTY: remove tty driver re-set from tty_reopen Jiri Slaby
2012-03-05 13:51 ` [PATCH 08/68] TTY: serial, simplify ASYNC_USR_MASK Jiri Slaby
2012-03-05 13:51 ` [PATCH 09/68] TTY: tty_driver, document tty->ops->shutdown limitation Jiri Slaby
2012-03-05 13:51 ` [PATCH 10/68] ALPHA: srmcons, use timer functions Jiri Slaby
2012-03-05 13:51 ` [PATCH 11/68] ALPHA: srmcons, fix racy singleton structure Jiri Slaby
2012-03-05 13:51 ` [PATCH 12/68] TTY: srmcons, convert to use tty_port Jiri Slaby
2012-03-05 13:52 ` [PATCH 13/68] TTY: serialP, remove DECLARE_WAITQUEUE check Jiri Slaby
2012-03-05 13:52 ` [PATCH 14/68] TTY: remove unneeded tty->index checks Jiri Slaby
2012-03-05 13:52 ` [PATCH 15/68] TTY: ipwireless, fix tty->index handling Jiri Slaby
2012-03-05 14:03   ` Jiri Kosina
2012-03-05 13:52 ` [PATCH 16/68] NET: pc300, do not zero global variables Jiri Slaby
2012-03-05 13:52 ` [PATCH 17/68] NET: pc300, show version info from module init Jiri Slaby
2012-03-05 13:52 ` [PATCH 18/68] XTENSA: iss/console, use setup_timer Jiri Slaby
2012-03-05 13:52 ` [PATCH 19/68] XTENSA: iss/console, fix potential deadlock Jiri Slaby
2012-03-05 13:52 ` [PATCH 20/68] TTY: iss/console, use tty_port Jiri Slaby
2012-03-05 13:52 ` [PATCH 21/68] TTY: serial, use atomic_inc_return in ioc4_serial Jiri Slaby
2012-03-05 13:52 ` [PATCH 22/68] TTY: serial, include pci.h in m32r_sio Jiri Slaby
2012-03-05 13:52 ` [PATCH 23/68] TTY: remove serialP.h inclusion from some files Jiri Slaby
2012-03-05 13:52 ` [PATCH 24/68] TTY: speakup, do not use serialP Jiri Slaby
2012-03-05 13:52 ` [PATCH 25/68] TTY: serialP, remove unused material Jiri Slaby
2012-03-05 13:52 ` [PATCH 26/68] TTY: amiserial, remove tasklet for tty_wakeup Jiri Slaby
2012-03-05 13:52 ` [PATCH 27/68] TTY: amiserial, use only one copy of async flags Jiri Slaby
2012-03-05 13:52 ` [PATCH 28/68] TTY: simserial, " Jiri Slaby
2012-03-05 13:52 ` [PATCH 29/68] TTY: simserial/amiserial, use one instance of other members Jiri Slaby
2012-03-05 13:52 ` [PATCH 30/68] TTY: simserial, remove support of shared interrupts Jiri Slaby
2012-03-05 13:52 ` [PATCH 31/68] TTY: simserial, remove IRQ_T Jiri Slaby
2012-03-05 13:52 ` [PATCH 32/68] TTY: amiserial, remove IRQ_ports Jiri Slaby
2012-03-05 13:52 ` [PATCH 33/68] TTY: serialP, merge serial_state and async_struct Jiri Slaby
2012-03-05 13:52 ` [PATCH 34/68] TTY: amiserial, simplify set_serial_info Jiri Slaby
2012-03-05 13:52 ` [PATCH 35/68] TTY: amiserial, pass tty down to functions Jiri Slaby
2012-03-05 13:52 ` [PATCH 36/68] TTY: simserial, " Jiri Slaby
2012-03-05 13:52 ` [PATCH 37/68] TTY: amiserial/simserial, use tty_port Jiri Slaby
2012-03-05 13:52 ` [PATCH 38/68] TTY: amiserial/simserial, use close delays from tty_port Jiri Slaby
2012-03-05 13:52 ` [PATCH 39/68] TTY: amiserial/simserial, use count " Jiri Slaby
2012-03-05 13:52 ` [PATCH 40/68] TTY: amiserial/simserial, use flags " Jiri Slaby
2012-03-05 13:52 ` [PATCH 41/68] TTY: simserial, remove static initialization Jiri Slaby
2012-03-05 13:52 ` [PATCH 42/68] TTY: simserial, remove tmp_buf Jiri Slaby
2012-03-05 13:52 ` [PATCH 43/68] TTY: simserial, stop using serial_state->{line,icount} Jiri Slaby
2012-03-05 13:52 ` [PATCH 44/68] TTY: simserial no longer needs serialP Jiri Slaby
2012-03-05 13:52 ` [PATCH 45/68] TTY: simserial, define local tty_port pointer Jiri Slaby
2012-03-05 13:52 ` [PATCH 46/68] TTY: simserial, remove some tty ops Jiri Slaby
2012-03-05 13:52 ` [PATCH 48/68] TTY: simserial, use tty_port_close_start Jiri Slaby
2012-03-05 13:52 ` [PATCH 49/68] TTY: simserial, properly refcount tty_port->tty Jiri Slaby
2012-03-05 13:52 ` [PATCH 50/68] TTY: simserial, use tty_port_open Jiri Slaby
2012-03-05 13:52 ` [PATCH 51/68] TTY: simserial, use tty_port_hangup Jiri Slaby
2012-03-05 13:52 ` [PATCH 52/68] TTY: simserial, remove useless comments Jiri Slaby
2012-03-05 13:52 ` [PATCH 53/68] TTY: simserial, fix includes Jiri Slaby
2012-03-05 13:52 ` [PATCH 54/68] TTY: simserial, reindent some code Jiri Slaby
2012-03-05 13:52 ` [PATCH 55/68] TTY: simserial, final cleanup Jiri Slaby
2012-03-05 13:52 ` [PATCH 56/68] TTY: amiserial, define local tty_port pointer Jiri Slaby
2012-03-05 13:52 ` [PATCH 57/68] TTY: amiserial, stop using serial_state->{irq,type,line} Jiri Slaby
2012-03-05 13:52 ` [PATCH 58/68] TTY: amiserial no longer needs serialP Jiri Slaby
2012-03-05 13:52 ` [PATCH 59/68] TTY: amiserial, provide carrier helpers Jiri Slaby
2012-03-05 13:52 ` [PATCH 60/68] TTY: amiserial, use tty_port_block_til_ready Jiri Slaby
2012-03-05 13:52 ` [PATCH 61/68] TTY: amiserial, use tty_port_close_end Jiri Slaby
2012-03-05 13:52 ` [PATCH 62/68] TTY: amiserial, use tty_port_close_start Jiri Slaby
2012-03-05 13:52 ` [PATCH 63/68] TTY: pdc_cons, fix racy tty test Jiri Slaby
2012-03-05 13:52 ` [PATCH 64/68] TTY: pdc_cons, fix open vs timer race Jiri Slaby
2012-03-05 13:52 ` [PATCH 65/68] TTY: pdc_cons, fix open vs pdc_console_tty_driver race Jiri Slaby
2012-03-05 13:52 ` [PATCH 66/68] TTY: pdc_cons, use tty_port Jiri Slaby
2012-03-05 13:52 ` [PATCH 67/68] TTY: isdn/gigaset, do not set tty->driver_data to NULL Jiri Slaby
2012-03-05 17:05   ` Tilman Schmidt
2012-03-05 17:12     ` Jiri Slaby
2012-03-05 13:52 ` [PATCH 68/68] TTY: isdn/gigaset, use tty_port Jiri Slaby
2012-03-05 17:08   ` Tilman Schmidt
2012-03-08 19:50 ` [PATCH 00/68] TTY buffer in tty_port -- prep no. 1 Greg KH
2012-03-08 20:01   ` [PATCH 1/4] [IA64] hpsim, fix SAL handling in fw-emu Jiri Slaby
2012-03-08 20:01     ` [PATCH 2/4] [IA64] simserial, include some headers Jiri Slaby
2012-03-08 20:01     ` Jiri Slaby [this message]
2012-03-08 20:01     ` [PATCH 4/4] [IA64] simserial, bail out when request_irq fails Jiri Slaby
2012-03-08 20:29     ` [PATCH 1/4] [IA64] hpsim, fix SAL handling in fw-emu Greg KH
2012-03-08 20:51 ` [PATCH 00/68] TTY buffer in tty_port -- prep no. 1 Greg KH
2012-03-18  8:56 ` Geert Uytterhoeven
  -- strict thread matches above, loose matches on Subject: below --
2012-02-24 11:10 [PATCH 1/4] IA64: hpsim, fix SAL handling in fw-emu Jiri Slaby
2012-02-24 11:10 ` [PATCH 3/4] IA64: hpsim, initialize chip for assigned irqs Jiri Slaby

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1331236879-20124-3-git-send-email-jslaby@suse.cz \
    --to=jslaby@suse.cz \
    --cc=alan@linux.intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®