Skip to content

Commit

Permalink
s390: remove driver_data direct access of struct device
Browse files Browse the repository at this point in the history
In the near future, the driver core is going to not allow direct access
to the driver_data pointer in struct device.  Instead, the functions
dev_get_drvdata() and dev_set_drvdata() should be used.  These functions
have been around since the beginning, so are backwards compatible with
all older kernel versions.

Thanks to Sebastian Ott <sebott@linux.vnet.ibm.com> for fixing a few
typos in my original version of this patch.

Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Sebastian Ott <sebott@linux.vnet.ibm.com>
Cc: linux-s390@vger.kernel.org
Cc: linux390@de.ibm.com
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Greg Kroah-Hartman committed Jun 16, 2009
1 parent 6161611 commit dff59b6
Show file tree
Hide file tree
Showing 11 changed files with 105 additions and 104 deletions.
16 changes: 8 additions & 8 deletions drivers/s390/char/con3215.c
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ raw3215_irq(struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
int cstat, dstat;
int count;

raw = cdev->dev.driver_data;
raw = dev_get_drvdata(&cdev->dev);
req = (struct raw3215_req *) intparm;
cstat = irb->scsw.cmd.cstat;
dstat = irb->scsw.cmd.dstat;
Expand Down Expand Up @@ -635,7 +635,7 @@ raw3215_probe (struct ccw_device *cdev)
int line;

/* Console is special. */
if (raw3215[0] && (cdev->dev.driver_data == raw3215[0]))
if (raw3215[0] && (raw3215[0] == dev_get_drvdata(&cdev->dev)))
return 0;
raw = kmalloc(sizeof(struct raw3215_info) +
RAW3215_INBUF_SIZE, GFP_KERNEL|GFP_DMA);
Expand Down Expand Up @@ -669,7 +669,7 @@ raw3215_probe (struct ccw_device *cdev)
}
init_waitqueue_head(&raw->empty_wait);

cdev->dev.driver_data = raw;
dev_set_drvdata(&cdev->dev, raw);
cdev->handler = raw3215_irq;

return 0;
Expand All @@ -681,9 +681,9 @@ raw3215_remove (struct ccw_device *cdev)
struct raw3215_info *raw;

ccw_device_set_offline(cdev);
raw = cdev->dev.driver_data;
raw = dev_get_drvdata(&cdev->dev);
if (raw) {
cdev->dev.driver_data = NULL;
dev_set_drvdata(&cdev->dev, NULL);
kfree(raw->buffer);
kfree(raw);
}
Expand All @@ -694,7 +694,7 @@ raw3215_set_online (struct ccw_device *cdev)
{
struct raw3215_info *raw;

raw = cdev->dev.driver_data;
raw = dev_get_drvdata(&cdev->dev);
if (!raw)
return -ENODEV;

Expand All @@ -706,7 +706,7 @@ raw3215_set_offline (struct ccw_device *cdev)
{
struct raw3215_info *raw;

raw = cdev->dev.driver_data;
raw = dev_get_drvdata(&cdev->dev);
if (!raw)
return -ENODEV;

Expand Down Expand Up @@ -848,7 +848,7 @@ con3215_init(void)
raw->buffer = (char *) alloc_bootmem_low(RAW3215_BUFFER_SIZE);
raw->inbuf = (char *) alloc_bootmem_low(RAW3215_INBUF_SIZE);
raw->cdev = cdev;
cdev->dev.driver_data = raw;
dev_set_drvdata(&cdev->dev, raw);
cdev->handler = raw3215_irq;

raw->flags |= RAW3215_FIXED;
Expand Down
16 changes: 8 additions & 8 deletions drivers/s390/char/raw3270.c
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@ raw3270_irq (struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
struct raw3270_request *rq;
int rc;

rp = (struct raw3270 *) cdev->dev.driver_data;
rp = dev_get_drvdata(&cdev->dev);
if (!rp)
return;
rq = (struct raw3270_request *) intparm;
Expand Down Expand Up @@ -828,7 +828,7 @@ raw3270_setup_device(struct ccw_device *cdev, struct raw3270 *rp, char *ascebc)
if (rp->minor == -1)
return -EUSERS;
rp->cdev = cdev;
cdev->dev.driver_data = rp;
dev_set_drvdata(&cdev->dev, rp);
cdev->handler = raw3270_irq;
return 0;
}
Expand Down Expand Up @@ -1105,7 +1105,7 @@ raw3270_delete_device(struct raw3270 *rp)
/* Disconnect from ccw_device. */
cdev = rp->cdev;
rp->cdev = NULL;
cdev->dev.driver_data = NULL;
dev_set_drvdata(&cdev->dev, NULL);
cdev->handler = NULL;

/* Put ccw_device structure. */
Expand All @@ -1129,23 +1129,23 @@ static ssize_t
raw3270_model_show(struct device *dev, struct device_attribute *attr, char *buf)
{
return snprintf(buf, PAGE_SIZE, "%i\n",
((struct raw3270 *) dev->driver_data)->model);
((struct raw3270 *) dev_get_drvdata(dev))->model);
}
static DEVICE_ATTR(model, 0444, raw3270_model_show, NULL);

static ssize_t
raw3270_rows_show(struct device *dev, struct device_attribute *attr, char *buf)
{
return snprintf(buf, PAGE_SIZE, "%i\n",
((struct raw3270 *) dev->driver_data)->rows);
((struct raw3270 *) dev_get_drvdata(dev))->rows);
}
static DEVICE_ATTR(rows, 0444, raw3270_rows_show, NULL);

