lkml.org 
[lkml]   [2002]   [Oct]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH] 2.5.41 s390 (2/8): work queues.
Date
Remove all tq_structs from s390 driver code.

diff -urN linux-2.5.41/drivers/s390/block/dasd.c linux-2.5.41-s390/drivers/s390/block/dasd.c
--- linux-2.5.41/drivers/s390/block/dasd.c Mon Oct 7 20:24:13 2002
+++ linux-2.5.41-s390/drivers/s390/block/dasd.c Wed Oct 9 14:01:13 2002
@@ -93,6 +93,7 @@
static void dasd_int_handler(int, void *, struct pt_regs *);
static void dasd_flush_ccw_queue(dasd_device_t *, int);
static void dasd_tasklet(dasd_device_t *);
+static void do_kick_device(void *data);

/*
* Parameter parsing functions. There are two for the dasd driver:
@@ -254,6 +255,7 @@
(unsigned long) device);
INIT_LIST_HEAD(&device->ccw_queue);
init_timer(&device->timer);
+ INIT_WORK(&device->kick_work, do_kick_device, (void *) (addr_t) device->devinfo.devno);
device->state = DASD_STATE_NEW;
device->target = DASD_STATE_NEW;

@@ -590,11 +592,13 @@
* event daemon.
*/
static void
-do_kick_device(int devno)
+do_kick_device(void *data)
{
+ int devno;
dasd_devmap_t *devmap;
dasd_device_t *device;

+ devno = (long) data;
devmap = dasd_devmap_from_devno(devno);
device = (devmap != NULL) ?
dasd_get_device(devmap) : ERR_PTR(-ENODEV);
@@ -610,10 +614,8 @@
dasd_kick_device(dasd_device_t *device)
{
atomic_inc(&device->ref_count);
- device->kick_tq.routine = (void *) do_kick_device;
- device->kick_tq.data = (void *) (addr_t) device->devinfo.devno;
/* queue call to dasd_kick_device to the kernel event daemon. */
- schedule_task(&device->kick_tq);
+ schedule_work(&device->kick_work);
}

/*
@@ -784,7 +786,7 @@
do_not_oper_handler(void *data)
{
struct {
- struct tq_struct tq;
+ struct work_struct work;
int irq;
} *p;
dasd_device_t *device;
@@ -815,7 +817,7 @@
dasd_not_oper_handler(int irq, int status)
{
struct {
- struct tq_struct tq;
+ struct work_struct work;
int irq;
} *p;

@@ -823,11 +825,10 @@
if (p == NULL)
/* FIXME: No memory, we loose. */
return;
- p->tq.routine = (void *) do_not_oper_handler;
- p->tq.data = (void *) p;
+ INIT_WORK(&p->work, (void *) do_not_oper_handler, p);
p->irq = irq;
/* queue call to do_not_oper_handler to the kernel event daemon. */
- schedule_task(&p->tq);
+ schedule_work(&p->work);
}

