LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH] ANDROID: binder: remove 32-bit binder interface.
@ 2018-05-04 19:57 Martijn Coenen
  2018-05-05 21:10 ` kbuild test robot
  0 siblings, 1 reply; 8+ messages in thread
From: Martijn Coenen @ 2018-05-04 19:57 UTC (permalink / raw)
  To: john.stultz, tkjos, arve, amit.pundir, arnd, gregkh
  Cc: linux-kernel, devel, maco, Martijn Coenen

New devices launching with Android P need to use the 64-bit
binder interface, even on 32-bit SoCs [0].

This change removes the Kconfig option to select the 32-bit
binder interface. We don't think this will affect existing
userspace for the following reasons:
1) The latest Android common tree is 4.14, so we don't
   believe any Android devices are on kernels >4.14.
2) Android devices launch on an LTS release and stick with
   it, so we wouldn't expect devices running on <= 4.14 now
   to upgrade to 4.17 or later. But even if they did, they'd
   rebuild the world (kernel + userspace) anyway.
3) Other userspaces like 'anbox' are already using the
   64-bit interface.

Note that this change doesn't remove the 32-bit UAPI
itself; the reason for that is that Android userspace
always uses the latest UAPI headers from upstream, and
userspace retains 32-bit support for devices that are
upgrading. This will be removed as well in 2-3 years,
at which point we can remove the code from the UAPI
as well.

[0]: https://android-review.googlesource.com/c/platform/build/+/595193

Signed-off-by: Martijn Coenen <maco@android.com>
---
 drivers/android/Kconfig  | 13 -------------
 drivers/android/binder.c |  4 ----
 2 files changed, 17 deletions(-)

diff --git a/drivers/android/Kconfig b/drivers/android/Kconfig
index 7dce3795b887..432e9ad77070 100644
--- a/drivers/android/Kconfig
+++ b/drivers/android/Kconfig
@@ -32,19 +32,6 @@ config ANDROID_BINDER_DEVICES
 	  created. Each binder device has its own context manager, and is
 	  therefore logically separated from the other devices.
 
-config ANDROID_BINDER_IPC_32BIT
-	bool "Use old (Android 4.4 and earlier) 32-bit binder API"
-	depends on !64BIT && ANDROID_BINDER_IPC
-	default y
-	---help---
-	  The Binder API has been changed to support both 32 and 64bit
-	  applications in a mixed environment.
-
-	  Enable this to support an old 32-bit Android user-space (v4.4 and
-	  earlier).
-
-	  Note that enabling this will break newer Android user-space.
-
 config ANDROID_BINDER_IPC_SELFTEST
 	bool "Android Binder IPC Driver Selftest"
 	depends on ANDROID_BINDER_IPC
diff --git a/drivers/android/binder.c b/drivers/android/binder.c
index e578eee31589..2ee9fb02dfb8 100644
--- a/drivers/android/binder.c
+++ b/drivers/android/binder.c
@@ -72,10 +72,6 @@
 #include <linux/security.h>
 #include <linux/spinlock.h>
 
-#ifdef CONFIG_ANDROID_BINDER_IPC_32BIT
-#define BINDER_IPC_32BIT 1
-#endif
-
 #include <uapi/linux/android/binder.h>
 #include "binder_alloc.h"
 #include "binder_trace.h"
-- 
2.17.0.441.gb46fe60e1d-goog

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] ANDROID: binder: remove 32-bit binder interface.
  2018-05-04 19:57 [PATCH] ANDROID: binder: remove 32-bit binder interface Martijn Coenen
@ 2018-05-05 21:10 ` kbuild test robot
  2018-05-11  7:57   ` Martijn Coenen
  0 siblings, 1 reply; 8+ messages in thread
From: kbuild test robot @ 2018-05-05 21:10 UTC (permalink / raw)
  To: Martijn Coenen
  Cc: kbuild-all, john.stultz, tkjos, arve, amit.pundir, arnd, gregkh,
	linux-kernel, devel, maco, Martijn Coenen

[-- Attachment #1: Type: text/plain, Size: 1262 bytes --]

Hi Martijn,

I love your patch! Yet something to improve:

[auto build test ERROR on staging/staging-testing]
[also build test ERROR on v4.17-rc3 next-20180504]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Martijn-Coenen/ANDROID-binder-remove-32-bit-binder-interface/20180505-130632
config: m68k-allmodconfig (attached as .config)
compiler: m68k-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        make.cross ARCH=m68k 

All errors (new ones prefixed by >>):

   drivers/android/binder.o: In function `binder_thread_write':
