netfilter: nf_conntrack: restrict runtime expect hashsize modifications
[safe/jmp/linux-2.6] / drivers / ide / ide-park.c
index c875a95..a914023 100644 (file)
@@ -24,11 +24,8 @@ static void issue_park_cmd(ide_drive_t *drive, unsigned long timeout)
                        start_queue = 1;
                spin_unlock_irq(&hwif->lock);
 
-               if (start_queue) {
-                       spin_lock_irq(q->queue_lock);
-                       blk_start_queueing(q);
-                       spin_unlock_irq(q->queue_lock);
-               }
+               if (start_queue)
+                       blk_run_queue(q);
                return;
        }
        spin_unlock_irq(&hwif->lock);
@@ -60,6 +57,33 @@ out:
        return;
 }
 
+ide_startstop_t ide_do_park_unpark(ide_drive_t *drive, struct request *rq)
+{
+       struct ide_cmd cmd;
+       struct ide_taskfile *tf = &cmd.tf;
+
+       memset(&cmd, 0, sizeof(cmd));
+       if (rq->cmd[0] == REQ_PARK_HEADS) {
+               drive->sleep = *(unsigned long *)rq->special;
+               drive->dev_flags |= IDE_DFLAG_SLEEPING;
+               tf->command = ATA_CMD_IDLEIMMEDIATE;
+               tf->feature = 0x44;
+               tf->lbal = 0x4c;
+               tf->lbam = 0x4e;
+               tf->lbah = 0x55;
+               cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE;
+               cmd.valid.in.tf  = IDE_VALID_IN_TF  | IDE_VALID_DEVICE;
+       } else          /* cmd == REQ_UNPARK_HEADS */
+               tf->command = ATA_CMD_CHK_POWER;
+
+       cmd.tf_flags |= IDE_TFLAG_CUSTOM_HANDLER;
+       cmd.protocol = ATA_PROT_NODATA;
+
+       cmd.rq = rq;
+
+       return do_rw_taskfile(drive, &cmd);
+}
+
 ssize_t ide_park_show(struct device *dev, struct device_attribute *attr,
                      char *buf)
 {