Age | Commit message (Collapse) | Author | Files | Lines |
|
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6 into for-davem
Conflicts:
net/bluetooth/Makefile
|
|
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
|
|
Fix test in lbs_spi_thread(). down_interruptible() can return -EINTR, but
not EINTR.
Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
Cc: Dan Williams <dcbw@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
To inject a packet in monitor mode, a dummy station has
to be associated with the monitor interface in the target.
Failing to do this would result in a firmware crash on the device.
Signed-off-by: Sujith Manoharan <Sujith.Manoharan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
ath5k_eeprom_mode_from_channel() returns -1 on error but we're storing
the result in "ee_mode" which is an unsigned char. This breaks the
error handling. This patch makes "ee_mode" an int.
Signed-off-by: Dan Carpenter <error27@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
Remove some obvious looking dead code and rename few functions
Signed-off-by: Mohammed Shafi Shajakhan <mshajakhan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
Restart the beacon timers only if the beacon
was already configured. Otherwise beacons timers
are restarted unnecessarily in unassociated state too.
Cc: stable@kernel.org
Signed-off-by: Rajkumar Manoharan <rmanoharan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
This reverts commit 0ce3bcfc84900a64347b0fe1140229bd81314008.
Event though with the above commit we obtain the configured DTIM period
from the AP rather than always hardcoding it to '1', this seems to cause
problems under the following scenarios:
* Preventing association with broken AP's
* Adds latency in roaming
So its better to always use the safe value of '1' for dtim period
Cc: Jouni Malinen <Jouni.Malinen@Atheros.com>
Signed-off-by: Mohammed Shafi Shajakhan <mshajakhan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
An Rx DMA descriptor can have multiple error bits set, and some error
bits (e.g. MIC failure) are filtered by the driver based on other criteria.
Remove the 'else' in various error bit checks so that all error information
is properly passed to the driver.
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
And add the copyright/license header.
Signed-off-by: Sujith Manoharan <Sujith.Manoharan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
When returning to the operating channel, a full HW
reset has to be done instead of a fast channel change.
Since sw_scan_complete() is called after the config() call for the
home channel, we end up doing a FCC. Fix this issue by checking
the OFFCHANNEL flag to determine FCC.
Signed-off-by: Sujith Manoharan <Sujith.Manoharan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
The device has to be reset when a FATAL event is received.
Not doing so would leave the card in a non-working state.
Signed-off-by: Sujith Manoharan <Sujith.Manoharan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
There is no need to lock the various work cancellation
calls. This will be helpful when handling FATAL events.
Signed-off-by: Sujith Manoharan <Sujith.Manoharan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
When doing a channel change, the pending URBs have to be killed
properly on calling htc_stop().
This fixes the probe response timeout seen when sending UDP traffic at
a high rate and running background scan at the same time.
Cc: stable <stable@kernel.org>
Signed-off-by: Sujith Manoharan <Sujith.Manoharan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
Some minor clean ups in assigning values to beacon config parameters
Signed-off-by: Mohammed Shafi Shajakhan <mshajakhan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
The comment doesn't match the code anymore. Fix that.
Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
Since the last user of intf->lock is gone we can safely remove it.
Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
Instead of protecting delayed_flags with a spinlock use atomic bitops to
make the code more readable.
Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
Acked-by: Gertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
The tx desciptor already gets initialized to 0. Hence, there's no need
to explicitly assign 0 to mpdu_density here.
Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
Backtrace:
rt2800usb_write_tx_data
rt2x00queue_write_tx_frame
rt2x00mac_tx
invoke_tx_handlers
__ieee80211_tx
ieee80211_tx
virt_to_head_page
ieee80211_xmit
ieee80211_tx_skb
ieee80211_scan_work
schedule
ieee80211_scan_work
process_one_work
...
It tried to expand the skb past it's end using skb_put. So I replaced it
with a call to skb_padto, which takes the issue into account.
Signed-off-by: Ismael Luceno <ismael.luceno@gmail.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
Fix some pointer errors in the various calls to memcpy, memset and memmove.
Although none of these errors are fatal (the expression used now results in
the same pointer value) it is better to use the proper expression.
All errors are having to deal with arrays.
Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
The mac field of the rt2x00_intf structure is written to once and used
twice. In both these uses the mac address is available via other means.
Remove this field as it does not appear to be necessary.
Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
The bssid field in struct rt2x00_intf is only written to once, and is
never read from.
Remove this field, as it appears to not be needed.
Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
When DRIVER_REQUIRE_TXSTATUS_FIFO is set, intialize the
txstatus_fifo, but initialize rt2x00dev->txstatus_tasklet
only when both DRIVER_REQUIRE_TXSTATUS_FIFO and
rt2x00dev->ops->lib->txstatus_tasklet are set.
This allows the txstatus_fifo to be used by rt2800usb which
does not use txstatus_tasklet.
Signed-off-by: Johannes Stezenbach <js@sig21.net>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
Signed-off-by: Johannes Stezenbach <js@sig21.net>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
This patch revamps some common code-paths which are
shared between (re-)initialization and suspend/resume
subroutines. It also adds some helpful comments
about quirks and associated difficulties.
It's quite big, but it should fix #25382:
<https://bugzilla.kernel.org/show_bug.cgi?id=25382>
And hopefully the code is robust enough to deal with
all possible suspend/resume scenarios without requiring
the user to do any sort of manual and possibly
dangerous work.
Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
By removing two "safety" msleeps (and an echo nop), the
channel change delay is effectively halved. Previously,
the delay could be as long as 260 ms and the device
could not go off-channel without risking to miss the
next DTIM beacon [interval ~307 ms].
Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
This patch adds a forgotten bail-out path.
Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
ath5k_reset is called from process context and takes the cc_lock
with plain spin_lock(), but cc_lock can also be taken from tasklets
in softirq context. Thus we need to at least use spin_lock_bh.
This fixes the following lockdep warning:
[ 19.967874] sky2 0000:01:00.0: eth0: enabling interface
[ 19.982761] ieee80211 phy0: device now idle
[ 20.904809] NET: Registered protocol family 17
[ 21.243857] ieee80211 phy0: device no longer idle - scanning
[ 21.404343]
[ 21.404346] =================================
[ 21.404450] [ INFO: inconsistent lock state ]
[ 21.404518] 2.6.37-rc7-wl+ #242
[ 21.404582] ---------------------------------
[ 21.404650] inconsistent {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} usage.
[ 21.404721] kworker/u:4/982 [HC0[0]:SC1[3]:HE1:SE0] takes:
[ 21.404792] (&(&common->cc_lock)->rlock){+.?...}, at: [<f8115780>] ath5k_ani_calibration+0x29/0x5d9 [ath5k]
[ 21.405011] {SOFTIRQ-ON-W} state was registered at:
[ 21.405011] [<c105cadd>] __lock_acquire+0x62f/0x13c1
[ 21.405011] [<c105d944>] lock_acquire+0xd5/0xf1
[ 21.405011] [<c12c978d>] _raw_spin_lock+0x45/0x72
[ 21.405011] [<f8111533>] ath5k_reset+0x2c0/0x349 [ath5k]
[ 21.405011] [<f8111a7a>] ath5k_start+0xb8/0x139 [ath5k]
[ 21.405011] [<f849c714>] ieee80211_do_open+0x13f/0x819 [mac80211]
[ 21.405011] [<f849ce51>] ieee80211_open+0x63/0x66 [mac80211]
[ 21.405011] [<c1258b2e>] __dev_open+0x8d/0xb6
[ 21.405011] [<c1255c64>] __dev_change_flags+0x9d/0x114
[ 21.405011] [<c1258a75>] dev_change_flags+0x18/0x44
[ 21.405011] [<c1262990>] do_setlink+0x23f/0x521
[ 21.405011] [<c1262d58>] rtnl_setlink+0xe6/0xea
[ 21.405011] [<c126347c>] rtnetlink_rcv_msg+0x18a/0x1a0
[ 21.405011] [<c126d5f0>] netlink_rcv_skb+0x35/0x7b
[ 21.405011] [<c12632eb>] rtnetlink_rcv+0x20/0x27
[ 21.405011] [<c126d370>] netlink_unicast+0x1bb/0x21e
[ 21.405011] [<c126db21>] netlink_sendmsg+0x23b/0x288
[ 21.405011] [<c124823c>] sock_sendmsg+0xac/0xc4
[ 21.405011] [<c1248680>] sys_sendmsg+0x152/0x1a2
[ 21.405011] [<c1249b0d>] sys_socketcall+0x214/0x275
[ 21.405011] [<c10029d0>] sysenter_do_call+0x12/0x36
[ 21.405011] irq event stamp: 138032
[ 21.405011] hardirqs last enabled at (138032): [<c12ca252>] _raw_spin_unlock_irqrestore+0x3b/0x5e
[ 21.405011] hardirqs last disabled at (138031): [<c12c98cc>] _raw_spin_lock_irqsave+0x18/0x7e
[ 21.405011] softirqs last enabled at (138024): [<f84a570e>] ieee80211_tx_skb+0x47/0x49 [mac80211]
[ 21.405011] softirqs last disabled at (138027): [<c100452b>] do_softirq+0x63/0xb4
[ 21.405011]
[ 21.405011] other info that might help us debug this:
[ 21.405011] 3 locks held by kworker/u:4/982:
[ 21.405011] #0: (name){+.+.+.}, at: [<c1046158>] process_one_work+0x1b8/0x41b
[ 21.405011] #1: ((&(&local->scan_work)->work)){+.+.+.}, at: [<c1046158>] process_one_work+0x1b8/0x41b
[ 21.405011] #2: (&local->mtx){+.+.+.}, at: [<f84920fb>] ieee80211_scan_work+0x32/0x4a4 [mac80211]
[ 21.405011]
[ 21.405011] stack backtrace:
[ 21.405011] Pid: 982, comm: kworker/u:4 Not tainted 2.6.37-rc7-wl+ #242
[ 21.405011] Call Trace:
[ 21.405011] [<c12c6e68>] ? printk+0x1d/0x25
[ 21.405011] [<c105a742>] print_usage_bug+0x181/0x18b
[ 21.405011] [<c105b196>] ? check_usage_forwards+0x0/0xb6
[ 21.405011] [<c105a9ec>] mark_lock+0x2a0/0x4aa
[ 21.405011] [<c1059f6d>] ? trace_hardirqs_off+0xb/0xd
[ 21.405011] [<c105ca68>] __lock_acquire+0x5ba/0x13c1
[ 21.405011] [<c1059eed>] ? trace_hardirqs_off_caller+0x18/0x8d
[ 21.405011] [<c1059f6d>] ? trace_hardirqs_off+0xb/0xd
[ 21.405011] [<c1050411>] ? local_clock+0x2c/0x4f
[ 21.405011] [<c1059e00>] ? save_trace+0x2/0xa0
[ 21.405011] [<c105ac39>] ? mark_held_locks+0x43/0x5b
[ 21.405011] [<c12ca252>] ? _raw_spin_unlock_irqrestore+0x3b/0x5e
[ 21.405011] [<f8115780>] ? ath5k_ani_calibration+0x29/0x5d9 [ath5k]
[ 21.405011] [<c105d944>] lock_acquire+0xd5/0xf1
[ 21.405011] [<f8115780>] ? ath5k_ani_calibration+0x29/0x5d9 [ath5k]
[ 21.405011] [<c12c9b1a>] _raw_spin_lock_bh+0x4a/0x77
[ 21.405011] [<f8115780>] ? ath5k_ani_calibration+0x29/0x5d9 [ath5k]
[ 21.405011] [<f8115780>] ath5k_ani_calibration+0x29/0x5d9 [ath5k]
[ 21.405011] [<c105ac39>] ? mark_held_locks+0x43/0x5b
[ 21.405011] [<f8113496>] ath5k_tasklet_ani+0x1d/0x27 [ath5k]
[ 21.405011] [<c1037304>] tasklet_action+0x96/0x137
[ 21.405011] [<c10379b5>] __do_softirq+0xde/0x1c3
[ 21.405011] [<c10b0cef>] ? arch_get_unmapped_area_topdown+0x3b/0x127
[ 21.405011] [<c10378d7>] ? __do_softirq+0x0/0x1c3
[ 21.405011] <IRQ> [<c1036dee>] ? irq_exit+0x3d/0x49
[ 21.405011] [<c1003b4f>] ? do_IRQ+0x98/0xac
[ 21.405011] [<c1002eee>] ? common_interrupt+0x2e/0x34
[ 21.405011] [<c103007b>] ? sys_unshare+0x57/0x226
[ 21.405011] [<c1047fee>] ? queue_delayed_work+0x1/0x27
[ 21.405011] [<f84a83a0>] ? ieee80211_queue_delayed_work+0x2e/0x33 [mac80211]
[ 21.405011] [<f8492528>] ? ieee80211_scan_work+0x45f/0x4a4 [mac80211]
[ 21.405011] [<c104620e>] ? process_one_work+0x26e/0x41b
[ 21.405011] [<c1046158>] ? process_one_work+0x1b8/0x41b
[ 21.405011] [<f84920c9>] ? ieee80211_scan_work+0x0/0x4a4 [mac80211]
[ 21.405011] [<c10466b6>] ? worker_thread+0x18a/0x2a5
[ 21.405011] [<c12ca25e>] ? _raw_spin_unlock_irqrestore+0x47/0x5e
[ 21.405011] [<c104652c>] ? worker_thread+0x0/0x2a5
[ 21.405011] [<c104abe7>] ? kthread+0x67/0x6c
[ 21.405011] [<c104ab80>] ? kthread+0x0/0x6c
[ 21.405011] [<c1002efa>] ? kernel_thread_helper+0x6/0x10
Signed-off-by: Bob Copeland <me@bobcopeland.com>
Acked-by: Bruno Randolf <br1@einfach.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
For the AR9002, the spur frequency read from the EEPROM is mangled
before being compared against AR_NO_SPUR. This results in the driver
trying to set up the spur mitigation for bogus spurs, rather than
cleanly breaking out.
Signed-off-by: Brian Prodoehl <bprodoehl@nomadio.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
Simplify write file operation for /proc files by using
simple_write_to_buffer().
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Cc: "John W. Linville" <linville@tuxdriver.com>
Cc: linux-wireless@vger.kernel.org
Cc: netdev@vger.kernel.org
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
Disabling BH is not required while running from a tasklet context
and so replace spin_lock_bh with just spin_lock.
Signed-off-by: Senthil Balasubramanian <senthilkumar@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
Looks that we do not set correctly antennas when scanning
on 5Ghz band and when bluetooth is enabled, because
priv->cfg->scan_tx_antennas[band] is only defined for
IEEE80211_BAND_2GHZ.
To fix we check band before limiting antennas to first one.
This allow to remove hard coded cfg->scan_tx_antennas[band].
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Acked-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
Move mac80211 functions into new file mac80211-ops.c to have a better
separation and to make base.c smaller.
Signed-off-by: Bruno Randolf <br1@einfach.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
Since commit 6cd0b1cb872b3bf9fc5de4536404206ab74bafdd "iwlagn: fix
hw-rfkill while the interface is down", we enable interrupts when
device is not ready to receive them. However hardware, when it is in
some inconsistent state, can generate other than rfkill interrupts
and crash the system. I can reproduce crash with "kernel BUG at
drivers/net/wireless/iwlwifi/iwl-agn.c:1010!" message, when forcing
firmware restarts.
To fix only enable rfkill interrupt when down device and after probe.
I checked patch on laptop with 5100 device, rfkill change is still
passed to user space when device is down.
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Cc: stable@kernel.org
Acked-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts:
net/ipv4/fib_frontend.c
|
|
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (42 commits)
ipv4: dont create routes on down devices
epic100: hamachi: yellowfin: Fix skb allocation size
sundance: Fix oopses with corrupted skb_shared_info
Revert "ipv4: Allow configuring subnets as local addresses"
USB: mcs7830: return negative if auto negotiate fails
irda: prevent integer underflow in IRLMP_ENUMDEVICES
tcp: fix listening_get_next()
atl1c: Do not use legacy PCI power management
mac80211: fix mesh forwarding
MAINTAINERS: email address change
net: Fix range checks in tcf_valid_offset().
net_sched: sch_sfq: fix allot handling
hostap: remove netif_stop_queue from init
mac80211/rt2x00: add ieee80211_tx_status_ni()
typhoon: memory corruption in typhoon_get_drvinfo()
net: Add USB PID for new MOSCHIP USB ethernet controller MCS7832 variant
net_sched: always clone skbs
ipv6: Fragment locally generated tunnel-mode IPSec6 packets as needed.
netlink: fix gcc -Wconversion compilation warning
asix: add USB ID for Logitec LAN-GTJ U2A
...
|
|
The correct name should be used for the newer devices, remove
reference to Gen2
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
|
|
# iw wlan0 interface add moni0 type monitor flags control
# ip link set moni0 up
causes a continuous spew of FH_ERROR from the
device. Fix this by not setting the CTL2HOST
filter by itself -- CTL + promisc works fine.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
|
|
For "led_mode" module parameters, string "led_mode" is duplicated twice,
remove one.
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
|
|
ssh://master.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
|
|
An RX buffer is set to 9100 bytes to receive 8K AMSDU; however, an skb
of this size fails in the kernel.
Signed-off-by: Chaoming Li <chaoming_li@realsil.com.cn>
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
It looks like some hardware registers are left into undefined state
after suspend/resume. At minimum, this can cause odd issues related to
key cache and hardware trying to encrypt/decrypt frames unexpectedly.
This seems to happen even when there is no keys configured, i.e., hardware
can end up touching TX frames just based of invalid key cache context
even if the driver is not asking a specific entry to be used. In
addition, RX can likely be affected. This patch fixes this issue.
Signed-off-by: Jouni Malinen <Jouni.Malinen@Atheros.com>
Signed-off-by: Mohammed Shafi Shajakhan <mshajakhan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
If the radio enable switch is off when the driver is loaded, it is not
possible to get radio output until the driver is unloaded and reloaded
with the switch on.
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
Device poller already reads current RSSI, so add support for
set_cqm_rssi_config there.
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
|
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|