/*
@@ -837,7 +838,7 @@
do_oper_handler(void *data)
{
struct {
- struct tq_struct tq;
+ struct work_struct work;
int devno;
} *p;
dasd_devmap_t *devmap;
@@ -868,7 +869,7 @@
dasd_oper_handler(int irq, devreg_t * devreg)
{
struct {
- struct tq_struct tq;
+ struct work_struct work;
int devno;
} *p;

@@ -879,10 +880,9 @@
p->devno = get_devno_by_irq(irq);
if (p->devno == -ENODEV)
return -ENODEV;
- p->tq.routine = (void *) do_oper_handler;
- p->tq.data = (void *) p;
+ INIT_WORK(&p->work, (void *) do_oper_handler, p);
/* queue call to do_oper_handler to the kernel event daemon. */
- schedule_task(&p->tq);
+ schedule_work(&p->work);
return 0;

}
@@ -1317,7 +1317,7 @@
do_state_change_pending(void *data)
{
struct {
- struct tq_struct tq;
+ struct work_struct work;
unsigned short devno;
} *p;
dasd_devmap_t *devmap;
@@ -1355,7 +1355,7 @@
dasd_handle_state_change_pending(devstat_t * stat)
{
struct {
- struct tq_struct tq;
+ struct work_struct work;
unsigned short devno;
} *p;

@@ -1363,11 +1363,10 @@
if (p == NULL)
/* No memory, let the timeout do the reactivation. */
return;
- p->tq.routine = (void *) do_state_change_pending;
- p->tq.data = (void *) p;
+ INIT_WORK(&p->work, (void *) do_state_change_pending, p);
p->devno = stat->devno;
/* queue call to do_state_change_pending to the kernel event daemon. */
- schedule_task(&p->tq);
+ schedule_work(&p->work);
}

/*
diff -urN linux-2.5.41/drivers/s390/block/dasd_int.h linux-2.5.41-s390/drivers/s390/block/dasd_int.h
--- linux-2.5.41/drivers/s390/block/dasd_int.h Mon Oct 7 20:24:46 2002
+++ linux-2.5.41-s390/drivers/s390/block/dasd_int.h Wed Oct 9 14:01:13 2002
@@ -58,6 +58,7 @@
#include <linux/genhd.h>
#include <linux/hdreg.h>
#include <linux/interrupt.h>
+#include <linux/workqueue.h>
#include <asm/debug.h>
#include <asm/dasd.h>
#include <asm/idals.h>
@@ -292,7 +293,7 @@

atomic_t tasklet_scheduled;
struct tasklet_struct tasklet;
- struct tq_struct kick_tq;
+ struct work_struct kick_work;
struct timer_list timer;

debug_info_t *debug_area;
diff -urN linux-2.5.41/drivers/s390/char/ctrlchar.c linux-2.5.41-s390/drivers/s390/char/ctrlchar.c
--- linux-2.5.41/drivers/s390/char/ctrlchar.c Mon Oct 7 20:25:20 2002
+++ linux-2.5.41-s390/drivers/s390/char/ctrlchar.c Wed Oct 9 14:01:13 2002
@@ -23,10 +23,7 @@
handle_sysrq(ctrlchar_sysrq_key, NULL, tty);
}

-static struct tq_struct ctrlchar_tq = {
- .list = LIST_HEAD_INIT(ctrlchar_tq.list),
- .routine = ctrlchar_handle_sysrq,
-};
+static DECLARE_WORK(ctrlchar_work, ctrlchar_handle_sysrq, 0);
#endif


@@ -56,8 +53,8 @@
/* racy */
if (len == 3 && buf[1] == '-') {
ctrlchar_sysrq_key = buf[2];
- ctrlchar_tq.data = tty;
- schedule_task(&ctrlchar_tq);
+ ctrlchar_work.data = tty;
+ schedule_work(&ctrlchar_work);
return CTRLCHAR_SYSRQ;
}
#endif
diff -urN linux-2.5.41/drivers/s390/misc/chandev.c linux-2.5.41-s390/drivers/s390/misc/chandev.c
--- linux-2.5.41/drivers/s390/misc/chandev.c Mon Oct 7 20:24:06 2002
+++ linux-2.5.41-s390/drivers/s390/misc/chandev.c Wed Oct 9 14:01:13 2002
@@ -24,7 +24,7 @@
#include <asm/s390dyn.h>
#include <asm/queue.h>
#include <linux/kmod.h>
-#include <linux/tqueue.h>
+#include <linux/workqueue.h>
#ifndef MIN
#define MIN(a,b) ((a<b)?a:b)
#endif
@@ -190,8 +190,8 @@

static unsigned long chandev_last_machine_check;

-
-static struct tq_struct chandev_msck_task_tq;
+static void chandev_msck_task(void *unused);
+static DECLARE_WORK(chandev_msck_work, chandev_msck_task, 0);
static atomic_t chandev_msck_thread_lock;
static atomic_t chandev_new_msck;
static unsigned long chandev_last_startmsck_list_update;
@@ -666,7 +666,7 @@
chandev_last_machine_check=jiffies;
if(atomic_dec_and_test(&chandev_msck_thread_lock))
{
- schedule_task(&chandev_msck_task_tq);
+ schedule_work(&chandev_msck_work);
}
atomic_set(&chandev_new_msck,TRUE);
return(0);
@@ -686,7 +686,7 @@
spin_unlock(&chandev_not_oper_spinlock);
if(atomic_dec_and_test(&chandev_msck_thread_lock))
{
- schedule_task(&chandev_msck_task_tq);
+ schedule_work(&chandev_msck_work);
}
}
else
@@ -3208,13 +3208,6 @@
#if CONFIG_PROC_FS
chandev_create_proc();
#endif
- chandev_msck_task_tq.routine=
- chandev_msck_task;
-#if LINUX_VERSION_CODE>=KERNEL_VERSION(2,3,0)
- INIT_LIST_HEAD(&chandev_msck_task_tq.list);
- chandev_msck_task_tq.sync=0;
-#endif
- chandev_msck_task_tq.data=NULL;
chandev_last_startmsck_list_update=chandev_last_machine_check=jiffies-HZ;
atomic_set(&chandev_msck_thread_lock,1);
chandev_lock_owner=CHANDEV_INVALID_LOCK_OWNER;
diff -urN linux-2.5.41/drivers/s390/net/ctcmain.c linux-2.5.41-s390/drivers/s390/net/ctcmain.c
--- linux-2.5.41/drivers/s390/net/ctcmain.c Mon Oct 7 20:24:04 2002
+++ linux-2.5.41-s390/drivers/s390/net/ctcmain.c Wed Oct 9 14:01:13 2002
@@ -49,7 +49,6 @@
#include <linux/interrupt.h>
#include <linux/timer.h>
#include <linux/sched.h>
-#include <linux/tqueue.h>