static ssize_t
raw3270_columns_show(struct device *dev, struct device_attribute *attr, char *buf)
{
return snprintf(buf, PAGE_SIZE, "%i\n",
((struct raw3270 *) dev->driver_data)->cols);
((struct raw3270 *) dev_get_drvdata(dev))->cols);
}
static DEVICE_ATTR(columns, 0444, raw3270_columns_show, NULL);

Expand Down Expand Up @@ -1282,7 +1282,7 @@ raw3270_remove (struct ccw_device *cdev)
struct raw3270_view *v;
struct raw3270_notifier *np;

rp = cdev->dev.driver_data;
rp = dev_get_drvdata(&cdev->dev);
/*
* _remove is the opposite of _probe; it's probe that
* should set up rp. raw3270_remove gets entered for
Expand Down Expand Up @@ -1330,7 +1330,7 @@ raw3270_set_offline (struct ccw_device *cdev)
{
struct raw3270 *rp;

rp = cdev->dev.driver_data;
rp = dev_get_drvdata(&cdev->dev);
if (test_bit(RAW3270_FLAGS_CONSOLE, &rp->flags))
return -EBUSY;
raw3270_remove(cdev);
Expand Down
2 changes: 1 addition & 1 deletion drivers/s390/char/tape_34xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -1289,7 +1289,7 @@ static int
tape_34xx_online(struct ccw_device *cdev)
{
return tape_generic_online(
cdev->dev.driver_data,
dev_get_drvdata(&cdev->dev),
&tape_discipline_34xx
);
}
Expand Down
2 changes: 1 addition & 1 deletion drivers/s390/char/tape_3590.c
Original file line number Diff line number Diff line change
Expand Up @@ -1703,7 +1703,7 @@ static struct ccw_device_id tape_3590_ids[] = {
static int
tape_3590_online(struct ccw_device *cdev)
{
return tape_generic_online(cdev->dev.driver_data,
return tape_generic_online(dev_get_drvdata(&cdev->dev),
&tape_discipline_3590);
}

Expand Down
22 changes: 11 additions & 11 deletions drivers/s390/char/tape_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ tape_medium_state_show(struct device *dev, struct device_attribute *attr, char *
{
struct tape_device *tdev;

tdev = (struct tape_device *) dev->driver_data;
tdev = dev_get_drvdata(dev);
return scnprintf(buf, PAGE_SIZE, "%i\n", tdev->medium_state);
}

Expand All @@ -104,7 +104,7 @@ tape_first_minor_show(struct device *dev, struct device_attribute *attr, char *b
{
struct tape_device *tdev;

tdev = (struct tape_device *) dev->driver_data;
tdev = dev_get_drvdata(dev);
return scnprintf(buf, PAGE_SIZE, "%i\n", tdev->first_minor);
}

Expand All @@ -116,7 +116,7 @@ tape_state_show(struct device *dev, struct device_attribute *attr, char *buf)
{
struct tape_device *tdev;

tdev = (struct tape_device *) dev->driver_data;
tdev = dev_get_drvdata(dev);
return scnprintf(buf, PAGE_SIZE, "%s\n", (tdev->first_minor < 0) ?
"OFFLINE" : tape_state_verbose[tdev->tape_state]);
}
Expand All @@ -130,7 +130,7 @@ tape_operation_show(struct device *dev, struct device_attribute *attr, char *buf
struct tape_device *tdev;
ssize_t rc;

tdev = (struct tape_device *) dev->driver_data;
tdev = dev_get_drvdata(dev);
if (tdev->first_minor < 0)
return scnprintf(buf, PAGE_SIZE, "N/A\n");

Expand All @@ -156,7 +156,7 @@ tape_blocksize_show(struct device *dev, struct device_attribute *attr, char *buf
{
struct tape_device *tdev;

tdev = (struct tape_device *) dev->driver_data;
tdev = dev_get_drvdata(dev);

return scnprintf(buf, PAGE_SIZE, "%i\n", tdev->char_data.block_size);
}
Expand Down Expand Up @@ -391,7 +391,7 @@ tape_generic_offline(struct ccw_device *cdev)
{
struct tape_device *device;

device = cdev->dev.driver_data;
device = dev_get_drvdata(&cdev->dev);
if (!device) {
return -ENODEV;
}
Expand Down Expand Up @@ -534,7 +534,7 @@ tape_generic_probe(struct ccw_device *cdev)
tape_put_device(device);
return ret;
}
cdev->dev.driver_data = device;
dev_set_drvdata(&cdev->dev, device);
cdev->handler = __tape_do_irq;
device->cdev = cdev;
ccw_device_get_id(cdev, &dev_id);
Expand Down Expand Up @@ -573,7 +573,7 @@ tape_generic_remove(struct ccw_device *cdev)
{
struct tape_device * device;

device = cdev->dev.driver_data;
device = dev_get_drvdata(&cdev->dev);
if (!device) {
return;
}
Expand Down Expand Up @@ -613,9 +613,9 @@ tape_generic_remove(struct ccw_device *cdev)
tape_cleanup_device(device);
}

if (cdev->dev.driver_data != NULL) {
if (!dev_get_drvdata(&cdev->dev)) {
sysfs_remove_group(&cdev->dev.kobj, &tape_attr_group);
cdev->dev.driver_data = tape_put_device(cdev->dev.driver_data);
dev_set_drvdata(&cdev->dev, tape_put_device(dev_get_drvdata(&cdev->dev)));
}
}

Expand Down Expand Up @@ -1011,7 +1011,7 @@ __tape_do_irq (struct ccw_device *cdev, unsigned long intparm, struct irb *irb)
struct tape_request *request;
int rc;

device = (struct tape_device *) cdev->dev.driver_data;
device = dev_get_drvdata(&cdev->dev);
if (device == NULL) {
return;
}
Expand Down
12 changes: 6 additions & 6 deletions drivers/s390/char/vmlogrdr.c
Original file line number Diff line number Diff line change
Expand Up @@ -504,7 +504,7 @@ static ssize_t vmlogrdr_autopurge_store(struct device * dev,
struct device_attribute *attr,
const char * buf, size_t count)
{
struct vmlogrdr_priv_t *priv = dev->driver_data;
struct vmlogrdr_priv_t *priv = dev_get_drvdata(dev);
ssize_t ret = count;

switch (buf[0]) {
Expand All @@ -525,7 +525,7 @@ static ssize_t vmlogrdr_autopurge_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{
struct vmlogrdr_priv_t *priv = dev->driver_data;
struct vmlogrdr_priv_t *priv = dev_get_drvdata(dev);
return sprintf(buf, "%u\n", priv->autopurge);
}

Expand All @@ -541,7 +541,7 @@ static ssize_t vmlogrdr_purge_store(struct device * dev,

char cp_command[80];
char cp_response[80];
struct vmlogrdr_priv_t *priv = dev->driver_data;
struct vmlogrdr_priv_t *priv = dev_get_drvdata(dev);

if (buf[0] != '1')
return -EINVAL;
Expand Down Expand Up @@ -578,7 +578,7 @@ static ssize_t vmlogrdr_autorecording_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
{
struct vmlogrdr_priv_t *priv = dev->driver_data;
struct vmlogrdr_priv_t *priv = dev_get_drvdata(dev);
ssize_t ret = count;

switch (buf[0]) {
Expand All @@ -599,7 +599,7 @@ static ssize_t vmlogrdr_autorecording_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{
struct vmlogrdr_priv_t *priv = dev->driver_data;
struct vmlogrdr_priv_t *priv = dev_get_drvdata(dev);
return sprintf(buf, "%u\n", priv->autorecording);
}

Expand All @@ -612,7 +612,7 @@ static ssize_t vmlogrdr_recording_store(struct device * dev,
struct device_attribute *attr,
const char * buf, size_t count)
{
struct vmlogrdr_priv_t *priv = dev->driver_data;
struct vmlogrdr_priv_t *priv = dev_get_drvdata(dev);
ssize_t ret;

switch (buf[0]) {
Expand Down
16 changes: 8 additions & 8 deletions drivers/s390/char/vmur.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,19 +78,19 @@ static DEFINE_MUTEX(vmur_mutex);
*
* Each ur device (urd) contains a reference to its corresponding ccw device
* (cdev) using the urd->cdev pointer. Each ccw device has a reference to the
* ur device using the cdev->dev.driver_data pointer.
* ur device using dev_get_drvdata(&cdev->dev) pointer.
*
* urd references:
* - ur_probe gets a urd reference, ur_remove drops the reference
* (cdev->dev.driver_data)
* dev_get_drvdata(&cdev->dev)
* - ur_open gets a urd reference, ur_relase drops the reference
* (urf->urd)
*
* cdev references:
* - urdev_alloc get a cdev reference (urd->cdev)
* - urdev_free drops the cdev reference (urd->cdev)
*
* Setting and clearing of cdev->dev.driver_data is protected by the ccwdev lock
* Setting and clearing of dev_get_drvdata(&cdev->dev) is protected by the ccwdev lock
*/
static struct urdev *urdev_alloc(struct ccw_device *cdev)
{
Expand Down Expand Up @@ -129,7 +129,7 @@ static struct urdev *urdev_get_from_cdev(struct ccw_device *cdev)
unsigned long flags;

spin_lock_irqsave(get_ccwdev_lock(cdev), flags);
urd = cdev->dev.driver_data;
urd = dev_get_drvdata(&cdev->dev);
if (urd)
urdev_get(urd);
spin_unlock_irqrestore(get_ccwdev_lock(cdev), flags);
Expand Down Expand Up @@ -286,7 +286,7 @@ static void ur_int_handler(struct ccw_device *cdev, unsigned long intparm,
TRACE("ur_int_handler: unsolicited interrupt\n");
return;
}
urd = cdev->dev.driver_data;
urd = dev_get_drvdata(&cdev->dev);
BUG_ON(!urd);
/* On special conditions irb is an error pointer */
if (IS_ERR(irb))
Expand Down Expand Up @@ -832,7 +832,7 @@ static int ur_probe(struct ccw_device *cdev)
goto fail_remove_attr;
}
spin_lock_irq(get_ccwdev_lock(cdev));
cdev->dev.driver_data = urd;
dev_set_drvdata(&cdev->dev, urd);
spin_unlock_irq(get_ccwdev_lock(cdev));

mutex_unlock(&vmur_mutex);
Expand Down Expand Up @@ -972,8 +972,8 @@ static void ur_remove(struct ccw_device *cdev)
ur_remove_attributes(&cdev->dev);

spin_lock_irqsave(get_ccwdev_lock(cdev), flags);
urdev_put(cdev->dev.driver_data);
cdev->dev.driver_data = NULL;
urdev_put(dev_get_drvdata(&cdev->dev));
dev_set_drvdata(&cdev->dev, NULL);
spin_unlock_irqrestore(get_ccwdev_lock(cdev), flags);

mutex_unlock(&vmur_mutex);
Expand Down
Loading

0 comments on commit dff59b6

Please sign in to comment.