aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/cio/qdio.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/s390/cio/qdio.c')
-rw-r--r--drivers/s390/cio/qdio.c35
1 files changed, 17 insertions, 18 deletions
diff --git a/drivers/s390/cio/qdio.c b/drivers/s390/cio/qdio.c
index 40a3208c7cf3..7a353db8564f 100644
--- a/drivers/s390/cio/qdio.c
+++ b/drivers/s390/cio/qdio.c
@@ -48,11 +48,11 @@
48#include <asm/debug.h> 48#include <asm/debug.h>
49#include <asm/s390_rdev.h> 49#include <asm/s390_rdev.h>
50#include <asm/qdio.h> 50#include <asm/qdio.h>
51#include <asm/airq.h>
51 52
52#include "cio.h" 53#include "cio.h"
53#include "css.h" 54#include "css.h"
54#include "device.h" 55#include "device.h"
55#include "airq.h"
56#include "qdio.h" 56#include "qdio.h"
57#include "ioasm.h" 57#include "ioasm.h"
58#include "chsc.h" 58#include "chsc.h"
@@ -96,7 +96,7 @@ static debug_info_t *qdio_dbf_slsb_in;
96static volatile struct qdio_q *tiq_list=NULL; /* volatile as it could change 96static volatile struct qdio_q *tiq_list=NULL; /* volatile as it could change
97 during a while loop */ 97 during a while loop */
98static DEFINE_SPINLOCK(ttiq_list_lock); 98static DEFINE_SPINLOCK(ttiq_list_lock);
99static int register_thinint_result; 99static void *tiqdio_ind;
100static void tiqdio_tl(unsigned long); 100static void tiqdio_tl(unsigned long);
101static DECLARE_TASKLET(tiqdio_tasklet,tiqdio_tl,0); 101static DECLARE_TASKLET(tiqdio_tasklet,tiqdio_tl,0);
102 102
@@ -399,7 +399,7 @@ qdio_get_indicator(void)
399{ 399{
400 int i; 400 int i;
401 401
402 for (i=1;i<INDICATORS_PER_CACHELINE;i++) 402 for (i = 0; i < INDICATORS_PER_CACHELINE; i++)
403 if (!indicator_used[i]) { 403 if (!indicator_used[i]) {
404 indicator_used[i]=1; 404 indicator_used[i]=1;
405 return indicators+i; 405 return indicators+i;
@@ -1911,8 +1911,7 @@ qdio_fill_thresholds(struct qdio_irq *irq_ptr,
1911 } 1911 }
1912} 1912}
1913 1913
1914static int 1914static void tiqdio_thinint_handler(void *ind, void *drv_data)
1915tiqdio_thinint_handler(void)
1916{ 1915{
1917 QDIO_DBF_TEXT4(0,trace,"thin_int"); 1916 QDIO_DBF_TEXT4(0,trace,"thin_int");
1918 1917
@@ -1925,7 +1924,6 @@ tiqdio_thinint_handler(void)
1925 tiqdio_clear_global_summary(); 1924 tiqdio_clear_global_summary();
1926 1925
1927 tiqdio_inbound_checks(); 1926 tiqdio_inbound_checks();
1928 return 0;
1929} 1927}
1930 1928
1931static void 1929static void
@@ -2445,7 +2443,7 @@ tiqdio_set_subchannel_ind(struct qdio_irq *irq_ptr, int reset_to_zero)
2445 real_addr_dev_st_chg_ind=0; 2443 real_addr_dev_st_chg_ind=0;
2446 } else { 2444 } else {
2447 real_addr_local_summary_bit= 2445 real_addr_local_summary_bit=
2448 virt_to_phys((volatile void *)indicators); 2446 virt_to_phys((volatile void *)tiqdio_ind);
2449 real_addr_dev_st_chg_ind= 2447 real_addr_dev_st_chg_ind=
2450 virt_to_phys((volatile void *)irq_ptr->dev_st_chg_ind); 2448 virt_to_phys((volatile void *)irq_ptr->dev_st_chg_ind);
2451 } 2449 }
@@ -3740,23 +3738,25 @@ static void
3740tiqdio_register_thinints(void) 3738tiqdio_register_thinints(void)
3741{ 3739{
3742 char dbf_text[20]; 3740 char dbf_text[20];
3743 register_thinint_result= 3741
3744 s390_register_adapter_interrupt(&tiqdio_thinint_handler); 3742 tiqdio_ind =
3745 if (register_thinint_result) { 3743 s390_register_adapter_interrupt(&tiqdio_thinint_handler, NULL);
3746 sprintf(dbf_text,"regthn%x",(register_thinint_result&0xff)); 3744 if (IS_ERR(tiqdio_ind)) {
3745 sprintf(dbf_text, "regthn%lx", PTR_ERR(tiqdio_ind));
3747 QDIO_DBF_TEXT0(0,setup,dbf_text); 3746 QDIO_DBF_TEXT0(0,setup,dbf_text);
3748 QDIO_PRINT_ERR("failed to register adapter handler " \ 3747 QDIO_PRINT_ERR("failed to register adapter handler " \
3749 "(rc=%i).\nAdapter interrupts might " \ 3748 "(rc=%li).\nAdapter interrupts might " \
3750 "not work. Continuing.\n", 3749 "not work. Continuing.\n",
3751 register_thinint_result); 3750 PTR_ERR(tiqdio_ind));
3751 tiqdio_ind = NULL;
3752 } 3752 }
3753} 3753}
3754 3754
3755static void 3755static void
3756tiqdio_unregister_thinints(void) 3756tiqdio_unregister_thinints(void)
3757{ 3757{
3758 if (!register_thinint_result) 3758 if (tiqdio_ind)
3759 s390_unregister_adapter_interrupt(&tiqdio_thinint_handler); 3759 s390_unregister_adapter_interrupt(tiqdio_ind);
3760} 3760}
3761 3761
3762static int 3762static int
@@ -3768,8 +3768,8 @@ qdio_get_qdio_memory(void)
3768 for (i=1;i<INDICATORS_PER_CACHELINE;i++) 3768 for (i=1;i<INDICATORS_PER_CACHELINE;i++)
3769 indicator_used[i]=0; 3769 indicator_used[i]=0;
3770 indicators = kzalloc(sizeof(__u32)*(INDICATORS_PER_CACHELINE), 3770 indicators = kzalloc(sizeof(__u32)*(INDICATORS_PER_CACHELINE),
3771 GFP_KERNEL); 3771 GFP_KERNEL);
3772 if (!indicators) 3772 if (!indicators)
3773 return -ENOMEM; 3773 return -ENOMEM;
3774 return 0; 3774 return 0;
3775} 3775}
@@ -3780,7 +3780,6 @@ qdio_release_qdio_memory(void)
3780 kfree(indicators); 3780 kfree(indicators);
3781} 3781}
3782 3782
3783
3784static void 3783static void
3785qdio_unregister_dbf_views(void) 3784qdio_unregister_dbf_views(void)
3786{ 3785{