#include <linux/signal.h>
#include <linux/string.h>
@@ -234,11 +233,6 @@
devstat_t *devstat;

/**
- * Bottom half task queue.
- */
- struct tq_struct tq;
-
- /**
* RX/TX buffer size
*/
int max_bufsize;
@@ -797,19 +791,6 @@
}

/**
- * Bottom half routine.
- *
- * @param ch The channel to work on.
- */
-static void ctc_bh(channel *ch)
-{
- struct sk_buff *skb;
-
- while ((skb = skb_dequeue(&ch->io_queue)))
- ctc_unpack_skb(ch, skb);
-}
-
-/**
* Check return code of a preceeding do_IO, halt_IO etc...
*
* @param ch The channel, the error belongs to.
@@ -1329,11 +1310,6 @@
dev->name,
(CHANNEL_DIRECTION(ch->flags) == READ) ? "RX" : "TX");

- INIT_LIST_HEAD(&ch->tq.list);
- ch->tq.sync = 0;
- ch->tq.routine = (void *)(void *)ctc_bh;
- ch->tq.data = ch;
-
ch->ccw[0].cmd_code = CCW_CMD_PREPARE;
ch->ccw[0].flags = CCW_FLAG_SLI | CCW_FLAG_CC;
ch->ccw[0].count = 0;
diff -urN linux-2.5.41/drivers/s390/net/fsm.c linux-2.5.41-s390/drivers/s390/net/fsm.c
--- linux-2.5.41/drivers/s390/net/fsm.c Mon Oct 7 20:24:15 2002
+++ linux-2.5.41-s390/drivers/s390/net/fsm.c Wed Oct 9 14:01:13 2002
@@ -9,6 +9,7 @@
#include <linux/version.h>
#include <linux/config.h>
#include <linux/module.h>
+#include <linux/timer.h>

fsm_instance *
init_fsm(char *name, const char **state_names, const char **event_names, int nr_states,
@@ -172,19 +173,6 @@
this->fi->name, this, millisec);
#endif

-#if LINUX_VERSION_CODE >= 0x020300
- if (this->tl.list.next || this->tl.list.prev) {
- printk(KERN_WARNING "fsm(%s): timer already active!\n",
- this->fi->name);
- return -1;
- }
-#else
- if (this->tl.next || this->tl.prev) {
- printk(KERN_WARNING "fsm(%s): timer already active!\n",
- this->fi->name);
- return -1;
- }
-#endif
init_timer(&this->tl);
this->tl.function = (void *)fsm_expire_timer;
this->tl.data = (long)this;
@@ -205,13 +193,7 @@
this->fi->name, this, millisec);
#endif

-#if LINUX_VERSION_CODE >= 0x020300
- if (this->tl.list.next || this->tl.list.prev)
- del_timer(&this->tl);
-#else
- if (this->tl.next || this->tl.prev)
- del_timer(&this->tl);
-#endif
+ del_timer(&this->tl);
init_timer(&this->tl);
this->tl.function = (void *)fsm_expire_timer;
this->tl.data = (long)this;
diff -urN linux-2.5.41/drivers/s390/net/lcs.c linux-2.5.41-s390/drivers/s390/net/lcs.c
--- linux-2.5.41/drivers/s390/net/lcs.c Mon Oct 7 20:23:27 2002
+++ linux-2.5.41-s390/drivers/s390/net/lcs.c Wed Oct 9 14:01:13 2002
@@ -461,7 +461,7 @@
int lock_owner; \
int lock_cnt; \
wait_queue_head_t wait; \
-struct tq_struct retry_task; \
+struct work_struct retry_task; \
devstat_t devstat; \
lcs_chan_busy_state chan_busy_state; \
ccw1_t ccw[num_io_buffs+1]; \
@@ -491,7 +491,7 @@
u32 tx_idx; /* last buffer successfully transmitted */
unsigned long pkts_still_being_txed;
unsigned long bytes_still_being_txed;
- struct tq_struct resume_task;
+ struct work_struct resume_task;
int resume_queued;
int resume_loopcnt;
uint64_t last_lcs_txpacket_time;
@@ -542,7 +542,7 @@
/* To insure only one kernel thread runs at a time */
atomic_t kernel_thread_lock;
int (*kernel_thread_routine) (lcs_drvr_globals * drvr_globals);
- struct tq_struct kernel_thread_task;
+ struct work_struct kernel_thread_task;
u16 lgw_sequence_no; /* this isn't required just being thorough */
atomic_t retry_cnt;
struct net_device_stats stats __attribute__ ((aligned(4)));
@@ -1024,7 +1024,9 @@
lcs_write_globals *write;
lcs_read_globals *read;
int cnt;
+#if LINUX_VERSION_CODE<KERNEL_VERSION(2,5,41)
struct tq_struct *lcs_tq;
+#endif

