projects
/
powerpc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ACPI: ACPICA 20060512
[powerpc.git]
/
drivers
/
ide
/
ide-tape.c
diff --git
a/drivers/ide/ide-tape.c
b/drivers/ide/ide-tape.c
index
0ac7eb8
..
f04791a
100644
(file)
--- a/
drivers/ide/ide-tape.c
+++ b/
drivers/ide/ide-tape.c
@@
-433,6
+433,7
@@
#include <linux/timer.h>
#include <linux/mm.h>
#include <linux/interrupt.h>
#include <linux/timer.h>
#include <linux/mm.h>
#include <linux/interrupt.h>
+#include <linux/jiffies.h>
#include <linux/major.h>
#include <linux/devfs_fs_kernel.h>
#include <linux/errno.h>
#include <linux/major.h>
#include <linux/devfs_fs_kernel.h>
#include <linux/errno.h>
@@
-443,6
+444,7
@@
#include <linux/smp_lock.h>
#include <linux/completion.h>
#include <linux/bitops.h>
#include <linux/smp_lock.h>
#include <linux/completion.h>
#include <linux/bitops.h>
+#include <linux/mutex.h>
#include <asm/byteorder.h>
#include <asm/irq.h>
#include <asm/byteorder.h>
#include <asm/irq.h>
@@
-1011,7
+1013,7
@@
typedef struct ide_tape_obj {
int debug_level;
} idetape_tape_t;
int debug_level;
} idetape_tape_t;
-static DE
CLARE_MUTEX(idetape_ref_sem
);
+static DE
FINE_MUTEX(idetape_ref_mutex
);
static struct class *idetape_sysfs_class;
static struct class *idetape_sysfs_class;
@@
-1024,11
+1026,11
@@
static struct ide_tape_obj *ide_tape_get(struct gendisk *disk)
{
struct ide_tape_obj *tape = NULL;
{
struct ide_tape_obj *tape = NULL;
-
down(&idetape_ref_sem
);
+
mutex_lock(&idetape_ref_mutex
);
tape = ide_tape_g(disk);
if (tape)
kref_get(&tape->kref);
tape = ide_tape_g(disk);
if (tape)
kref_get(&tape->kref);
-
up(&idetape_ref_sem
);
+
mutex_unlock(&idetape_ref_mutex
);
return tape;
}
return tape;
}
@@
-1036,9
+1038,9
@@
static void ide_tape_release(struct kref *);
static void ide_tape_put(struct ide_tape_obj *tape)
{
static void ide_tape_put(struct ide_tape_obj *tape)
{
-
down(&idetape_ref_sem
);
+
mutex_lock(&idetape_ref_mutex
);
kref_put(&tape->kref, ide_tape_release);
kref_put(&tape->kref, ide_tape_release);
-
up(&idetape_ref_sem
);
+
mutex_unlock(&idetape_ref_mutex
);
}
/*
}
/*
@@
-1290,11
+1292,11
@@
static struct ide_tape_obj *ide_tape_chrdev_get(unsigned int i)
{
struct ide_tape_obj *tape = NULL;
{
struct ide_tape_obj *tape = NULL;
-
down(&idetape_ref_sem
);
+
mutex_lock(&idetape_ref_mutex
);
tape = idetape_devs[i];
if (tape)
kref_get(&tape->kref);
tape = idetape_devs[i];
if (tape)
kref_get(&tape->kref);
-
up(&idetape_ref_sem
);
+
mutex_unlock(&idetape_ref_mutex
);
return tape;
}
return tape;
}
@@
-2335,7
+2337,7
@@
static ide_startstop_t idetape_rw_callback (ide_drive_t *drive)
}
if (time_after(jiffies, tape->insert_time))
tape->insert_speed = tape->insert_size / 1024 * HZ / (jiffies - tape->insert_time);
}
if (time_after(jiffies, tape->insert_time))
tape->insert_speed = tape->insert_size / 1024 * HZ / (jiffies - tape->insert_time);
- if (
jiffies - tape->avg_time >= HZ
) {
+ if (
time_after_eq(jiffies, tape->avg_time + HZ)
) {
tape->avg_speed = tape->avg_size * HZ / (jiffies - tape->avg_time) / 1024;
tape->avg_size = 0;
tape->avg_time = jiffies;
tape->avg_speed = tape->avg_size * HZ / (jiffies - tape->avg_time) / 1024;
tape->avg_size = 0;
tape->avg_time = jiffies;
@@
-2496,7
+2498,7
@@
static ide_startstop_t idetape_do_request(ide_drive_t *drive,
} else {
return ide_do_reset(drive);
}
} else {
return ide_do_reset(drive);
}
- } else if (
jiffies - tape->dsc_polling_start > IDETAPE_DSC_MA_THRESHOLD
)
+ } else if (
time_after(jiffies, tape->dsc_polling_start + IDETAPE_DSC_MA_THRESHOLD)
)
tape->dsc_polling_frequency = IDETAPE_DSC_MA_SLOW;
idetape_postpone_request(drive);
return ide_stopped;
tape->dsc_polling_frequency = IDETAPE_DSC_MA_SLOW;
idetape_postpone_request(drive);
return ide_stopped;
@@
-4682,9
+4684,8
@@
static void idetape_setup (ide_drive_t *drive, idetape_tape_t *tape, int minor)
idetape_add_settings(drive);
}
idetape_add_settings(drive);
}
-static
int ide_tape_remove(struct device *dev
)
+static
void ide_tape_remove(ide_drive_t *drive
)
{
{
- ide_drive_t *drive = to_ide_device(dev);
idetape_tape_t *tape = drive->driver_data;
ide_unregister_subdriver(drive, tape->driver);
idetape_tape_t *tape = drive->driver_data;
ide_unregister_subdriver(drive, tape->driver);
@@
-4692,8
+4693,6
@@
static int ide_tape_remove(struct device *dev)
ide_unregister_region(tape->disk);
ide_tape_put(tape);
ide_unregister_region(tape->disk);
ide_tape_put(tape);
-
- return 0;
}
static void ide_tape_release(struct kref *kref)
}
static void ide_tape_release(struct kref *kref)
@@
-4745,16
+4744,16
@@
static ide_proc_entry_t idetape_proc[] = {
#endif
#endif
-static int ide_tape_probe(
struct device
*);
+static int ide_tape_probe(
ide_drive_t
*);
static ide_driver_t idetape_driver = {
static ide_driver_t idetape_driver = {
- .owner = THIS_MODULE,
.gen_driver = {
.gen_driver = {
+ .owner = THIS_MODULE,
.name = "ide-tape",
.bus = &ide_bus_type,
.name = "ide-tape",
.bus = &ide_bus_type,
- .probe = ide_tape_probe,
- .remove = ide_tape_remove,
},
},
+ .probe = ide_tape_probe,
+ .remove = ide_tape_remove,
.version = IDETAPE_VERSION,
.media = ide_tape,
.supports_dsc_overlap = 1,
.version = IDETAPE_VERSION,
.media = ide_tape,
.supports_dsc_overlap = 1,
@@
-4825,9
+4824,8
@@
static struct block_device_operations idetape_block_ops = {
.ioctl = idetape_ioctl,
};
.ioctl = idetape_ioctl,
};
-static int ide_tape_probe(
struct device *dev
)
+static int ide_tape_probe(
ide_drive_t *drive
)
{
{
- ide_drive_t *drive = to_ide_device(dev);
idetape_tape_t *tape;
struct gendisk *g;
int minor;
idetape_tape_t *tape;
struct gendisk *g;
int minor;
@@
-4874,18
+4872,18
@@
static int ide_tape_probe(struct device *dev)
drive->driver_data = tape;
drive->driver_data = tape;
-
down(&idetape_ref_sem
);
+
mutex_lock(&idetape_ref_mutex
);
for (minor = 0; idetape_devs[minor]; minor++)
;
idetape_devs[minor] = tape;
for (minor = 0; idetape_devs[minor]; minor++)
;
idetape_devs[minor] = tape;
-
up(&idetape_ref_sem
);
+
mutex_unlock(&idetape_ref_mutex
);
idetape_setup(drive, tape, minor);
class_device_create(idetape_sysfs_class, NULL,
idetape_setup(drive, tape, minor);
class_device_create(idetape_sysfs_class, NULL,
- MKDEV(IDETAPE_MAJOR, minor), dev, "%s", tape->name);
+ MKDEV(IDETAPE_MAJOR, minor),
&drive->gen
dev, "%s", tape->name);
class_device_create(idetape_sysfs_class, NULL,
class_device_create(idetape_sysfs_class, NULL,
- MKDEV(IDETAPE_MAJOR, minor + 128), dev, "n%s", tape->name);
+ MKDEV(IDETAPE_MAJOR, minor + 128),
&drive->gen
dev, "n%s", tape->name);
devfs_mk_cdev(MKDEV(HWIF(drive)->major, minor),
S_IFCHR | S_IRUGO | S_IWUGO,
devfs_mk_cdev(MKDEV(HWIF(drive)->major, minor),
S_IFCHR | S_IRUGO | S_IWUGO,
@@
-4916,10
+4914,7
@@
static void __exit idetape_exit (void)
unregister_chrdev(IDETAPE_MAJOR, "ht");
}
unregister_chrdev(IDETAPE_MAJOR, "ht");
}
-/*
- * idetape_init will register the driver for each tape.
- */
-static int idetape_init (void)
+static int __init idetape_init(void)
{
int error = 1;
idetape_sysfs_class = class_create(THIS_MODULE, "ide_tape");
{
int error = 1;
idetape_sysfs_class = class_create(THIS_MODULE, "ide_tape");
@@
-4950,6
+4945,7
@@
out:
return error;
}
return error;
}
+MODULE_ALIAS("ide:*m-tape*");
module_init(idetape_init);
module_exit(idetape_exit);
MODULE_ALIAS_CHARDEV_MAJOR(IDETAPE_MAJOR);
module_init(idetape_init);
module_exit(idetape_exit);
MODULE_ALIAS_CHARDEV_MAJOR(IDETAPE_MAJOR);