diff options
Diffstat (limited to 'drivers/firewire/core-cdev.c')
| -rw-r--r-- | drivers/firewire/core-cdev.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/firewire/core-cdev.c b/drivers/firewire/core-cdev.c index 31863cf8b6c4..f40098dec14b 100644 --- a/drivers/firewire/core-cdev.c +++ b/drivers/firewire/core-cdev.c | |||
| @@ -50,8 +50,9 @@ | |||
| 50 | /* | 50 | /* |
| 51 | * ABI version history is documented in linux/firewire-cdev.h. | 51 | * ABI version history is documented in linux/firewire-cdev.h. |
| 52 | */ | 52 | */ |
| 53 | #define FW_CDEV_KERNEL_VERSION 4 | 53 | #define FW_CDEV_KERNEL_VERSION 4 |
| 54 | #define FW_CDEV_VERSION_EVENT_REQUEST2 4 | 54 | #define FW_CDEV_VERSION_EVENT_REQUEST2 4 |
| 55 | #define FW_CDEV_VERSION_ALLOCATE_REGION_END 4 | ||
| 55 | 56 | ||
| 56 | struct client { | 57 | struct client { |
| 57 | u32 version; | 58 | u32 version; |
| @@ -773,7 +774,11 @@ static int ioctl_allocate(struct client *client, union ioctl_arg *arg) | |||
| 773 | return -ENOMEM; | 774 | return -ENOMEM; |
| 774 | 775 | ||
| 775 | region.start = a->offset; | 776 | region.start = a->offset; |
| 776 | region.end = a->offset + a->length; | 777 | if (client->version < FW_CDEV_VERSION_ALLOCATE_REGION_END) |
| 778 | region.end = a->offset + a->length; | ||
| 779 | else | ||
| 780 | region.end = a->region_end; | ||
| 781 | |||
| 777 | r->handler.length = a->length; | 782 | r->handler.length = a->length; |
| 778 | r->handler.address_callback = handle_request; | 783 | r->handler.address_callback = handle_request; |
| 779 | r->handler.callback_data = r; | 784 | r->handler.callback_data = r; |
| @@ -785,6 +790,7 @@ static int ioctl_allocate(struct client *client, union ioctl_arg *arg) | |||
| 785 | kfree(r); | 790 | kfree(r); |
| 786 | return ret; | 791 | return ret; |
| 787 | } | 792 | } |
| 793 | a->offset = r->handler.offset; | ||
| 788 | 794 | ||
| 789 | r->resource.release = release_address_handler; | 795 | r->resource.release = release_address_handler; |
| 790 | ret = add_client_resource(client, &r->resource, GFP_KERNEL); | 796 | ret = add_client_resource(client, &r->resource, GFP_KERNEL); |
