aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2010-05-03mxc: Add generic USB HW initialization for MX51Dinh Nguyen3-5/+113
This patch adds USB HW initializiation code to /plat-mxc/ehci.c. -Sets some specific PHY settings Renames mxc_set_usbcontrol to mxc_initialize_usb_hw. Adds new register bit defines for the USB HW on Freescale SoCs. This patch applies to 2.6.34-rc6. Signed-off-by: Dinh Nguyen <[email protected]> Reviewed-by: Daniel Mack <[email protected]> Signed-off-by: Sascha Hauer <[email protected]>
2010-05-03mx5: Enable board specific functions for enabling USB host on BabbageDinh Nguyen1-0/+129
This patch enables USB host functionality for Host1 and OTG port on Freescale MX51 Babbage HW. This patch contains the board specific HW initialization of the USB HW. This patch applies to 2.6.34-rc6. Signed-off-by: Dinh Nguyen <[email protected]> Reviewed-by: Daniel Mack <[email protected]> Signed-off-by: Sascha Hauer <[email protected]>
2010-05-03mx5: Add USB device definitions for Freescale MX51 Babbage HWDinh Nguyen3-0/+59
This patch is part of enabling USB for Freescale MX51 Babbage HW. This patch adds device structures for USB Host1 and OTG port, and adds clocking information for USB HW. This patch applies to 2.6.34-rc6. Signed-off-by: Dinh Nguyen <[email protected]> Signed-off-by: Sascha Hauer <[email protected]>
2010-05-03mxc: Update GPIO for USB support on Freescale MX51 Babbage HWDinh Nguyen1-13/+20
This patch is part of enabling USB for Freescale MX51 Babbage HW. This patch updates the iomux pins for USB, and gpio line for reset the USB hub on the MX51 Babbage HW. This patch applies to 2.6.34-rc6. Signed-off-by: Dinh Nguyen <[email protected]> Signed-off-by: Sascha Hauer <[email protected]>
2010-04-23arm/plat-mxc: Fix forgotten renaming in timer.cWolfram Sang1-1/+1
Commit "mxc: Change gpt timer code to be more generic by using V2 instead of MX3" forgot to replace one occurence causing a build failure. Signed-off-by: Wolfram Sang <[email protected]> Cc: Amit Kucheria <[email protected]> Cc: Sascha Hauer <[email protected]> Signed-off-by: Sascha Hauer <[email protected]>
2010-04-22mx5: Add registration of GPIOs for MX5 devicesDinh Nguyen3-6/+36
Register the gpio irqs on Freescale's MX51 Babbage HW. Signed-off-by: Dinh Nguyen <[email protected]> Signed-off-by: Amit Kucheria <[email protected]> Signed-off-by: Sascha Hauer <[email protected]>
2010-04-22mxc: Change gpt timer code to be more generic by using V2 instead of MX3Amit Kucheria1-22/+22
Replace mx3_ with v2_ since the register layout is the same for all SoCs using version 2 of the timer (mx25, mx31, mx37 and now mx51) Signed-off-by: Amit Kucheria <[email protected]> Signed-off-by: Sascha Hauer <[email protected]>
2010-04-14ARM: MXC: mxcmmc: work around a bug in the SDHC busy line handlingDaniel Mack3-0/+25
MX3 SoCs have a silicon bug which corrupts CRC calculation of multi-block transfers when connected SDIO peripheral doesn't drive the BUSY line as required by the specs. One way to prevent this is to only allow 1-bit transfers. Another way is playing tricks with the DMA engine, but this isn't mainline yet. So for now, we live with the performance drawback of 1-bit transfers until a nicer solution is found. This patch introduces a new host controller callback 'init_card' which is for now only called from mmc_sdio_init_card(). Signed-off-by: Daniel Mack <[email protected]> Cc: Sascha Hauer <[email protected]> Cc: Dan Williams <[email protected]> Cc: Volker Ernst <[email protected]> Cc: Jiri Kosina <[email protected]> Cc: Michał Mirosław <[email protected]> Signed-off-by: Sascha Hauer <[email protected]>
2010-04-14ARM: MXC: mxcmmc: Teach the driver SDIO operationsDaniel Mack1-11/+59
Successfully tested on MX31 hardware using libertas SDIO peripherals. Signed-off-by: Daniel Mack <[email protected]> Cc: Sascha Hauer <[email protected]> Cc: Dan Williams <[email protected]> Cc: Volker Ernst <[email protected]> Cc: Jiri Kosina <[email protected]> Cc: Michał Mirosław <[email protected]> Signed-off-by: Sascha Hauer <[email protected]>
2010-04-14ARM: MXC: mxcmmc: misc cleanupsDaniel Mack1-4/+13
Be more verbose on error messages and add one debug message. Signed-off-by: Daniel Mack <[email protected]> Cc: Sascha Hauer <[email protected]> Cc: Dan Williams <[email protected]> Cc: Volker Ernst <[email protected]> Cc: Jiri Kosina <[email protected]> Cc: Michał Mirosław <[email protected]> Signed-off-by: Sascha Hauer <[email protected]>
2010-04-14ARM: mx3/lilly1131: add USB supportDaniel Mack2-0/+146
Signed-off-by: Daniel Mack <[email protected]> Cc: Sascha Hauer <[email protected]> Signed-off-by: Sascha Hauer <[email protected]>
2010-04-14MXC: mxc_nand: support i.MX21Ivo Clarysse1-16/+25
On i.MX21 SoCs, if the NFC_CONFIG1:NFC_INT_MASK bit is set, NFC_CONFIG2:NFC_INT always reads out zero, even if an operation is completed. This patch uses enable_irq and disable_irq_nosync instead of NFC_CONFIG1:NFC_INT_MASK to mask NFC interrupts. This allows NFC_CONFIG2:NFC_INT to also be used to detect operation completion on i.MX21. The i.MX21 NFC does not signal reset completion using NFC_CONFIG1:NFC_INT_MASK, so instead reset completion is tested by checking if NFC_CONFIG2 becomes 0. Signed-off-by: Ivo Clarysse <[email protected]> Signed-off-by: Sascha Hauer <[email protected]>
2010-04-14MXC: mxc_nand: set NFC registers after resetIvo Clarysse1-42/+48
This patch allows the mxc_nand driver to reset the NAND flash controller. NFC registers are (re-)set after completion of the reset, as a reset will have reverted the NFC registers to their default values. Signed-off-by: Ivo Clarysse <[email protected]> Signed-off-by: Sascha Hauer <[email protected]>
2010-04-14imx31: add rtc device on litekit board.Vladimir Zapolskiy1-0/+1
This patch adds support for SoC build-in RTC device on litekit board. Signed-off-by: Vladimir Zapolskiy <[email protected]> Cc: Sascha Hauer <[email protected]> Signed-off-by: Sascha Hauer <[email protected]>
2010-04-14imx3: Add rtc platform device supportVladimir Zapolskiy2-0/+20
This patch adds support for build-in RTC device found on Freescale imx31 and imx35 SoCs. Signed-off-by: Vladimir Zapolskiy <[email protected]> Cc: Sascha Hauer <[email protected]> Signed-off-by: Sascha Hauer <[email protected]>
2010-04-13Merge branch 'pm-fixes' of ↵Linus Torvalds1-1/+1
git://git.kernel.org/pub/scm/linux/kernel/git/rafael/suspend-2.6 * 'pm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/suspend-2.6: PM / Hibernate: user.c, fix SNAPSHOT_SET_SWAP_AREA handling
2010-04-13Merge branch 'bugfixes' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6Linus Torvalds6-23/+39
* 'bugfixes' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6: NFSv4: fix delegated locking NFS: Ensure that the WRITE and COMMIT RPC calls are always uninterruptible NFS: Fix a race with the new commit code NFS: Ensure that writeback_single_inode() calls write_inode() when syncing NFS: Fix the mode calculation in nfs_find_open_context NFSv4: Fall back to ordinary lookup if nfs4_atomic_open() returns EISDIR
2010-04-13Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6Linus Torvalds17-135/+206
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6: sparc64: Add some more commentary to __raw_local_irq_save() sparc64: Fix memory leak in pci_register_iommu_region(). sparc64: Add kmemleak annotation to sun4v_build_virq() sparc64: Support kmemleak. sparc64: Add function graph tracer support. sparc64: Give a stack frame to the ftrace call sites. sparc64: Use a seperate counter for timer interrupts and NMI checks, like x86. sparc64: Remove profiling from some low-level bits. sparc64: Kill unnecessary static on local var in ftrace_call_replace(). sparc64: Kill CONFIG_STACK_DEBUG code. sparc64: Add HAVE_FUNCTION_TRACE_MCOUNT_TEST and tidy up. sparc64: Adjust __raw_local_irq_save() to cooperate in NMIs. sparc64: Use kstack_valid() in die_if_kernel().
2010-04-13Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6Linus Torvalds30-138/+348
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (25 commits) smc91c92_cs: define multicast_table as unsigned char can: avoids a false warning e1000e: stop cleaning when we reach tx_ring->next_to_use igb: restrict WoL for 82576 ET2 Quad Port Server Adapter virtio_net: missing sg_init_table Revert "tcp: Set CHECKSUM_UNNECESSARY in tcp_init_nondata_skb" iwlwifi: need check for valid qos packet before free tcp: Set CHECKSUM_UNNECESSARY in tcp_init_nondata_skb udp: fix for unicast RX path optimization myri10ge: fix rx_pause in myri10ge_set_pauseparam net: corrected documentation for hardware time stamping stmmac: use resource_size() x.25 attempts to negotiate invalid throughput x25: Patch to fix bug 15678 - x25 accesses fields beyond end of packet. bridge: Fix IGMP3 report parsing cnic: Fix crash during bnx2x MTU change. qlcnic: fix set mac addr r6040: fix r6040_multicast_list vhost-net: fix vq_memory_access_ok error checking ath9k: fix double calls to ath_radio_enable ...
2010-04-13smc91c92_cs: define multicast_table as unsigned charKen Kawasaki1-7/+6
smc91c92_cs: * define multicast_table as unsigned char * remove unnecessary "#ifndef final_version" Signed-off-by: Ken Kawasaki <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2010-04-13can: avoids a false warningEric Dumazet1-1/+1
At this point optlen == sizeof(sfilter) but some compilers are dumb. Reported-by: Németh Márton <[email protected] Signed-off-by: Eric Dumazet <[email protected]> Acked-by: Oliver Hartkopp <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2010-04-13e1000e: stop cleaning when we reach tx_ring->next_to_useTerry Loftin1-0/+2
Tx ring buffers after tx_ring->next_to_use are volatile and could change, possibly causing a crash. Stop cleaning when we hit tx_ring->next_to_use. Signed-off-by: Terry Loftin <[email protected]> Acked-by: Bruce Allan <[email protected]> Signed-off-by: Jeff Kirsher <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2010-04-13igb: restrict WoL for 82576 ET2 Quad Port Server AdapterStefan Assmann2-0/+2
Restrict Wake-on-LAN to first port on 82576 ET2 quad port NICs, as it is only supported there. Signed-off-by: Stefan Assmann <[email protected]> Acked-by: Alexander Duyck <[email protected]> Signed-off-by: Jeff Kirsher <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2010-04-13sparc64: Add some more commentary to __raw_local_irq_save()David S. Miller1-0/+7
Suggested by Peter Zijlstra Signed-off-by: David S. Miller <[email protected]>
2010-04-13Merge branch 'master' of /home/davem/src/GIT/linux-2.6/David S. Miller4482-3286/+22501
Conflicts: lib/Kconfig.debug
2010-04-12sparc64: Fix memory leak in pci_register_iommu_region().David S. Miller1-3/+8
Found by kmemleak. If request_resource() fails, we leak the struct resource we allocated to represent the IOMMU mapping area. This actually happens on sun4v machines because the IOMEM area is only reported sans the IOMMU region, unlike all previous systems. I'll need to fix that at some point, but for now fix the leak. Signed-off-by: David S. Miller <[email protected]>
2010-04-12sparc64: Add kmemleak annotation to sun4v_build_virq()David S. Miller1-0/+8
The only reference we store to this memory is in the form of a physical address, so kmemleak can't see it. Add a kmemleak_not_leak() annotation. It's probably useful to be able to look at a dump of these things either via debugfs or similar, and thus we could at some point store them in some kind of table and therefore get rid of this annotation. Signed-off-by: David S. Miller <[email protected]>
2010-04-12sparc64: Support kmemleak.David S. Miller2-1/+5
Only missing thing was an _sdata marker in vmlinux.lds.S Signed-off-by: David S. Miller <[email protected]>
2010-04-12sparc64: Add function graph tracer support.David S. Miller10-15/+132
Signed-off-by: David S. Miller <[email protected]>
2010-04-12sparc64: Give a stack frame to the ftrace call sites.David S. Miller1-15/+16
It's the only way we'll be able to implement the function graph tracer properly. A positive is that we no longer have to worry about the linker over-optimizing the tail call, since we don't use a tail call any more. Signed-off-by: David S. Miller <[email protected]>
2010-04-12sparc64: Use a seperate counter for timer interrupts and NMI checks, like x86.David S. Miller3-3/+3
This keeps us from having to use kstat_irqs_cpu() from the NMI handler, the former of which is a profiled function. Instead we use a currently empty slot in the cpu_data Signed-off-by: David S. Miller <[email protected]>
2010-04-12sparc64: Remove profiling from some low-level bits.David S. Miller1-1/+8
These include the timer implementation, perf events support, and the performance counter register (pcr) programming layer. Signed-off-by: David S. Miller <[email protected]>
2010-04-12sparc64: Kill unnecessary static on local var in ftrace_call_replace().David S. Miller1-1/+1
Signed-off-by: David S. Miller <[email protected]>
2010-04-12sparc64: Kill CONFIG_STACK_DEBUG code.David S. Miller2-78/+1
The generic stack tracer does this job just as well. Signed-off-by: David S. Miller <[email protected]>
2010-04-12sparc64: Add HAVE_FUNCTION_TRACE_MCOUNT_TEST and tidy up.David S. Miller2-7/+16
Check function_trace_stop at ftrace_caller Toss mcount_call and dummy call of ftrace_stub, unnecessary. Document problems we'll have if the final kernel image link ever turns on relaxation. Properly size 'ftrace_call' so it looks right when inspecting instructions under gdb et al. Signed-off-by: David S. Miller <[email protected]>
2010-04-12sparc64: Adjust __raw_local_irq_save() to cooperate in NMIs.David S. Miller1-2/+12
If we are in an NMI then doing a plain raw_local_irq_disable() will write PIL_NORMAL_MAX into %pil, which is lower than PIL_NMI, and thus we'll re-enable NMIs and recurse. Doing a simple: %pil = %pil | PIL_NORMAL_MAX does what we want, if we're already at PIL_NMI (15) we leave it at that setting, else we set it to PIL_NORMAL_MAX (14). This should get the function tracer working on sparc64. Signed-off-by: David S. Miller <[email protected]>
2010-04-12sparc64: Use kstack_valid() in die_if_kernel().David S. Miller1-23/+3
This gets rid of a local function (is_kernel_stack()) which tries to do the same thing, yet poorly in that it doesn't handle IRQ stacks properly. Signed-off-by: David S. Miller <[email protected]>
2010-04-12virtio_net: missing sg_init_tableShirley Ma1-0/+2
Add missing sg_init_table for sg_set_buf in virtio_net which induced in defer skb patch. Reported-by: Thomas Müller <[email protected]> Tested-by: Thomas Müller <[email protected]> Signed-off-by: Shirley Ma <[email protected]> Signed-off-by: David S. Miller <[email protected]>
2010-04-12Linux 2.6.34-rc4Linus Torvalds1-1/+1
2010-04-12Merge branch 'anonvma'Linus Torvalds2-43/+84
* anonvma: anonvma: when setting up page->mapping, we need to pick the _oldest_ anonvma anon_vma: clone the anon_vma chain in the right order vma_adjust: fix the copying of anon_vma chains Simplify and comment on anon_vma re-use for anon_vma_prepare()
2010-04-12Merge master.kernel.org:/home/rmk/linux-2.6-armLinus Torvalds20-77/+422
* master.kernel.org:/home/rmk/linux-2.6-arm: (21 commits) ARM: Fix ioremap_cached()/ioremap_wc() for SMP platforms ARM: 6043/1: AT91 slow-clock resume: Don't wait for a disabled PLL to lock ARM: 6031/1: fix Thumb-2 decompressor ARM: 6029/1: ep93xx: gpio.c: local functions should be static ARM: 6028/1: ARM: add MAINTAINERS for U300 ARM: 6024/1: bcmring: fix missing down on semaphore in dma.c MXC: mach_armadillo5x0: Add USB Host support. ARM mach-mx3: duplicated include ARM mach-mx3: duplicated include imx31: add watchdog device on litekit board. imx3: Add watchdog platform device support MXC: mach-mx31_3ds: add support for freescale mc13783 power management device. MXC: mach-mx31_3ds: Add SPI1 device support. MXC: mach-mx31_3ds: Add support for on board NAND Flash. MXC: mach-mx31_3ds: Update variable names over recent mach name modification. imx31: fix parent clock for rtc i.MX51: remove NFC AXI static mapping i.MX51: determine silicon revision dynamically i.MX51: map TZIC dynamically i.MX51: Use correct clock for gpt ...
2010-04-12Merge branch 'master' of ↵Linus Torvalds2-5/+21
git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable * 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable: Btrfs: make sure the chunk allocator doesn't create zero length chunks Btrfs: fix data enospc check overflow
2010-04-12Merge branch 'for_linus' of ↵Linus Torvalds3-6/+16
git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6 * 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6: quota: Fix possible dq_flags corruption quota: Hide warnings about writes to the filesystem before quota was turned on ext3: symlink must be handled via filesystem specific operation ext2: symlink must be handled via filesystem specific operation
2010-04-12Merge branch 'for_linus' of ↵Linus Torvalds5-10/+16
git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-udf-2.6 * 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-udf-2.6: udf: add speciffic ->setattr callback udf: potential integer overflow
2010-04-12Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linusLinus Torvalds44-614/+1046
* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus: (36 commits) MIPS: Calculate proper ebase value for 64-bit kernels MIPS: Alchemy: DB1200: Remove custom wait implementation MIPS: Big Sur: Make defconfig more useful. MIPS: Fix __vmalloc() etc. on MIPS for non-GPL modules MIPS: Sibyte: Fix M3 TLB exception handler workaround. MIPS: BCM63xx: Fix build failure in board_bcm963xx.c MIPS: uasm: Add OR instruction. MIPS: Sibyte: Apply M3 workaround only on affected chip types and versions. MIPS: BCM63xx: Initialize gpio_out_low & out_high to current value at boot. MIPS: BCM63xx: Register SSB SPROM fallback in board's first stage callback MIPS: BCM63xx: Fix typo in cpu-feature-overrides file. MIPS: BCM63xx: Add support for second uart. MIPS: BCM63xx: Fix double gpio registration. MIPS: BCM63xx: Add DWVS0 board MIPS: BCM63xx: Add the RTA1025W-16 BCM6348-based board to suppported boards. MIPS: BCM63xx: Fix BCM6338 and BCM6345 gpio count MIPS: libgcc.h: Checkpatch cleanup MIPS: Loongson-2F: Flush the branch target history in BTB and RAS MIPS: Move signal trampolines off of the stack. MIPS: Preliminary VDSO ...
2010-04-12Merge branch 'for-2.6.34' of git://linux-nfs.org/~bfields/linuxLinus Torvalds1-1/+4
* 'for-2.6.34' of git://linux-nfs.org/~bfields/linux: svcrdma: RDMA support not yet compatible with RPC6
2010-04-12Merge branch 'for-linus' of ↵Linus Torvalds3-3/+3
git://git.kernel.org/pub/scm/linux/kernel/git/ryusuke/nilfs2 * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ryusuke/nilfs2: nilfs2: fix typo "numer" -> "number" in alloc.c nilfs2: Remove an uninitialization warning in nilfs_btree_propagate_v() nilfs2: fix a wrong type conversion in nilfs_ioctl()
2010-04-12anonvma: when setting up page->mapping, we need to pick the _oldest_ anonvmaLinus Torvalds1-2/+13
Otherwise we might be mapping in a page in a new mapping, but that page (through the swapcache) would later be mapped into an old mapping too. The page->mapping must be the case that works for everybody, not just the mapping that happened to page it in first. Here's the scenario: - page gets allocated/mapped by process A. Let's call the anon_vma we associate the page with 'A' to keep it easy to track. - Process A forks, creating process B. The anon_vma in B is 'B', and has a chain that looks like 'B' -> 'A'. Everything is fine. - Swapping happens. The page (with mapping pointing to 'A') gets swapped out (perhaps not to disk - it's enough to assume that it's just not mapped any more, and lives entirely in the swap-cache) - Process B pages it in, which goes like this: do_swap_page -> page = lookup_swap_cache(entry); ... set_pte_at(mm, address, page_table, pte); page_add_anon_rmap(page, vma, address); And think about what happens here! In particular, what happens is that this will now be the "first" mapping of that page, so page_add_anon_rmap() used to do if (first) __page_set_anon_rmap(page, vma, address); and notice what anon_vma it will use? It will use the anon_vma for process B! What happens then? Trivial: process 'A' also pages it in (nothing happens, it's not the first mapping), and then process 'B' execve's or exits or unmaps, making anon_vma B go away. End result: process A has a page that points to anon_vma B, but anon_vma B does not exist any more. This can go on forever. Forget about RCU grace periods, forget about locking, forget anything like that. The bug is simply that page->mapping points to an anon_vma that was correct at one point, but was _not_ the one that was shared by all users of that possible mapping. Changing it to always use the deepest anon_vma in the anonvma chain gets us to the safest model. This can be improved in certain cases: if we know the page is private to just this particular mapping (for example, it's a new page, or it is the only swapcache entry), we could pick the top (most specific) anon_vma. But that's a future optimization. Make it _work_ reliably first. Reviewed-by: Rik van Riel <[email protected]> Acked-by: Johannes Weiner <[email protected]> Tested-by: Borislav Petkov <[email protected]> [ "What do you know, I think you fixed it!" ] Signed-off-by: Linus Torvalds <[email protected]>
2010-04-12anon_vma: clone the anon_vma chain in the right orderLinus Torvalds1-1/+1
We want to walk the chain in reverse order when cloning it, so that the order of the result chain will be the same as the order in the source chain. When we add entries to the chain, they go at the head of the chain, so we want to add the source head last. Reviewed-by: Rik van Riel <[email protected]> Acked-by: Johannes Weiner <[email protected]> Tested-by: Borislav Petkov <[email protected]> [ "No, it still oopses" ] Signed-off-by: Linus Torvalds <[email protected]>
2010-04-12vma_adjust: fix the copying of anon_vma chainsLinus Torvalds1-16/+8
When we move the boundaries between two vma's due to things like mprotect, we need to make sure that the anon_vma of the pages that got moved from one vma to another gets properly copied around. And that was not always the case, in this rather hard-to-follow code sequence. Clarify the code, and fix it so that it copies the anon_vma from the right source. Reviewed-by: Rik van Riel <[email protected]> Acked-by: Johannes Weiner <[email protected]> Tested-by: Borislav Petkov <[email protected]> [ "Yeah, not so much this one either" ] Signed-off-by: Linus Torvalds <[email protected]>