Commit Graph

253659 Commits

Author SHA1 Message Date
Chia-chi Yeh
764fc0ee29 net: PPPoPNS and PPPoLAC fixes.
net: Fix a bitmask in PPPoPNS and rename constants in PPPoPNS and PPPoLAC.

Signed-off-by: Chia-chi Yeh <chiachi@android.com>

net: Fix a potential deadlock while releasing PPPoLAC/PPPoPNS socket.

PPP driver guarantees that no thread will be executing start_xmit() after
returning from ppp_unregister_channel(). To achieve this, a spinlock (downl)
is used. In pppolac_release(), ppp_unregister_channel() is called after sk_udp
is locked. At the same time, another thread might be running in pppolac_xmit()
with downl. Thus a deadlock will occur if the thread tries to lock sk_udp.
The same situation might happen on sk_raw in pppopns_release().

Signed-off-by: Chia-chi Yeh <chiachi@android.com>

net: Force PPPoLAC and PPPoPNS to bind an interface before creating PPP channel.

It is common to manipulate the routing table after configuring PPP device.
Since both PPPoLAC and PPPoPNS run over IP, care must be taken to make sure
that there is no loop in the routing table.
Although this can be done by adding a host route, it might still cause
problems when the interface is down for some reason.

To solve this, this patch forces both drivers to bind an interface before
creating PPP channel, so the system will not re-route the tunneling sockets
to another interface when the original one is down. Another benefit is that
now the host route is no longer required, so there is no need to remove it
when PPP channel is closed.

Signed-off-by: Chia-chi Yeh <chiachi@android.com>

net: Avoid sleep-inside-spinlock in PPPoLAC and PPPoPNS.

Since recv() and xmit() are called with a spinlock held, routines which might
sleep cannot be used. This issue is solved by following changes:

Incoming packets are now processed in backlog handler, recv_core(), instead of
recv(). Since backlog handler is always executed with socket spinlock held, the
requirement of ppp_input() is still satisfied.

Outgoing packets are now processed in workqueue handler, xmit_core(), instead of
xmit(). Note that kernel_sendmsg() is no longer used to prevent touching dead
sockets.

In release(), lock_sock() and pppox_unbind_sock() ensure that no thread is in
recv_core() or xmit(). Then socket handlers are restored before release_sock(),
so no packets will leak in backlog queue.

Signed-off-by: Chia-chi Yeh <chiachi@android.com>

net: Fix msg_iovlen in PPPoLAC and PPPoPNS.

Although any positive value should work (which is always true in both drivers),
the correct value should be 1.

Signed-off-by: Chia-chi Yeh <chiachi@android.com>
2011-06-14 09:09:14 -07:00
Chia-chi Yeh
60df157728 net: add PPP on PPTP Network Server (PPPoPNS) driver.
Signed-off-by: Chia-chi Yeh <chiachi@android.com>

ppopns: dont include px_proto define in if_pppopns.h

Change-Id: I27e687667db5b45182562f4a517a2e6cec6b1350
Signed-off-by: Dima Zavin <dima@android.com>
2011-06-14 09:09:14 -07:00
Chia-chi Yeh
36d00741d5 net: add PPP on L2TP Access Concentrator (PPPoLAC) driver.
Change-Id: I3ae3ee7520951ae24269db0ef2898c6455cf6bcc
Signed-off-by: Chia-chi Yeh <chiachi@android.com>

ppolac: dont include px_proto define in if_pppolac.h

Change-Id: I55bc9cf91ea0e9e8f7bf5d6e241d188e1269343a
Signed-off-by: Dima Zavin <dima@android.com>
2011-06-14 09:09:13 -07:00
San Mehat
1d38bc7d05 cgroup: Add generic cgroup subsystem permission checks.
Rather than using explicit euid == 0 checks when trying to move
tasks into a cgroup via CFS, move permission checks into each
specific cgroup subsystem. If a subsystem does not specify a
'can_attach' handler, then we fall back to doing our checks the old way.

    This way non-root processes can add arbitrary processes to
a cgroup if all the registered subsystems on that cgroup agree.

    Also change explicit euid == 0 check to CAP_SYS_ADMIN