lcs_debug_event(2, "lcs_alloc_drvr_globals called\n");
drvr_globals = lcs_dma_alloc(LCS_ALLOCSIZE);
@@ -1058,6 +1060,15 @@
read->drvr_globals = drvr_globals;
write->drvr_globals = drvr_globals;
lcs_resetstate(drvr_globals);
+#if LINUX_VERSION_CODE>=KERNEL_VERSION(2,5,41)
+ INIT_WORK(&drvr_globals->kernel_thread_task, lcs_kernel_thread,
+ (unsigned long) drvr_globals);
+ INIT_WORK(&read->retry_task, lcs_queued_restartreadio,
+ (unsigned long) drvr_globals);
+ INIT_WORK(&write->retry_task, lcs_queued_restartwriteio,
+ (unsigned long) drvr_globals);
+ INIT_WORK(&resume_task, lcs_resume_writetask, (unsigned long) write);
+#else
lcs_tq = &drvr_globals->kernel_thread_task;
lcs_tq->routine = (void (*)(void *)) lcs_kernel_thread;
lcs_tq->data = (void *) drvr_globals;
@@ -1075,6 +1086,7 @@
write->retry_task.data = read->retry_task.data = (void *) drvr_globals;
write->resume_task.routine = (void (*)(void *)) lcs_resume_writetask;
write->resume_task.data = (void *) write;
+#endif
read->chan_busy_state = write->chan_busy_state = chan_dead;
atomic_set(&drvr_globals->kernel_thread_lock, 1);
spin_lock(&lcs_card_list_lock);
@@ -1093,11 +1105,15 @@
lcs_debug_event(1, "lcs_retry subchannel %04x scheduling retry\n",
chan_globals->subchannel);
MOD_INC_USE_COUNT;
+#if LINUX_VERSION_CODE>=KERNEL_VERSION(2,5,41)
+ schedule_work(&chan_globals->retry_task);
+#else
#if LINUX_VERSION_CODE>KERNEL_VERSION(2,2,16)
schedule_task(&chan_globals->retry_task);
#else
queue_task(&chan_globals->retry_task, &tq_scheduler);
#endif
+#endif
}

static int
@@ -1445,7 +1461,11 @@
* needing mod usage counts */
lcs_debug_event(2, "lcs_queue_write write=%p\n", write);
write->resume_queued = TRUE;
+#if LINUX_VERSION_CODE>=KERNEL_VERSION(2,5,41)
+ schedule_work(&write->resume_task);
+#else
queue_task(&write->resume_task, &tq_immediate);
+#endif
mark_bh(IMMEDIATE_BH);
}

@@ -1631,11 +1651,15 @@
netif_stop_queue(drvr_globals->dev);
MOD_INC_USE_COUNT;
drvr_globals->kernel_thread_routine = routine;
+#if LINUX_VERSION_CODE>=KERNEL_VERSION(2,5,41)
+ schedule_work(&drvr_globals->kernel_thread_task);
+#else
#if LINUX_VERSION_CODE<=KERNEL_VERSION(2,2,16)
queue_task(&drvr_globals->kernel_thread_task, &tq_scheduler);
#else
schedule_task(&drvr_globals->kernel_thread_task);
#endif
+#endif
} else
lcs_debug_event(1,"lcs_queue_thread busy drvr_globals=%p "
"routine=%p",drvr_globals,routine);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:29    [W:0.051 / U:0.252 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site