Re: [PATCH v5 6/6] staging: android: binder: fix binder interface for64bit compat layer
From: Arve Hjønnevåg
Date: Wed Jul 03 2013 - 18:30:35 EST
On Wed, Jun 19, 2013 at 10:12 AM, Serban Constantinescu
<serban.constantinescu@xxxxxxx> wrote:
>
The changes in this patch will fix the binder interface for use on 64bit
>
machines and stand as the base of the 64bit compat support. The changes
>
apply to the structures that are passed between the kernel and
>
userspace.
>
>
Most of the changes applied mirror the change to struct binder_version
>
where there is no need for a 64bit wide protocol_version(on 64bit
>
machines). The change inlines with the existing 32bit userspace(the
>
structure has the same size) and simplifies the compat layer such that
>
the same handler can service the BINDER_VERSION ioctl.
>
>
Other changes make use of kernel types as well as user-exportable ones
>
and fix format specifier issues.
>
>
The changes do not affect existing 32bit ABI.
>
>
Signed-off-by: Serban Constantinescu <serban.constantinescu@xxxxxxx>
>
---
>
drivers/staging/android/binder.c | 20 ++++++++++----------
>
drivers/staging/android/binder.h | 10 +++++-----
>
2 files changed, 15 insertions(+), 15 deletions(-)
>
>
diff --git a/drivers/staging/android/binder.c b/drivers/staging/android/binder.c
>
index 7450d56..056afe7 100644
>
--- a/drivers/staging/android/binder.c
>
+++ b/drivers/staging/android/binder.c
>
@@ -1271,7 +1271,7 @@ static void binder_transaction_buffer_release(struct binder_proc *proc,
>
case BINDER_TYPE_WEAK_HANDLE: {
>
struct binder_ref *ref = binder_get_ref(proc, fp->handle);
>
if (ref == NULL) {
>
- pr_err("transaction release %d bad handle %ld\n",
>
+ pr_err("transaction release %d bad handle %d\n",
>
debug_id, fp->handle);
>
break;
>
}
>
@@ -1283,13 +1283,13 @@ static void binder_transaction_buffer_release(struct binder_proc *proc,
>
>
case BINDER_TYPE_FD:
>
binder_debug(BINDER_DEBUG_TRANSACTION,
>
- " fd %ld\n", fp->handle);
>
+ " fd %d\n", fp->handle);
>
if (failed_at)
>
task_close_fd(proc, fp->handle);
>
break;
>
>
default:
>
- pr_err("transaction release %d bad object type %lx\n",
>
+ pr_err("transaction release %d bad object type %x\n",
>
debug_id, fp->type);
>
break;
>
}
>
@@ -1547,7 +1547,7 @@ static void binder_transaction(struct binder_proc *proc,
>
case BINDER_TYPE_WEAK_HANDLE: {
>
struct binder_ref *ref = binder_get_ref(proc, fp->handle);
>
if (ref == NULL) {
>
- binder_user_error("%d:%d got transaction with invalid handle, %ld\n",
>
+ binder_user_error("%d:%d got transaction with invalid handle, %d\n",
>
proc->pid,
>
thread->pid, fp->handle);
>
return_error = BR_FAILED_REPLY;
>
@@ -1590,13 +1590,13 @@ static void binder_transaction(struct binder_proc *proc,
>
>
if (reply) {
>
if (!(in_reply_to->flags & TF_ACCEPT_FDS)) {
>
- binder_user_error("%d:%d got reply with fd, %ld, but target does not allow fds\n",
>
+ binder_user_error("%d:%d got reply with fd, %d, but target does not allow fds\n",
>
proc->pid, thread->pid, fp->handle);
>
return_error = BR_FAILED_REPLY;
>
goto err_fd_not_allowed;
>
}
>
} else if (!target_node->accept_fds) {
>
- binder_user_error("%d:%d got transaction with fd, %ld, but target does not allow fds\n",
>
+ binder_user_error("%d:%d got transaction with fd, %d, but target does not allow fds\n",
>
proc->pid, thread->pid, fp->handle);
>
return_error = BR_FAILED_REPLY;
>
goto err_fd_not_allowed;
>
@@ -1604,7 +1604,7 @@ static void binder_transaction(struct binder_proc *proc,
>
>
file = fget(fp->handle);
>
if (file == NULL) {
>
- binder_user_error("%d:%d got transaction with invalid fd, %ld\n",
>
+ binder_user_error("%d:%d got transaction with invalid fd, %d\n",
>
proc->pid, thread->pid, fp->handle);
>
return_error = BR_FAILED_REPLY;
>
goto err_fget_failed;
>
@@ -1618,13 +1618,13 @@ static void binder_transaction(struct binder_proc *proc,
>
task_fd_install(target_proc, target_fd, file);
>
trace_binder_transaction_fd(t, fp->handle, target_fd);
>
binder_debug(BINDER_DEBUG_TRANSACTION,
>
- " fd %ld -> %d\n", fp->handle, target_fd);
>
+ " fd %d -> %d\n", fp->handle, target_fd);
>
/* TODO: fput? */
>
fp->handle = target_fd;
>
} break;
>
>
default:
>
- binder_user_error("%d:%d got transaction with invalid object type, %lx\n",
>
+ binder_user_error("%d:%d got transaction with invalid object type, %x\n",
>
proc->pid, thread->pid, fp->type);
>
return_error = BR_FAILED_REPLY;
>
goto err_bad_object_type;
>
@@ -2578,7 +2578,7 @@ static long binder_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
>
goto err;
>
}
>
binder_debug(BINDER_DEBUG_READ_WRITE,
>
- "%d:%d write %zd at %08lx, read %zd at %08lx\n",
>
+ "%d:%d write %zd at %016lx, read %zd at %016lx\n",
>
proc->pid, thread->pid, bwr.write_size,
>
bwr.write_buffer, bwr.read_size, bwr.read_buffer);
>
>
diff --git a/drivers/staging/android/binder.h b/drivers/staging/android/binder.h
>
index dadfce0..b88b263 100644
>
--- a/drivers/staging/android/binder.h
>
+++ b/drivers/staging/android/binder.h
>
@@ -48,13 +48,13 @@ enum {
>
*/
>
struct flat_binder_object {
>
/* 8 bytes for large_flat_header. */
>
- unsigned long type;
>
- unsigned long flags;
>
+ __u32 type;
>
+ __u32 flags;
>
>
/* 8 bytes of data. */
>
union {
>
void __user *binder; /* local object */
>
- signed long handle; /* remote object */
>
+ __u32 handle; /* remote object */
>
};
>
>
/* extra data associated with local object */
>
@@ -78,7 +78,7 @@ struct binder_write_read {
>
/* Use with BINDER_VERSION, driver fills in fields. */
>
struct binder_version {
>
/* driver protocol version -- increment with incompatible change */
>
- signed long protocol_version;
>
+ __s32 protocol_version;
>
};
>
>
/* This is the current protocol version. */
>
@@ -119,7 +119,7 @@ struct binder_transaction_data {
>
* identifying the target and contents of the transaction.
>
*/
>
union {
>
- size_t handle; /* target descriptor of command transaction */
>
+ __u32 handle; /* target descriptor of command transaction */
>
void *ptr; /* target descriptor of return transaction */
>
} target;
>
void *cookie; /* target object cookie */
>
--
>
1.7.9.5
>
Acked-by: Arve Hjønnevåg <arve@xxxxxxxxxxx>
--
Arve Hjønnevåg
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
http://vger.kernel.org/majordomo-info.html
Please read the FAQ at
http://www.tux.org/lkml/