Merge master.kernel.org:/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog
[pandora-kernel.git] / drivers / macintosh / rack-meter.c
index f1b6f56..f83fad2 100644 (file)
@@ -48,7 +48,8 @@ struct rackmeter_dma {
 } ____cacheline_aligned;
 
 struct rackmeter_cpu {
-       struct work_struct      sniffer;
+       struct delayed_work     sniffer;
+       struct rackmeter        *rm;
        cputime64_t             prev_wall;
        cputime64_t             prev_idle;
        int                     zero;
@@ -170,11 +171,11 @@ static void rackmeter_setup_dbdma(struct rackmeter *rm)
        /* Make sure dbdma is reset */
        DBDMA_DO_RESET(rm->dma_regs);
 
-       pr_debug("rackmeter: mark offset=0x%lx\n",
+       pr_debug("rackmeter: mark offset=0x%zx\n",
                 offsetof(struct rackmeter_dma, mark));
-       pr_debug("rackmeter: buf1 offset=0x%lx\n",
+       pr_debug("rackmeter: buf1 offset=0x%zx\n",
                 offsetof(struct rackmeter_dma, buf1));
-       pr_debug("rackmeter: buf2 offset=0x%lx\n",
+       pr_debug("rackmeter: buf2 offset=0x%zx\n",
                 offsetof(struct rackmeter_dma, buf2));
 
        /* Prepare 4 dbdma commands for the 2 buffers */
@@ -208,11 +209,12 @@ static void rackmeter_setup_dbdma(struct rackmeter *rm)
        rackmeter_do_pause(rm, 0);
 }
 
-static void rackmeter_do_timer(void *data)
+static void rackmeter_do_timer(struct work_struct *work)
 {
-       struct rackmeter *rm = data;
+       struct rackmeter_cpu *rcpu =
+               container_of(work, struct rackmeter_cpu, sniffer.work);
+       struct rackmeter *rm = rcpu->rm;
        unsigned int cpu = smp_processor_id();
-       struct rackmeter_cpu *rcpu = &rm->cpu[cpu];
        cputime64_t cur_jiffies, total_idle_ticks;
        unsigned int total_ticks, idle_ticks;
        int i, offset, load, cumm, pause;
@@ -263,8 +265,10 @@ static void __devinit rackmeter_init_cpu_sniffer(struct rackmeter *rm)
         * on those machines yet
         */
 
-       INIT_WORK(&rm->cpu[0].sniffer, rackmeter_do_timer, rm);
-       INIT_WORK(&rm->cpu[1].sniffer, rackmeter_do_timer, rm);
+       rm->cpu[0].rm = rm;
+       INIT_DELAYED_WORK(&rm->cpu[0].sniffer, rackmeter_do_timer);
+       rm->cpu[1].rm = rm;
+       INIT_DELAYED_WORK(&rm->cpu[1].sniffer, rackmeter_do_timer);
 
        for_each_online_cpu(cpu) {
                struct rackmeter_cpu *rcpu;