Signed-off-by: San Mehat <san@google.com>
2011-06-14 09:09:13 -07:00
Dima Zavin
22e9cd9dc9 fs: yaffs: don't force YAFFS_TRACE_ALWAYS for all trace levels
Change-Id: I9ddc676382d26aef7f12145d412fe670cb486317
Signed-off-by: Dima Zavin <dima@android.com>
2011-06-14 09:09:13 -07:00
Arve Hjønnevåg
8237911c64 fs: yaffs: Import yaffs from Thu Dec 23 13:31:37 2010 +1300
commit ddf33fed15c2376bfb602d62dd018c63fce60df8
Author: Timothy Manning <tfhmanning@gmail.com>
Date:   Thu Dec 23 13:31:37 2010 +1300

    yaffs updated direct/timothy_tests/quick_tests
    Signed-off-by: Timothy Manning <tfhmanning@gmail.com>

Change-Id: I5bbe5a05277bdf8a6fe188bbe4c77725b3fa2aae
Signed-off-by: Dima Zavin <dima@android.com>
2011-06-14 09:09:13 -07:00
San Mehat
4bfab3c635 fs: block_dump: Don't display inode changes if block_dump < 2
Signed-off-by: San Mehat <san@android.com>
2011-06-14 09:09:12 -07:00
Dmitry Shmidt
5a7cd71e61 tiwlan: Add abstract wifi control functions support 2011-06-14 09:09:12 -07:00
Dima Zavin
8da0417ce4 usb: gadget: android: fix compilation on 2.6.37
Change-Id: I9a99f007415c5be1bd1a86b138486eac51784e0d
Signed-off-by: Dima Zavin <dima@android.com>
2011-06-14 09:09:12 -07:00
Mike Lockwood
e6be8941f4 USB: gadget: composite: Use separate switches for connected and config state
Also remove disconnect debouncing, which didn't actually work on some platforms

Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:12 -07:00
John Michelau
00bc4089ef USB: gadget: acm,rndis: IAD class, subclass & prot should match 1st iface
Microsoft recommends that the class and subclass fields of
an IAD match the same fields from the first interface in the
collection that the IAD is grouping. In practice, we are also
finding that the protocol fields should also match. Without
this change, the default Microsoft composite driver may not
group interfaces properly, which is what allows child
function drivers with IAD's to load correctly.

Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:12 -07:00
John Michelau
f71a394a40 USB: gadget: composite: Dynamically set IAD bFirstInterface
bFirstInterface should be set equal to bInterfaceNumber of
the first interface in a grouping. It's currently being set
only when a composite device is bound, and it does not get
updated when functions are enabled or disabled.

Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:11 -07:00
John Michelau
d5d2de6539 USB: gadget: android Fix gadget descriptor compliance for IAD's
USB-IF core team mandates that composite devices containing
IAD's must use bDeviceClass=0xEF, bDeviceSubClass=0x02, &
bDeviceProtocol=0x01 instead of the usual 0x00 in all fields.
This is not a problem currently on Linux hosts, but it is a
problem when connecting to Windows hosts. Without this change
the default Microsoft composite driver will not group
interfaces properly, which is what allows child function
drivers with IAD's to load correctly.

Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:11 -07:00
John Michelau
677ba87bdf usb: gadget: Multiple ACM gadget instances
- Added multiple ACM instance support in Android gadget
- Fixed multiple instance naming issue in ACM function
- Increased max instances from 4 to 8

Change-Id: I65f1b0be94da859bab7ec0ad7cd804b896c7c4c5
Signed-off-by: John Michelau <john.michelau@motorola.com>
2011-06-14 09:09:11 -07:00
John Michelau
51d5755259 usb: gadget: Fixed Android gadget function discovery & product matching
- Don't bind until all required functions have registered
- Consider multi-instance functions when matching products

Change-Id: I6fa10567db71d49cd81968c01d75e326ff9a17c8
Signed-off-by: John Michelau <john.michelau@motorola.com>
2011-06-14 09:09:11 -07:00
Benoit Goby
ffdab0c0c4 usb: gadget: rndis: don't use dev_get_stats
Since 2.6.36, spin_lock_bh has been added to dev_txq_stats_fold. So
dev_get_stats cannot be called from atomic context.

Replaced it by netdev_stats_to_stats64 to copy the stats directly. This
will work if the device driver does not need txq tx stats folding.