>> binder.c:(.text+0x6a16): undefined reference to `__get_user_bad'
   binder.c:(.text+0x6c9a): undefined reference to `__get_user_bad'
   binder.c:(.text+0x701e): undefined reference to `__get_user_bad'
   binder.c:(.text+0x7414): undefined reference to `__get_user_bad'

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 45127 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] ANDROID: binder: remove 32-bit binder interface.
  2018-05-05 21:10 ` kbuild test robot
@ 2018-05-11  7:57   ` Martijn Coenen
  2018-05-11  8:08     ` Greg KH
  2018-05-14 12:03     ` Christoph Hellwig
  0 siblings, 2 replies; 8+ messages in thread
From: Martijn Coenen @ 2018-05-11  7:57 UTC (permalink / raw)
  To: kbuild test robot, Greg KH
  Cc: kbuild-all, John Stultz, Todd Kjos, Arve Hjønnevåg,
	Amit Pundir, Arnd Bergmann, LKML, open list:ANDROID DRIVERS,
	Martijn Coenen

On Sat, May 5, 2018 at 2:10 PM, kbuild test robot <lkp@intel.com> wrote:
>    drivers/android/binder.o: In function `binder_thread_write':
>>> binder.c:(.text+0x6a16): undefined reference to `__get_user_bad'

Looks like m68k doesn't support 64-bit get_user(). I could just have
binder depend on !CONFIG_M68K, but there may be other architectures
still that don't support this. Another alternative would be to
whitelist the architectures Android supports - eg arm, arm64, x86,
x86_64. But I'm not sure if arch-limited drivers are considered bad
form. Does anybody have suggestions for how to deal with this?

Thanks,
Martijn

>    binder.c:(.text+0x6c9a): undefined reference to `__get_user_bad'
>    binder.c:(.text+0x701e): undefined reference to `__get_user_bad'
>    binder.c:(.text+0x7414): undefined reference to `__get_user_bad'
>
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] ANDROID: binder: remove 32-bit binder interface.
  2018-05-11  7:57   ` Martijn Coenen
@ 2018-05-11  8:08     ` Greg KH
  2018-05-11  8:17       ` Martijn Coenen
  2018-05-14 12:03     ` Christoph Hellwig
  1 sibling, 1 reply; 8+ messages in thread
From: Greg KH @ 2018-05-11  8:08 UTC (permalink / raw)
  To: Martijn Coenen
  Cc: Amit Pundir, open list:ANDROID DRIVERS, Arnd Bergmann, LKML,
	Arve Hjønnevåg, Martijn Coenen, John Stultz,
	kbuild-all, Todd Kjos

On Fri, May 11, 2018 at 09:57:52AM +0200, Martijn Coenen wrote:
> On Sat, May 5, 2018 at 2:10 PM, kbuild test robot <lkp@intel.com> wrote:
> >    drivers/android/binder.o: In function `binder_thread_write':
> >>> binder.c:(.text+0x6a16): undefined reference to `__get_user_bad'
> 
> Looks like m68k doesn't support 64-bit get_user(). I could just have
> binder depend on !CONFIG_M68K, but there may be other architectures
> still that don't support this. Another alternative would be to
> whitelist the architectures Android supports - eg arm, arm64, x86,
> x86_64. But I'm not sure if arch-limited drivers are considered bad
> form. Does anybody have suggestions for how to deal with this?

I think using !CONFIG_M68K is a good start.  We can blacklist any other
arch that doesn't support this, and that list should be small as I doubt
any new ones will be added without this support.

thanks,

greg k-h
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] ANDROID: binder: remove 32-bit binder interface.
  2018-05-11  8:08     ` Greg KH
@ 2018-05-11  8:17       ` Martijn Coenen
  0 siblings, 0 replies; 8+ messages in thread
From: Martijn Coenen @ 2018-05-11  8:17 UTC (permalink / raw)
  To: Greg KH
  Cc: Amit Pundir, open list:ANDROID DRIVERS, Arnd Bergmann, LKML,
	Arve Hjønnevåg, Martijn Coenen, John Stultz,
	kbuild-all, Todd Kjos

On Fri, May 11, 2018 at 10:08 AM, Greg KH <gregkh@linuxfoundation.org> wrote:
> I think using !CONFIG_M68K is a good start.  We can blacklist any other
> arch that doesn't support this, and that list should be small as I doubt
> any new ones will be added without this support.

Thanks, I will send a v2.

>
> thanks,
>
> greg k-h
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] ANDROID: binder: remove 32-bit binder interface.
  2018-05-11  7:57   ` Martijn Coenen
  2018-05-11  8:08     ` Greg KH
@ 2018-05-14 12:03     ` Christoph Hellwig
  2018-05-14 14:00       ` Geert Uytterhoeven
  1 sibling, 1 reply; 8+ messages in thread
From: Christoph Hellwig @ 2018-05-14 12:03 UTC (permalink / raw)
  To: Martijn Coenen
  Cc: kbuild test robot, Greg KH, kbuild-all, John Stultz, Todd Kjos,
	Arve Hjønnevåg, Amit Pundir, Arnd Bergmann, LKML,
	open list:ANDROID DRIVERS, Martijn Coenen, geert, linux-m68k

On Fri, May 11, 2018 at 09:57:52AM +0200, Martijn Coenen wrote:
> On Sat, May 5, 2018 at 2:10 PM, kbuild test robot <lkp@intel.com> wrote:
> >    drivers/android/binder.o: In function `binder_thread_write':
> >>> binder.c:(.text+0x6a16): undefined reference to `__get_user_bad'
> 
> Looks like m68k doesn't support 64-bit get_user(). I could just have
> binder depend on !CONFIG_M68K, but there may be other architectures
> still that don't support this. Another alternative would be to
> whitelist the architectures Android supports - eg arm, arm64, x86,
> x86_64. But I'm not sure if arch-limited drivers are considered bad
> form. Does anybody have suggestions for how to deal with this?

The proper fix is to just support 640bit get/put_user on m68k instead
of working around this.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] ANDROID: binder: remove 32-bit binder interface.
  2018-05-14 12:03     ` Christoph Hellwig
