staging: android: binder: fix binder interface for 64bit compat layer
authorSerban Constantinescu <serban.constantinescu@arm.com>
Thu, 4 Jul 2013 09:54:48 +0000 (10:54 +0100)
committerArve Hjønnevåg <arve@android.com>
Sat, 1 Feb 2014 03:43:00 +0000 (19:43 -0800)
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.

Change-Id: Icccc8d47c302930cc61cddc5749b4cc74dc84117
Signed-off-by: Serban Constantinescu <serban.constantinescu@arm.com>
Acked-by: Arve Hjønnevåg <arve@android.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/android/binder.c
drivers/staging/android/uapi/binder.h

index 6e8b0e742405ea5216281852e80fa653b01518ae..b9a7d93477842360f86776e78e61e8d4606f550e 100644 (file)
@@ -1273,7 +1273,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;
                        }
@@ -1285,13 +1285,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;
                }
@@ -1557,7 +1557,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;
@@ -1604,13 +1604,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;
@@ -1618,7 +1618,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;
@@ -1637,13 +1637,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;
@@ -2597,7 +2597,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);
 
index e1f547bb485f9974f9c47dc7d70107b1c155d469..e76cfa876daa9491aaaa33ff7c1d8ef3c73c42c2 100644 (file)
@@ -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 */
@@ -154,7 +154,7 @@ struct binder_ptr_cookie {
 
 struct binder_pri_desc {
        __s32 priority;
-       __s32 desc;
+       __u32 desc;
 };
 
 struct binder_pri_ptr_cookie {