http://lkml.org/lkml/2010/9/20/250

Change-Id: I715b00892beda56cc369139d6e2bdc9efb6bfe79
Signed-off-by: Benoit Goby <benoit@android.com>
2011-06-14 09:09:11 -07:00
Mike Lockwood
16c08c2871 USB: gadget: f_mtp: Zero length packet fixes
Send zero length packets at end of transfers that are a multiple of the
bulk max packet size as required by MTP.

Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:10 -07:00
Mike Lockwood
3e800b6fa0 USB: gadget: f_mtp: Support for file transfer length greater than 4 gigabytes
For backward compatibility with PTP, MTP is limited to a 32-bit file size.
When transferring files greater than 4 gig, MTP uses 0xFFFFFFFF as the file size
and the receiver reads until it receives a short packet.

Expanded size of mtp_file_range.length to 64 bits and added support for
writing zero length packets.

Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:10 -07:00
Mike Lockwood
76ac655018 USB: gadget: f_mtp: Return zero result for successful file transfer.
Returning number of bytes transfered does not work for files > 2 gig
since ioctl() result is a signed integer.

Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:10 -07:00
Mike Lockwood
491d4186e0 USB: gadget: f_mtp: MTP driver cleanup:
Use a work queue instead of a separate thread for file transfer ioctls
(note: the file transfer must be done on a kernel thread rather than in
process context so vfs_read and vfs_write will use the correct address space
for the buffers)

Enforce requirement that only one ioctl call may be active at a time,
and remove mutex in mtp_send_event that is now no longer necessary.

Synchronize around use of shared variables to avoid SMP issues

Fix mismatched calls to fget and fput

Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:09 -07:00
Benoit Goby
ffab952c86 usb: gadget: android: Remove WAKEUP flag from bmAttributes
Remove USB_CONFIG_ATT_WAKEUP from bmAttributes as we don't
support remote wakeup. This fixes an issue with the USB 2.0
compliance test tool.

Change-Id: Ic15e44710069f3f05ace6a82bbfa2b85a3649027
Signed-off-by: Benoit Goby <benoit@android.com>
2011-06-14 09:09:09 -07:00
Mike Lockwood
d6b1d7348a USB: gadget: android: Disable MTP when RNDIS function is enabled.
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:09 -07:00
Mike Lockwood
1de4d4d8df USB: gadget: f_mtp: Add ioctl for sending events via the interrupt endpoint
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:09 -07:00
Dmitry Shmidt
7aea385332 drivers: usb: gadget: rndis: Fix section mismatch warning
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
2011-06-14 09:09:09 -07:00
Dmitry Shmidt
d43a1a5594 drivers: usb: gadget: mass_storage: Fix section mismatch warning
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
2011-06-14 09:09:08 -07:00
Dmitry Shmidt
577e37a65b drivers: usb: gadget: Fix section mismatch warning
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
2011-06-14 09:09:08 -07:00
Mike Lockwood
28acc1a88c USB: composite: Add usb_composite_force_reset utility to force enumeration
Use this rather than calling usb_gadget_disconnect and usb_gadget_connect
directly to avoid sending USB disconnect events to userspace when resetting
the bus.

Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:08 -07:00
Mike Lockwood
4a4414416d USB: gadget: android: Remove unused function android_usb_set_connected()
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:08 -07:00
Mike Lockwood
8da4cc8f77 USB: gadget: composite: Move switch_set_state calls to a work queue
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:08 -07:00
Mike Lockwood
ba83b0158e USB: gadget: f_mtp: USB gadget function driver for MTP and PTP device support.
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:08 -07:00
Mike Lockwood
fb52b002c2 USB: composite: Add support for functions overriding USB_DT_STRING descriptors
Needed for MTP support.

Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:07 -07:00
Mike Lockwood
e2dc503c42 USB: gadget: composite: Add userspace notifications for USB state changes
Add switch to notify current USB configuration.  This can be used to detect
USB connect and disconnect events.

Broadcast a change via the usb_composite class when a USB function is
enabled or disabled.