@ 2018-05-14 14:00       ` Geert Uytterhoeven
  2018-05-14 21:30         ` Martijn Coenen
  0 siblings, 1 reply; 8+ messages in thread
From: Geert Uytterhoeven @ 2018-05-14 14:00 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Amit Pundir, open list:ANDROID DRIVERS, Arnd Bergmann,
	linux-m68k, Greg KH, LKML, Arve Hjønnevåg,
	Martijn Coenen, John Stultz, kbuild-all, Linux-Arch,
	Martijn Coenen, Todd Kjos

Hi Christoph,

On Mon, May 14, 2018 at 2:03 PM, Christoph Hellwig <hch@infradead.org> wrote:
> On Fri, May 11, 2018 at 09:57:52AM +0200, Martijn Coenen wrote:
>> On Sat, May 5, 2018 at 2:10 PM, kbuild test robot <lkp@intel.com> wrote:
>> >    drivers/android/binder.o: In function `binder_thread_write':
>> >>> binder.c:(.text+0x6a16): undefined reference to `__get_user_bad'
>>
>> Looks like m68k doesn't support 64-bit get_user(). I could just have
>> binder depend on !CONFIG_M68K, but there may be other architectures
>> still that don't support this. Another alternative would be to
>> whitelist the architectures Android supports - eg arm, arm64, x86,
>> x86_64. But I'm not sure if arch-limited drivers are considered bad
>> form. Does anybody have suggestions for how to deal with this?
>
> The proper fix is to just support 640bit get/put_user on m68k instead

I hope we'll never need 640bit support in {get,put}_user() ;-)

> of working around this.

Patch sent.

BTW, sh also doesn't seem to have 64-bit get_user().
There may be others.

BTW2, does the Android Binder need to care about endianness when talking
to userspace?

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] ANDROID: binder: remove 32-bit binder interface.
  2018-05-14 14:00       ` Geert Uytterhoeven
@ 2018-05-14 21:30         ` Martijn Coenen
  0 siblings, 0 replies; 8+ messages in thread
From: Martijn Coenen @ 2018-05-14 21:30 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Amit Pundir, open list:ANDROID DRIVERS, Arnd Bergmann,
	linux-m68k, Greg KH, LKML, Christoph Hellwig,
	Arve Hjønnevåg, Martijn Coenen, John Stultz,
	kbuild-all, Linux-Arch, Todd Kjos

On Mon, May 14, 2018 at 4:00 PM, Geert Uytterhoeven
<geert@linux-m68k.org> wrote:
> Patch sent.

Thanks for the quick turn-around!

>
> BTW, sh also doesn't seem to have 64-bit get_user().
> There may be others.

I checked quickly, nios2 is the only other arch that explicitly
doesn't support it and would result in a build error; some other archs
don't define __get_user, but in that case they just fall back to
raw_copy_from_user().

>
> BTW2, does the Android Binder need to care about endianness when talking
> to userspace?

No, I don't think it should.

Thanks,
Martijn

>
> Gr{oetje,eeting}s,
>
>                         Geert
>
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
>
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
>                                 -- Linus Torvalds
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2018-05-14 21:30 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-04 19:57 [PATCH] ANDROID: binder: remove 32-bit binder interface Martijn Coenen
2018-05-05 21:10 ` kbuild test robot
2018-05-11  7:57   ` Martijn Coenen
2018-05-11  8:08     ` Greg KH
2018-05-11  8:17       ` Martijn Coenen
2018-05-14 12:03     ` Christoph Hellwig
2018-05-14 14:00       ` Geert Uytterhoeven
2018-05-14 21:30         ` Martijn Coenen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).