mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-11-19 08:05:27 +08:00
[S390] css: move io_private to drv_data
Use the subchannels drv_data to access io_subchannel_private for io subchannels. Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
97eb6bfcb9
commit
f92519e83e
@ -1030,6 +1030,7 @@ static void io_subchannel_init_fields(struct subchannel *sch)
|
||||
*/
|
||||
static int io_subchannel_probe(struct subchannel *sch)
|
||||
{
|
||||
struct io_subchannel_private *io_priv;
|
||||
struct ccw_device *cdev;
|
||||
int rc;
|
||||
|
||||
@ -1073,10 +1074,11 @@ static int io_subchannel_probe(struct subchannel *sch)
|
||||
if (rc)
|
||||
goto out_schedule;
|
||||
/* Allocate I/O subchannel private data. */
|
||||
sch->private = kzalloc(sizeof(struct io_subchannel_private),
|
||||
GFP_KERNEL | GFP_DMA);
|
||||
if (!sch->private)
|
||||
io_priv = kzalloc(sizeof(*io_priv), GFP_KERNEL | GFP_DMA);
|
||||
if (!io_priv)
|
||||
goto out_schedule;
|
||||
|
||||
set_io_private(sch, io_priv);
|
||||
css_schedule_eval(sch->schid);
|
||||
return 0;
|
||||
|
||||
@ -1090,6 +1092,7 @@ out_schedule:
|
||||
static int
|
||||
io_subchannel_remove (struct subchannel *sch)
|
||||
{
|
||||
struct io_subchannel_private *io_priv = to_io_private(sch);
|
||||
struct ccw_device *cdev;
|
||||
|
||||
cdev = sch_get_cdev(sch);
|
||||
@ -1099,11 +1102,12 @@ io_subchannel_remove (struct subchannel *sch)
|
||||
/* Set ccw device to not operational and drop reference. */
|
||||
spin_lock_irq(cdev->ccwlock);
|
||||
sch_set_cdev(sch, NULL);
|
||||
set_io_private(sch, NULL);
|
||||
cdev->private->state = DEV_STATE_NOT_OPER;
|
||||
spin_unlock_irq(cdev->ccwlock);
|
||||
ccw_device_unregister(cdev);
|
||||
out_free:
|
||||
kfree(sch->private);
|
||||
kfree(io_priv);
|
||||
sysfs_remove_group(&sch->dev.kobj, &io_subchannel_attr_group);
|
||||
return 0;
|
||||
}
|
||||
@ -1553,11 +1557,12 @@ spinlock_t * cio_get_console_lock(void)
|
||||
static int ccw_device_console_enable(struct ccw_device *cdev,
|
||||
struct subchannel *sch)
|
||||
{
|
||||
struct io_subchannel_private *io_priv = cio_get_console_priv();
|
||||
int rc;
|
||||
|
||||
/* Attach subchannel private data. */
|
||||
sch->private = cio_get_console_priv();
|
||||
memset(sch->private, 0, sizeof(struct io_subchannel_private));
|
||||
memset(io_priv, 0, sizeof(*io_priv));
|
||||
set_io_private(sch, io_priv);
|
||||
io_subchannel_init_fields(sch);
|
||||
rc = cio_commit_config(sch);
|
||||
if (rc)
|
||||
|
@ -18,7 +18,9 @@ struct io_subchannel_private {
|
||||
} __packed options;
|
||||
} __aligned(8);
|
||||
|
||||
#define to_io_private(n) ((struct io_subchannel_private *)n->private)
|
||||
#define to_io_private(n) ((struct io_subchannel_private *) \
|
||||
dev_get_drvdata(&(n)->dev))
|
||||
#define set_io_private(n, p) (dev_set_drvdata(&(n)->dev, p))
|
||||
|
||||
static inline struct ccw_device *sch_get_cdev(struct subchannel *sch)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user