Rename usb_function.hidden to usb_function.disabled.

Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:07 -07:00
Mike Lockwood
0de5a69f62 USB: gadget: f_mass_storage: Integrate android customizations
Integrate support for android composite driver and platform data
within CONFIG_USB_ANDROID_MASS_STORAGE.

Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:07 -07:00
Velempati Chiranjeevi
efbf862863 USB: android gadget: mass storage: Fix format issue for Vista Host
As part of formating the mass storage device, Host sends the INQUIRY
scsi command. As per the standard, the command length for this
command should be 6 bytes, whereas the Vista host sends 12 bytes.

When the command length of the command is not equal to the standard
length, the device sends a phase error as part of the status phase.
When the host receives a phase error, it re-enumerates, hence the
error.

If the command is INQUIRY, and the command length is 12 bytes,
treating this as a good command and not sending the phase error
to the host fixes this issue.

Signed-off-by: Velempati Chiranjeevi <c_cvelem@qualcomm.com>
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:07 -07:00
Mike Lockwood
27d1890c42 USB: gadget: f_mass_storage: Defer handling interface changes until it is safe.
Pulling in some code from file_storage.c, we now handle interface changes
in do_set_config(), which is now not called until any pending requests have
been successfully completed or cancelled.

This fixes a race condition that resulted in usb_ep_free_request() being called
while the request is still busy.

Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:07 -07:00
Arve Hjønnevåg
0130a0e683 USB: gadget: android: mass_storage: Use spin_lock_irqsave/spin_unlock_irqrestore
The old code did not allways disable interrupts when called from thread
context, but tried to lock the same spinlock from interrupt context.

This was merged from a change to drivers/usb/function/mass_storage.c
in the android-msm-2.6.29 branch.

Signed-off-by: Arve Hjønnevåg <arve@android.com>
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:06 -07:00
Mike Lockwood
0a4c12d4fa USB: gadget: android: check for null _android_dev in android_register_function()
This fixes a load ordering issue that occurred if a function driver loads before
the android gadget driver is initialized.

Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:06 -07:00
Mike Lockwood
f620564133 USB: gadget: f_mass_storage: Flush writes after every 4 MB.
This avoids excessive caching at the block level layer when copying large
files to the storage device.

Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:06 -07:00
Mike Lockwood
0d511c4470 USB: gadget: f_rndis: Add platform data for RNDIS vendor ID and MAC address.
This fixes a kernel panic in rndis.c when receiving the
OID_GEN_VENDOR_DESCRIPTION command.

Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:06 -07:00
Mike Lockwood
0f63be2175 USB: gadget: composite: Don't increment interface number for alt settings.
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:05 -07:00
Mike Lockwood
8c6a6b2180 USB: gadget: composite: Don't call set_alt() on functions that are hidden.
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:05 -07:00
Mike Lockwood
352208629f USB: gadget: android: Disable UMS when RNDIS ethernet is active.
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:05 -07:00
Mike Lockwood
a83f187e9f usb: gadget: u_ether: Remove warning from gether_disconnect()
gether_disconnect() is always called before gether_connect() by the different
USB ethernet functions, so this warning was firing during normal operation.

Change-Id: I178cc7d1f67e9e87ac2e99c6674c4db8fcddf4a0
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:05 -07:00
Steve Kondik
8f5f391403 Add USB_ANDROID_RNDIS_WCEIS option.
Change-Id: I85973ebfcbfae6b401fb8b402842309c72655149
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:09:02 -07:00
Mike Lockwood
da574e2e1f USB: gadget: android: Fix special case for RNDIS ethernet function
Only set device descriptor bDeviceClass field to USB_CLASS_COMM when
the RNDIS function is actually enabled.

Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:08:59 -07:00
Mike Lockwood
c832ca8239 USB: composite: Compute interface numbers correctly when functions are hidden.
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:08:57 -07:00
Mike Lockwood
573cea55c7 USB: gadget: android: Specify USB_CLASS_COMM in device descriptor if using RNDIS
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:08:56 -07:00
Mike Lockwood
fe8ae89847 USB: gadget: Disable RNDIS function by default if CONFIG_USB_ANDROID_RNDIS is set
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:08:56 -07:00
Mike Lockwood
053297308f USB: android: Use composite class driver for enabling and disabling functions
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:08:55 -07:00
Mike Lockwood
f041ac6903 USB: composite: Add class driver for enabling and disabling USB functions.
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-06-14 09:08:55 -07:00