* Re: compat-wireless master-2009-09-28 breakage and suggested fixes
From: Luis R. Rodriguez @ 2009-09-29 2:55 UTC (permalink / raw)
To: Hin-Tak Leung; +Cc: Luis Rodriguez, linux-wireless
In-Reply-To: <3ace41890909281935k284402f3q90b54ae20a636eeb@mail.gmail.com>
On Mon, Sep 28, 2009 at 07:35:22PM -0700, Hin-Tak Leung wrote:
> commit d0cf9c0dadcdc89a755bcb301cfc9c796eb28ccf
> Author: Stephen Hemminger <shemminger@vyatta.com>
> Date: Mon Aug 31 19:50:57 2009 +0000
>
> wireless: convert drivers to netdev_tx_t
>
> and the 2nd change due to this:
>
> commit 384912ed194e43c03ad1cdaa09b0b1e488c34d46
> Author: Marcel Holtmann <marcel@holtmann.org>
> Date: Mon Aug 31 21:08:19 2009 +0000
>
> net: Add DEVTYPE support for Ethernet based devices
>
> Both of these changes are traced back to changes in
> <linux/netdevice.h> , which compat-wireless does not ship. What's your
> policy on these kind of changes to compat-wireless?
> (the 2nd SET_NETDEV_DEVTYPE change probably can be spanned by an
> ifndef SET_NETDEV_DEVTYPE, and roll into
> "compat/patches/01-netdev.patch"? Should the first kind of change also
> go into compat/patches/01-netdev.patch?)
I don't see this yet on wireless-testing but it is on 2.6.32.
I backported this as follows. I'll push this out shortly.
From: Luis R. Rodriguez <lrodriguez@atheros.com>
Subject: [PATCH] Fix compilation against for 2.6.32 changes
2.6.32 added SET_NETDEV_DEVTYPE() and netdev_tx
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
---
compat/compat-2.6.32.h | 12 ++++++++++++
1 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/compat/compat-2.6.32.h b/compat/compat-2.6.32.h
index f7081f2..418b521 100644
--- a/compat/compat-2.6.32.h
+++ b/compat/compat-2.6.32.h
@@ -31,6 +31,18 @@
#define dev_change_net_namespace(a, b, c) (-EOPNOTSUPP)
+#define SET_NETDEV_DEVTYPE(netdev, type)
+
+#ifdef __KERNEL__
+/* Driver transmit return codes */
+enum netdev_tx {
+ BACKPORT_NETDEV_TX_OK = NETDEV_TX_OK, /* driver took care of packet */
+ BACKPORT_NETDEV_TX_BUSY = NETDEV_TX_BUSY, /* driver tx path was busy*/
+ BACKPORT_NETDEV_TX_LOCKED = NETDEV_TX_LOCKED, /* driver tx lock was already taken */
+};
+typedef enum netdev_tx netdev_tx_t;
+#endif /* __KERNEL__ */
+
#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)) */
#endif /* LINUX_26_32_COMPAT_H */
--
1.6.3.3
^ permalink raw reply related
* compat-wireless master-2009-09-28 breakage and suggested fixes
From: Hin-Tak Leung @ 2009-09-29 2:35 UTC (permalink / raw)
To: Luis R. Rodriguez, linux-wireless
Hi Luis,
A couple of breakages against current wireless testing head:
compat-release - master-2009-09-23-1-gd1e5747
git-describe v2.6.32-rc1-39226-g63dbea4
master-tag master-2009-09-28
-----------
make[1]: Entering directory `/usr/src/kernels/2.6.30.8-67.fc11.x86_64'
CC [M] /home/Hin-Tak/tmp-git/compat-wireless-2.6/net/mac80211/main.o
In file included from
/home/Hin-Tak/tmp-git/compat-wireless-2.6/net/mac80211/main.c:29:
/home/Hin-Tak/tmp-git/compat-wireless-2.6/net/mac80211/ieee80211_i.h:1053:
error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before
‘ieee80211_monitor_start_xmit’
/home/Hin-Tak/tmp-git/compat-wireless-2.6/net/mac80211/ieee80211_i.h:1055:
error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before
‘ieee80211_subif_start_xmit’
make[3]: *** [/home/Hin-Tak/tmp-git/compat-wireless-2.6/net/mac80211/main.o]
Error 1
make[2]: *** [/home/Hin-Tak/tmp-git/compat-wireless-2.6/net/mac80211] Error 2
make[1]: *** [_module_/home/Hin-Tak/tmp-git/compat-wireless-2.6] Error 2
make[1]: Leaving directory `/usr/src/kernels/2.6.30.8-67.fc11.x86_64'
make: *** [modules] Error 2
----------
----------
CC [M] /home/Hin-Tak/tmp-git/compat-wireless-2.6/net/mac80211/iface.o
/home/Hin-Tak/tmp-git/compat-wireless-2.6/net/mac80211/iface.c: In
function ‘ieee80211_if_add’:
/home/Hin-Tak/tmp-git/compat-wireless-2.6/net/mac80211/iface.c:815:
error: implicit declaration of function ‘SET_NETDEV_DEVTYPE’
make[3]: *** [/home/Hin-Tak/tmp-git/compat-wireless-2.6/net/mac80211/iface.o]
Error 1
make[2]: *** [/home/Hin-Tak/tmp-git/compat-wireless-2.6/net/mac80211] Error 2
make[1]: *** [_module_/home/Hin-Tak/tmp-git/compat-wireless-2.6] Error 2
----------
The first error can be fixed by inserting the netdev_tx_t enum:
----------------
$ diff -u ../wireless-testing/net/mac80211/ieee80211_i.h
net/mac80211/ieee80211_i.h
--- ../wireless-testing/net/mac80211/ieee80211_i.h 2009-09-29
01:21:11.000000000 +0100
+++ net/mac80211/ieee80211_i.h 2009-09-29 02:43:26.000000000 +0100
@@ -28,6 +28,24 @@
#include "key.h"
#include "sta_info.h"
+#ifdef NETDEV_TX_OK
+#undef NETDEV_TX_OK
+#endif
+#ifdef NETDEV_TX_BUSY
+#undef NETDEV_TX_BUSY
+#endif
+#ifdef NETDEV_TX_LOCKED
+#undef NETDEV_TX_LOCKED
+#endif
+
+/* Driver transmit return codes */
+enum netdev_tx {
+ NETDEV_TX_OK = 0, /* driver took care of packet */
+ NETDEV_TX_BUSY, /* driver tx path was busy*/
+ NETDEV_TX_LOCKED = -1, /* driver tx lock was already taken */
+};
+typedef enum netdev_tx netdev_tx_t;
+
struct ieee80211_local;
/* Maximum number of broadcast/multicast frames to buffer when some of the
------------------
The 2nd by adding SET_NETDEV_DEVTYPE():
----------
--- ../wireless-testing/net/mac80211/iface.c 2009-09-29 01:21:11.000000000 +0100
+++ net/mac80211/iface.c 2009-09-29 02:50:54.000000000 +0100
@@ -22,6 +22,8 @@
#include "led.h"
#include "driver-ops.h"
+#define SET_NETDEV_DEVTYPE(net, devtype) ((net)->dev.type = (devtype))
+
/**
* DOC: Interface list locking
*
-------------
The first change is due to this:
commit d0cf9c0dadcdc89a755bcb301cfc9c796eb28ccf
Author: Stephen Hemminger <shemminger@vyatta.com>
Date: Mon Aug 31 19:50:57 2009 +0000
wireless: convert drivers to netdev_tx_t
and the 2nd change due to this:
commit 384912ed194e43c03ad1cdaa09b0b1e488c34d46
Author: Marcel Holtmann <marcel@holtmann.org>
Date: Mon Aug 31 21:08:19 2009 +0000
net: Add DEVTYPE support for Ethernet based devices
Both of these changes are traced back to changes in
<linux/netdevice.h> , which compat-wireless does not ship. What's your
policy on these kind of changes to compat-wireless?
(the 2nd SET_NETDEV_DEVTYPE change probably can be spanned by an
ifndef SET_NETDEV_DEVTYPE, and roll into
"compat/patches/01-netdev.patch"? Should the first kind of change also
go into compat/patches/01-netdev.patch?)
^ permalink raw reply
* [RFC v2] compat-2.6: mangle drivers and symbols for driver-select
From: Luis R. Rodriguez @ 2009-09-29 1:35 UTC (permalink / raw)
To: linux-wireless
Cc: Luis R. Rodriguez, John W. Linville, Tim Gardner, Greg KH,
Andrey Yurovsky, Hauke Mehrtens, Johannes Berg
When building only one driver with driver-select you will have bust
other present wireless drivers since they still rely on the old
mac80211 and cfg80211 modules. This is a non-issue unless you are
a distribution maintainer and do not want to build all modules
provided by compat-wireless. If you are an OEM you may also want
to just provide a one-driver solution for your own device without
affecting other drivers present.
When driver-select is used add a CONFIG_COMPAT_WIRELESS_MANGLE
so that mangled symbols are enabled and all cfg80211 and mac80211
driver symbols get mangled with a backport_ prefix.
Each driver family which has their own set of modules will also
need to define their own set of mangle definitions. This can be
done on compat/compat.h
The last step required to make this work is to rename the built
modules your driver will depend on. So mac80211 will become
backport_mac80211 and cfg80211 backport_cfg80211. As with
symbols driver families may also need to deal with this.
For example ath9k will require ath to be renamed to backport_ath.
Usbnet is a different story -- for that I think the best thing
is to just backport these modules. You will run into issues
with usbnet only if compiling all modules and it will only
become an issue with users of non backported usbnet modules.
If we backport all usbnet modules this is a non-issue.
Cc: John W. Linville <linville@tuxdriver.com>
Cc: Tim Gardner <tim.gardner@canonical.com>
Cc: Greg KH <greg@kroah.com>
Cc: Andrey Yurovsky <andrey@cozybit.com>
Cc: Hauke Mehrtens <hauke@hauke-m.de>
Cc: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
---
This one compiles for me and build a backport_mac80211,
backport_cfg80211, and even backport_ath, however I end up wit this
warning:
WARNING: at /build/buildd/linux-2.6.31/fs/sysfs/dir.c:487 sysfs_add_one+0xc5/0x130()
Hardware name: 7660A14
sysfs: cannot create duplicate filename '/class/ieee80211'
Modules linked in: backport_cfg80211(+) <etc>
Pid: 5604, comm: modprobe Tainted: G WC 2.6.31-10-generic #34-Ubuntu
Call Trace:
[<ffffffff81059778>] warn_slowpath_common+0x78/0xb0
[<ffffffff8105980c>] warn_slowpath_fmt+0x3c/0x40
[<ffffffff81181845>] sysfs_add_one+0xc5/0x130
[<ffffffff81181913>] create_dir+0x63/0xb0
[<ffffffff81181994>] sysfs_create_dir+0x34/0x50
[<ffffffff8126f46a>] ? kobject_get+0x1a/0x30
[<ffffffff8126f5c7>] kobject_add_internal+0xb7/0x200
[<ffffffff8126f73f>] kset_register+0x2f/0x60
[<ffffffff8131c9a8>] __class_register+0xf8/0x220
[<ffffffffa0024000>] ? cfg80211_init+0x0/0x92 [backport_cfg80211]
[<ffffffffa0265837>] wiphy_sysfs_init+0x17/0x20 [backport_cfg80211]
[<ffffffffa0024020>] cfg80211_init+0x20/0x92 [backport_cfg80211]
[<ffffffff8100a047>] do_one_initcall+0x37/0x1a0
[<ffffffff8108cbc7>] sys_init_module+0xd7/0x230
[<ffffffff81011fc2>] system_call_fastpath+0x16/0x1b
---[ end trace d8ca39e614c01267 ]---
kobject_add_internal failed for ieee80211 with -EEXIST, don't try to register things with the same name in the same directory.
Do we want to live with a new /class/backport_ieee80211/ ?
I'm not sure what the downside to this, someone more familiar with
this please let me know.
compat/compat.h | 161 ++++++++++++++++++++++++++++++++++++++++
config.mk | 2 +
scripts/admin-update.sh | 2 +-
scripts/driver-select | 36 +++++++++-
scripts/gen-compat-autoconf.sh | 10 ++-
5 files changed, 206 insertions(+), 5 deletions(-)
diff --git a/compat/compat.h b/compat/compat.h
index 05612b2..24c3f31 100644
--- a/compat/compat.h
+++ b/compat/compat.h
@@ -22,4 +22,165 @@
#include <net/compat-2.6.31.h>
#include <net/compat-2.6.32.h>
+#ifdef CONFIG_COMPAT_WIRELESS_MANGLE
+
+/*
+ * When we use driver-select you are building one driver so all your
+ * other drivers present in your existing kernel can go bust since they
+ * rely on older versions of mac80211 and cfg80211. Because of this we
+ * mangle your symbols so that your new single compat-wireless driver
+ * only relies on the new mac80211 and cfg80211 backported modules.
+ */
+
+/* cfg80211 */
+#define wiphy_new backport_wiphy_new
+#define wiphy_register backport_wiphy_register
+#define wiphy_rfkill_start_polling backport_wiphy_rfkill_start_polling
+#define wiphy_rfkill_stop_polling backport_wiphy_rfkill_stop_polling
+#define wiphy_unregister backport_wiphy_unregister
+#define wiphy_free backport_wiphy_free
+#define wiphy_rfkill_set_hw_state backport_wiphy_rfkill_set_hw_state
+#define cfg80211_ibss_joined backport_cfg80211_ibss_joined
+#define print_ssid backport_print_ssid
+#define lib80211_crypt_info_init backport_lib80211_crypt_info_init
+#define lib80211_crypt_info_free backport_lib80211_crypt_info_free
+#define lib80211_crypt_deinit_entries backport_lib80211_crypt_deinit_entries
+#define lib80211_crypt_quiescing backport_lib80211_crypt_quiescing
+#define lib80211_crypt_deinit_handler backport_lib80211_crypt_deinit_handler
+#define lib80211_crypt_delayed_deinit backport_lib80211_crypt_delayed_deinit
+#define lib80211_register_crypto_ops backport_lib80211_register_crypto_ops
+#define lib80211_unregister_crypto_ops backport_lib80211_unregister_crypto_ops
+#define lib80211_get_crypto_ops backport_lib80211_get_crypto_ops
+#define cfg80211_send_rx_auth backport_cfg80211_send_rx_auth
+#define cfg80211_send_rx_assoc backport_cfg80211_send_rx_assoc
+#define cfg80211_send_deauth backport_cfg80211_send_deauth
+#define cfg80211_send_disassoc backport_cfg80211_send_disassoc
+#define cfg80211_send_auth_timeout backport_cfg80211_send_auth_timeout
+#define cfg80211_send_assoc_timeout backport_cfg80211_send_assoc_timeout
+#define cfg80211_michael_mic_failure backport_cfg80211_michael_mic_failure
+#define cfg80211_testmode_alloc_reply_skb backport_cfg80211_testmode_alloc_reply_skb
+#define cfg80211_testmode_reply backport_cfg80211_testmode_reply
+#define cfg80211_testmode_alloc_event_skb backport_cfg80211_testmode_alloc_event_skb
+#define cfg80211_testmode_event backport_cfg80211_testmode_event
+#define ieee80211_radiotap_iterator_init backport_ieee80211_radiotap_iterator_init
+#define ieee80211_radiotap_iterator_next backport_ieee80211_radiotap_iterator_next
+#define freq_reg_info backport_freq_reg_info
+#define wiphy_apply_custom_regulatory backport_wiphy_apply_custom_regulatory
+#define regulatory_hint backport_regulatory_hint
+#define cfg80211_scan_done backport_cfg80211_scan_done
+#define cfg80211_get_bss backport_cfg80211_get_bss
+#define cfg80211_get_mesh backport_cfg80211_get_mesh
+#define cfg80211_inform_bss backport_cfg80211_inform_bss
+#define cfg80211_inform_bss_frame backport_cfg80211_inform_bss_frame
+#define cfg80211_put_bss backport_cfg80211_put_bss
+#define cfg80211_unlink_bss backport_cfg80211_unlink_bss
+#define cfg80211_wext_siwscan backport_cfg80211_wext_siwscan
+#define cfg80211_wext_giwscan backport_cfg80211_wext_giwscan
+#define cfg80211_connect_result backport_cfg80211_connect_result
+#define cfg80211_roamed backport_cfg80211_roamed
+#define cfg80211_disconnected backport_cfg80211_disconnected
+#define ieee80211_get_response_rate backport_ieee80211_get_response_rate
+#define ieee80211_channel_to_frequency backport_ieee80211_channel_to_frequency
+#define ieee80211_frequency_to_channel backport_ieee80211_frequency_to_channel
+#define __ieee80211_get_channel backport___ieee80211_get_channel
+#define rfc1042_header backport_rfc1042_header
+#define bridge_tunnel_header backport_bridge_tunnel_header
+#define ieee80211_hdrlen backport_ieee80211_hdrlen
+#define ieee80211_get_hdrlen_from_skb backport_ieee80211_get_hdrlen_from_skb
+#define ieee80211_data_to_8023 backport_ieee80211_data_to_8023
+#define ieee80211_data_from_8023 backport_ieee80211_data_from_8023
+#define cfg80211_classify8021d backport_cfg80211_classify8021d
+#define ieee80211_bss_get_ie backport_ieee80211_bss_get_ie
+
+/*
+ * Your kernel's wext stuff is left intact as its built-in so we do not provide
+ * defines for that here.
+ */
+
+#define cfg80211_wext_giwname backport_cfg80211_wext_giwname
+#define cfg80211_wext_siwmode backport_cfg80211_wext_siwmode
+#define cfg80211_wext_giwmode backport_cfg80211_wext_giwmode
+#define cfg80211_wext_giwrange backport_cfg80211_wext_giwrange
+#define cfg80211_wext_siwrts backport_cfg80211_wext_siwrts
+#define cfg80211_wext_giwrts backport_cfg80211_wext_giwrts
+#define cfg80211_wext_siwfrag backport_cfg80211_wext_siwfrag
+#define cfg80211_wext_giwfrag backport_cfg80211_wext_giwfrag
+#define cfg80211_wext_siwretry backport_cfg80211_wext_siwretry
+#define cfg80211_wext_giwretry backport_cfg80211_wext_giwretry
+#define cfg80211_wext_siwencode backport_cfg80211_wext_siwencode
+#define cfg80211_wext_siwencodeext backport_cfg80211_wext_siwencodeext
+#define cfg80211_wext_giwencode backport_cfg80211_wext_giwencode
+#define cfg80211_wext_siwfreq backport_cfg80211_wext_siwfreq
+#define cfg80211_wext_giwfreq backport_cfg80211_wext_giwfreq
+#define cfg80211_wext_siwtxpower backport_cfg80211_wext_siwtxpower
+#define cfg80211_wext_giwtxpower backport_cfg80211_wext_giwtxpower
+#define cfg80211_wext_siwauth backport_cfg80211_wext_siwauth
+#define cfg80211_wext_giwauth backport_cfg80211_wext_giwauth
+#define cfg80211_wext_siwpower backport_cfg80211_wext_siwpower
+#define cfg80211_wext_giwpower backport_cfg80211_wext_giwpower
+#define cfg80211_wext_siwrate backport_cfg80211_wext_siwrate
+#define cfg80211_wext_giwrate backport_cfg80211_wext_giwrate
+#define cfg80211_wireless_stats backport_cfg80211_wireless_stats
+#define cfg80211_wext_siwap backport_cfg80211_wext_siwap
+#define cfg80211_wext_giwap backport_cfg80211_wext_giwap
+#define cfg80211_wext_siwessid backport_cfg80211_wext_siwessid
+#define cfg80211_wext_giwessid backport_cfg80211_wext_giwessid
+#define cfg80211_wext_siwgenie backport_cfg80211_wext_siwgenie
+#define cfg80211_wext_siwmlme backport_cfg80211_wext_siwmlme
+
+/* mac80211 */
+#define ieee80211_start_tx_ba_session backport_ieee80211_start_tx_ba_session
+#define ieee80211_start_tx_ba_cb backport_ieee80211_start_tx_ba_cb
+#define ieee80211_start_tx_ba_cb_irqsafe backport_ieee80211_start_tx_ba_cb_irqsafe
+#define ieee80211_stop_tx_ba_session backport_ieee80211_stop_tx_ba_session
+#define ieee80211_stop_tx_ba_cb backport_ieee80211_stop_tx_ba_cb
+#define ieee80211_stop_tx_ba_cb_irqsafe backport_ieee80211_stop_tx_ba_cb_irqsafe
+#define __ieee80211_get_radio_led_name backport___ieee80211_get_radio_led_name
+#define __ieee80211_get_assoc_led_name backport___ieee80211_get_assoc_led_name
+#define __ieee80211_get_tx_led_name backport___ieee80211_get_tx_led_name
+#define __ieee80211_get_rx_led_name backport___ieee80211_get_rx_led_name
+#define ieee80211_tx_status_irqsafe backport_ieee80211_tx_status_irqsafe
+#define ieee80211_tx_status backport_ieee80211_tx_status
+#define ieee80211_restart_hw backport_ieee80211_restart_hw
+#define ieee80211_alloc_hw backport_ieee80211_alloc_hw
+#define ieee80211_register_hw backport_ieee80211_register_hw
+#define ieee80211_unregister_hw backport_ieee80211_unregister_hw
+#define ieee80211_free_hw backport_ieee80211_free_hw
+#define ieee80211_beacon_loss backport_ieee80211_beacon_loss
+#define ieee80211_rate_control_register backport_ieee80211_rate_control_register
+#define ieee80211_rate_control_unregister backport_ieee80211_rate_control_unregister
+#define rate_control_send_low backport_rate_control_send_low
+#define ieee80211_rx backport_ieee80211_rx
+#define ieee80211_rx_irqsafe backport_ieee80211_rx_irqsafe
+#define ieee80211_scan_completed backport_ieee80211_scan_completed
+#define ieee80211_find_sta backport_ieee80211_find_sta
+#define ieee80211_get_tkip_key backport_ieee80211_get_tkip_key
+#define ieee80211_beacon_get backport_ieee80211_beacon_get
+#define ieee80211_rts_get backport_ieee80211_rts_get
+#define ieee80211_ctstoself_get backport_ieee80211_ctstoself_get
+#define ieee80211_get_buffered_bc backport_ieee80211_get_buffered_bc
+#define wiphy_to_ieee80211_hw backport_wiphy_to_ieee80211_hw
+#define ieee80211_generic_frame_duration backport_ieee80211_generic_frame_duration
+#define ieee80211_rts_duration backport_ieee80211_rts_duration
+#define ieee80211_ctstoself_duration backport_ieee80211_ctstoself_duration
+#define ieee80211_wake_queue backport_ieee80211_wake_queue
+#define ieee80211_stop_queue backport_ieee80211_stop_queue
+#define ieee80211_stop_queues backport_ieee80211_stop_queues
+#define ieee80211_queue_stopped backport_ieee80211_queue_stopped
+#define ieee80211_wake_queues backport_ieee80211_wake_queues
+#define ieee80211_iterate_active_interfaces backport_ieee80211_iterate_active_interfaces
+#define ieee80211_iterate_active_interfaces_atomic backport_ieee80211_iterate_active_interfaces_atomic
+#define ieee80211_queue_work backport_ieee80211_queue_work
+#define ieee80211_queue_delayed_work backport_ieee80211_queue_delayed_work
+
+/* Atheros */
+#define ath_regd_init backport_ath_regd_init
+#define ath_is_world_regd backport_ath_is_world_regd
+#define ath_reg_notifier_apply backport_ath_reg_notifier_apply
+#define ath_regd_get_band_ctl backport_ath_regd_get_band_ctl
+#define ath_hw_setbssidmask backport_ath_hw_setbssidmask
+
+#endif /* CONFIG_COMPAT_WIRELESS_MANGLE */
+
+
#endif /* LINUX_26_COMPAT_H */
diff --git a/config.mk b/config.mk
index b482b68..5bbf1f1 100644
--- a/config.mk
+++ b/config.mk
@@ -4,6 +4,8 @@ export
## Make sure to have each variable declaration start
## in the first column, no whitespace allowed.
+-include $(PWD)/driver-select.mk
+
ifeq ($(wildcard $(KLIB_BUILD)/.config),)
# These will be ignored by compat autoconf
CONFIG_PCI=y
diff --git a/scripts/admin-update.sh b/scripts/admin-update.sh
index c65952d..0b8722b 100755
--- a/scripts/admin-update.sh
+++ b/scripts/admin-update.sh
@@ -210,7 +210,7 @@ if [ -d ./.git ]; then
echo -e "This is a ${RED}bleeding edge${NORMAL} compat-wireless release based on: ${PURPLE}$MASTER_TAG${NORMAL}"
;;
"linux-2.6-allstable.git") # HPA's all stable tree
- echo "This is a ${GREEN}stable${NORMAL} compat-wireless release based on: ${PURPLE}$(git describe --abbrev=0)${NORMAL}"
+ echo -e "This is a ${GREEN}stable${NORMAL} compat-wireless release based on: ${PURPLE}$(git describe --abbrev=0)${NORMAL}"
;;
"linux-2.6.git") # Linus' 2.6 tree
;;
diff --git a/scripts/driver-select b/scripts/driver-select
index dcb777c..76b3be6 100755
--- a/scripts/driver-select
+++ b/scripts/driver-select
@@ -11,6 +11,8 @@ EEPROM_MAKEFILE="drivers/misc/eeprom/Makefile"
DRIVERS_NET_USB_MAKEFILE="drivers/net/usb/Makefile"
SSB_MAKEFILE="drivers/ssb/Makefile"
+SELECT_CONF="driver-select.mk"
+
# used to backup files from foo to foo.${BACKUP_EXT}
# If you change this also modify restore_compat() and
# restore_file() below I couldn't find a way to use
@@ -51,6 +53,16 @@ function usage {
echo -e "\t${GREEN}restore${NORMAL}: you can use this option to restore compat-wireless to the original state"
}
+function generate_driver_select_conf {
+ echo "CONFIG_COMPAT_WIRELESS_MANGLE=y" > $SELECT_CONF
+}
+
+function mangle_mac80211_modules {
+ sed -e 's/cfg80211/backport_cfg80211/' net/wireless/Makefile > .mangled
+ mv .mangled net/wireless/Makefile
+ sed -e 's/mac80211/backport_mac80211/' net/mac80211/Makefile > .mangled
+ mv .mangled net/mac80211/Makefile
+}
function backup_file {
if [ -f $1.${BACKUP_EXT} ]; then
echo -e "Backup exists: ${CYAN}${1}.${BACKUP_EXT}${NORMAL}"
@@ -135,11 +147,17 @@ function disable_var_02 {
disable_usbnet
}
+function mangle_ath_modules {
+ sed -e 's|ath\([^59]\)|ath_backport\1|' drivers/net/wireless/ath/Makefile > .mangled
+ mv .mangled drivers/net/wireless/ath/Makefile
+}
+
function select_ath_driver
{
backup_file $ATH_MAKEFILE
perl -i -ne 'print if /'$1'/ || /CONFIG_ATH_COMMON/ || /ath-objs/ ' $ATH_MAKEFILE
disable_var_01
+ mangle_ath_modules
}
# iwlwifi stuff needs more work
@@ -163,6 +181,7 @@ function restore_compat {
for i in $FILES; do
restore_file $i
done
+ rm -f $SELECT_CONF
}
if [ $# -ne 1 ]; then
@@ -181,9 +200,12 @@ if [[ ! -f built-in.o ]]; then
fi
fi
-# Always backup the top level Makefile, unless restoring
+# Always backup the top level Makefile, unless restoring.
+# Also, always generate a driver-select.mk so that compat-wireless
+# mangles symbols for us.
if [[ "$1" != "restore" ]]; then
backup_file Makefile
+ generate_driver_select_conf
fi
# If a user selects a new driver make sure we clean up for them
@@ -205,43 +227,55 @@ case $1 in
select_drivers CONFIG_ATH_COMMON \
CONFIG_ZD1211RW
disable_var_01
+ mangle_ath_modules
+ mangle_mac80211_modules
;;
ath)
select_drivers CONFIG_ATH_COMMON
disable_var_01
+ mangle_ath_modules
+ mangle_mac80211_modules
;;
intel)
select_drivers CONFIG_IWLWIFI \
CONFIG_IPW
disable_var
+ mangle_mac80211_modules
;;
iwlwifi)
select_driver CONFIG_IWLWIFI
disable_var_01
+ mangle_mac80211_modules
;;
wl12xx)
select_drivers CONFIG_WL12XX
disable_var_01
+ mangle_mac80211_modules
;;
ath5k)
select_driver CONFIG_ATH_COMMON
select_ath_driver CONFIG_ATH5K
+ mangle_mac80211_modules
;;
ath9k)
select_driver CONFIG_ATH_COMMON
select_ath_driver CONFIG_ATH9K
+ mangle_mac80211_modules
;;
ar9170)
select_driver CONFIG_ATH_COMMON
select_ath_driver CONFIG_AR9170_USB
+ mangle_mac80211_modules
;;
rtl818x)
select_drivers CONFIG_RTL8180 CONFIG_RTL8187
disable_var_02
+ mangle_mac80211_modules
;;
zd1211rw)
select_driver CONFIG_ZD1211RW
disable_var_01
+ mangle_mac80211_modules
;;
*)
echo "Unsupported driver"
diff --git a/scripts/gen-compat-autoconf.sh b/scripts/gen-compat-autoconf.sh
index 6c7cae7..e1ff8c5 100755
--- a/scripts/gen-compat-autoconf.sh
+++ b/scripts/gen-compat-autoconf.sh
@@ -21,9 +21,13 @@ if [ $# -ne 1 ]; then
exit
fi
-COMPAT_CONFIG="$1"
+if [ -f driver-select.mk ]; then
+ COMPAT_CONFIGS="$1 driver-select.mk"
+else
+ COMPAT_CONFIGS="$1"
+fi
-if [ ! -f $COMPAT_CONFIG ]; then
+if [ ! -f $1 ]; then
echo "File $1 is not a file"
exit
fi
@@ -148,7 +152,7 @@ kernel_version_req $OLDEST_KERNEL_SUPPORTED
define_config_req CONFIG_WIRELESS_EXT
# For each CONFIG_FOO=x option
-for i in $(grep '^CONFIG_' $COMPAT_CONFIG); do
+for i in $(grep '^CONFIG_' $COMPAT_CONFIGS | awk -F":" '{print $2}'); do
# Get the element on the left of the "="
VAR=$(echo $i | cut -d"=" -f 1)
# Get the element on the right of the "="
--
1.6.3.3
^ permalink raw reply related
* Re: Firmware versioning best practices
From: John W. Linville @ 2009-09-29 0:42 UTC (permalink / raw)
To: Marcel Holtmann
Cc: Luis R. Rodriguez, linux-wireless, reinette chatre, Kalle Valo,
Johannes Berg, Christian Lamparter, Bob Copeland
In-Reply-To: <1254181937.2659.34.camel@localhost.localdomain>
On Mon, Sep 28, 2009 at 04:52:17PM -0700, Marcel Holtmann wrote:
> Hi Luis,
>
> > The ath_hif_usb driver will require the ar9271 firmware file but in
> > the future an open firmware might become available. The ar9170 driver
> > already is under the same situation already: a closed firmware is
> > available but an open firmware can be used, only thing is ar9170 uses
> > the same firmware name for both. We *could* change ar9170 to use the
> > Intel practice of tagging a version at the end of each firmware
> > release, like ar9170-1.fw but ar9170 originally was implemented with a
> > 2-stage firmware requirement and so ar9170-1.fw is already taken.
> >
> > ar9170 still needs a solution for the different firmwares, once we
> > start supporting the open firmware through some sort of release but
> > I'd like to address ath_hif_usb now early so that we don't run into
> > these snags and use some decent convention that is easy to follow.
> >
> > As I noted above, Intel seems to use the device-1.fw, device-2.fw
> > naming convention. Is this the best approach? Or shall we have the
> > same firmware filename and simply query the firmware for a map of
> > capabilities? Any other ideas?
>
> the general rule of thumb is that if you break the firmware API/ABI or
> change it then the firmware name should be different. So for example if
> you have some new driver functionality that requires new firmware then
> you better use a new firmware name. Otherwise it is just fine to use the
> same name if the functionality is not changing. If you can actually
> detect the new firmware features from the firmware filename, then you
> might not even have to bother with a different name. However keep in
> mind that you still need to load at least the previous version of the
> firmware and keep that working.
>
> For open source firmware vs binary blobs, we don't really have a good
> reference. In theory the driver should always try loading both and if
> one succeeds then go with it. At no point the driver should stop working
> only because a firmware is missing while either an open source or binary
> one for that matter would have been available.
>
> If you have a binary and an open source available, then you might wanna
> have a Kconfig option which to try first. Like prefer the open source
> over the binary one, but at the end of the day most system will ship
> with only one anyway. And a module parameter would work here as well.
This seems like a good piece of advise (as does Pavel's). Perhaps
someone should capture this on the wiki?
John
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
^ permalink raw reply
* Re: [RFC] compat-2.6: mangle symbols for driver-select
From: Luis R. Rodriguez @ 2009-09-29 0:33 UTC (permalink / raw)
To: Andrey Yurovsky; +Cc: tim.gardner, linux-wireless, Greg KH, Johannes Berg
In-Reply-To: <45e8e6c40909281702i2e5497e7l3a6492151f506ce5@mail.gmail.com>
On Mon, Sep 28, 2009 at 5:02 PM, Andrey Yurovsky <andrey@cozybit.com> wrote:
> On a side note, the compat-wireless name mangling will help with
> another problem:
> https://bugs.launchpad.net/ubuntu/+source/linux/+bug/249186
>
> ...this happens because compat-wireless builds a version of the usbnet
> module but then there are Ethernet dongles (ex: asix) that rely on the
> stock version of usbnet (they aren't updated by compat-wireless) and
> the user gets a symbols mismatch as a result. This won't be an issue
> if compat-wireless' usbnet has mangled names for its symbols.
Good call.
My solution to this was to consider backporting the usb modules that
use usbnet, these modules are pretty dormant development wise so it
certainly is something we could do.
I'm giving this mangle thing another shot now since I don't see anyone
stepping up, I won't do usbnet, my first target will obviously be
Atheros drivers :)
Luis
^ permalink raw reply
* Re: [RFC] compat-2.6: mangle symbols for driver-select
From: Andrey Yurovsky @ 2009-09-29 0:02 UTC (permalink / raw)
To: Luis R. Rodriguez; +Cc: tim.gardner, linux-wireless, Greg KH, Johannes Berg
In-Reply-To: <43e72e890909201028i119b75c0ic94d07e79e4b7a43@mail.gmail.com>
On a side note, the compat-wireless name mangling will help with
another problem:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/249186
...this happens because compat-wireless builds a version of the usbnet
module but then there are Ethernet dongles (ex: asix) that rely on the
stock version of usbnet (they aren't updated by compat-wireless) and
the user gets a symbols mismatch as a result. This won't be an issue
if compat-wireless' usbnet has mangled names for its symbols.
-Andrey
^ permalink raw reply
* Re: Firmware versioning best practices
From: Marcel Holtmann @ 2009-09-28 23:52 UTC (permalink / raw)
To: Luis R. Rodriguez
Cc: linux-wireless, reinette chatre, Kalle Valo, Johannes Berg,
Christian Lamparter, Bob Copeland
In-Reply-To: <43e72e890909281517k23abaf8dvd3e84837ce307429@mail.gmail.com>
Hi Luis,
> The ath_hif_usb driver will require the ar9271 firmware file but in
> the future an open firmware might become available. The ar9170 driver
> already is under the same situation already: a closed firmware is
> available but an open firmware can be used, only thing is ar9170 uses
> the same firmware name for both. We *could* change ar9170 to use the
> Intel practice of tagging a version at the end of each firmware
> release, like ar9170-1.fw but ar9170 originally was implemented with a
> 2-stage firmware requirement and so ar9170-1.fw is already taken.
>
> ar9170 still needs a solution for the different firmwares, once we
> start supporting the open firmware through some sort of release but
> I'd like to address ath_hif_usb now early so that we don't run into
> these snags and use some decent convention that is easy to follow.
>
> As I noted above, Intel seems to use the device-1.fw, device-2.fw
> naming convention. Is this the best approach? Or shall we have the
> same firmware filename and simply query the firmware for a map of
> capabilities? Any other ideas?
the general rule of thumb is that if you break the firmware API/ABI or
change it then the firmware name should be different. So for example if
you have some new driver functionality that requires new firmware then
you better use a new firmware name. Otherwise it is just fine to use the
same name if the functionality is not changing. If you can actually
detect the new firmware features from the firmware filename, then you
might not even have to bother with a different name. However keep in
mind that you still need to load at least the previous version of the
firmware and keep that working.
For open source firmware vs binary blobs, we don't really have a good
reference. In theory the driver should always try loading both and if
one succeeds then go with it. At no point the driver should stop working
only because a firmware is missing while either an open source or binary
one for that matter would have been available.
If you have a binary and an open source available, then you might wanna
have a Kconfig option which to try first. Like prefer the open source
over the binary one, but at the end of the day most system will ship
with only one anyway. And a module parameter would work here as well.
Regards
Marcel
^ permalink raw reply
* Re: Firmware versioning best practices
From: Luis R. Rodriguez @ 2009-09-28 23:05 UTC (permalink / raw)
To: Pavel Roskin
Cc: linux-wireless, reinette chatre, Kalle Valo, Johannes Berg,
Christian Lamparter, Bob Copeland
In-Reply-To: <1254177211.21847.15.camel@mj>
On Mon, Sep 28, 2009 at 3:33 PM, Pavel Roskin <proski@gnu.org> wrote:
> On Mon, 2009-09-28 at 15:17 -0700, Luis R. Rodriguez wrote:
>> The ath_hif_usb driver will require the ar9271 firmware file but in
>> the future an open firmware might become available. The ar9170 driver
>> already is under the same situation already: a closed firmware is
>> available but an open firmware can be used, only thing is ar9170 uses
>> the same firmware name for both. We *could* change ar9170 to use the
>> Intel practice of tagging a version at the end of each firmware
>> release, like ar9170-1.fw but ar9170 originally was implemented with a
>> 2-stage firmware requirement and so ar9170-1.fw is already taken.
>
> Versions don't have to start with 1. We could start e.g. with 10.
Point taken.
>> ar9170 still needs a solution for the different firmwares, once we
>> start supporting the open firmware through some sort of release but
>> I'd like to address ath_hif_usb now early so that we don't run into
>> these snags and use some decent convention that is easy to follow.
>
> We could use ar9170-apiversion-codeverestion.fw and link it to
> ar9170-apiversion.fw. That is, if the open firmware version is 0.9.0
> and it was compiled for API version 12, the filename would be
> ar9170-12-0.9.0.fw and it could be linked to ar9170-12.fw.
Nice, I like this convention.
>> As I noted above, Intel seems to use the device-1.fw, device-2.fw
>> naming convention. Is this the best approach? Or shall we have the
>> same firmware filename and simply query the firmware for a map of
>> capabilities? Any other ideas?
>
> Distinctive names are good for simplicity of administration and the
> capabilities are good for the sanity of the driver. But I don't see why
> we cannot have both.
OK sure, thanks for the feedback, at least now I know what naming
scheme to use. The bitmap stuff will have to come later through some
sort of open firmware as I am not sure if we have this with the closed
one.
Luis
^ permalink raw reply
* RE: [PATCH] libertas: Add auto deep sleep support for SD8385/SD8686/SD8688
From: Bing Zhao @ 2009-09-28 22:42 UTC (permalink / raw)
To: Dan Williams
Cc: libertas-dev@lists.infradead.org, linux-wireless@vger.kernel.org,
Amitkumar Karwar
In-Reply-To: <1253458691.11702.46.camel@localhost.localdomain>
SGkgRGFuLA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IERhbiBXaWxs
aWFtcyBbbWFpbHRvOmRjYndAcmVkaGF0LmNvbV0NCj4gU2VudDogU3VuZGF5LCBTZXB0ZW1iZXIg
MjAsIDIwMDkgNzo1OCBBTQ0KPiBUbzogQmluZyBaaGFvDQo+IENjOiBsaWJlcnRhcy1kZXZAbGlz
dHMuaW5mcmFkZWFkLm9yZzsgbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnOyBBbWl0a3Vt
YXIgS2Fyd2FyDQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0hdIGxpYmVydGFzOiBBZGQgYXV0byBkZWVw
IHNsZWVwIHN1cHBvcnQgZm9yIFNEODM4NS9TRDg2ODYvU0Q4Njg4DQo+DQo+IE9uIFR1ZSwgMjAw
OS0wOS0xNSBhdCAxNjo0NSAtMDcwMCwgQmluZyBaaGFvIHdyb3RlOg0KPiA+IEZyb206IEFtaXRr
dW1hciBLYXJ3YXIgPGFrYXJ3YXJAbWFydmVsbC5jb20+DQo+ID4NCj4gPiBBZGQgdGltZXIgYmFz
ZWQgYXV0byBkZWVwIHNsZWVwIGZlYXR1cmUgaW4gbGliZXJ0YXMgZHJpdmVyIHdoaWNoIGNhbiBi
ZQ0KPiA+IGNvbmZpZ3VyZWQgdGhyb3VnaCBkZWJ1Z2ZzIGludGVyZmFjZS4gVGhpcyBpcyB0ZXN0
ZWQgb24gU0Q4Njg4LCBTRDg2ODYgY2FyZHMNCj4gPiB3aXRoIGZpcm13YXJlIHZlcnNpb25zIDEw
LjM4LjEucDI1LCA5LjcwLjQucDAgcmVzcGVjdGl2ZWx5IG9uIDMyLWJpdCBhbmQgNjQtYml0DQo+
ID4gcGxhdGZvcm1zLiBUZXN0cyBoYXZlIGJlZW4gZG9uZSBmb3IgVVNCL0NTIGNhcmRzIHRvIG1h
a2Ugc3VyZSB0aGF0IHRoZSBwYXRjaA0KPiA+IHdvbid0IGJyZWFrIFVTQi9DUyBjb2RlLiBXZSBk
aWRuJ3QgdGVzdCB0aGUgaWZfc3BpIGRyaXZlci4NCj4NCj4gU28gdGhlcmUncyBhbHdheXM6DQo+
DQo+ICNkZWZpbmUgSVdfUE9XRVJfU0FWSU5HICAgICAgICAgICAgICAgMHg0MDAwICAvKiBWYWx1
ZSBpcyByZWxhdGl2ZSAoaG93IGFnZ3Jlc3NpdmUpKi8NCj4NCj4gaXdjb25maWcgd2xhbjAgcG93
ZXIgc2F2aW5nIDEwDQo+DQo+IFRoYXQgc2VlbXMgcXVpdGUgYSBiaXQgYmV0dGVyIHRoYW4gYSBu
ZXcgZGVidWdmcyBwYXJhbWV0ZXIsIHVudGlsIHdlIGNhbg0KPiBjb252ZXIgdGhlIGRyaXZlciBv
dmVyIGNmZzgwMjExIGFuZCBkbyB0aGlzIHByb3Blcmx5LiAgSWYgdGhlIHBvd2VyDQo+IHNhdmlu
ZyBtb2RlIGlzIGhpZ2hlciB0aGFuIHNvbWUgbnVtYmVyIFgsIHRoZSBjaGlwIGdldHMgcHV0IGlu
dG8gZGVlcA0KPiBzbGVlcCBtb2RlLCBvciBpdCBjYW4gYmUgYXV0b21hdGljYWxseSBwbGFjZWQg
aW4gZGVlcCBzbGVlcCBtb2RlIGJ5IHRoZQ0KPiBkcml2ZXIgd2hlbiB0aGVyZSBpcyBubyBhc3Nv
Y2lhdGlvbiBsaWtlIHlvdSBoYXZlIGRvbmUgd2l0aCB0aGUgdGltZXINCj4gYWJvdmUuICBJIHRo
aW5rIHlvdSBzaG91bGQgcGljayByZWFzb25hYmxlIGRlZmF1bHRzLCBhbmQgcGVyaGFwcyBpZiB0
aGUNCj4gJ3NhdmluZycgdmFsdWUgaXMgbGFyZ2VyLCB0aGUgdGltZXIgdmFsdWUgaW4gdGhlIGRy
aXZlciBnZXRzIHNtYWxsZXIuDQo+DQo+IERvZXMgdGhhdCBzb3VuZCBsaWtlIGFuIE9LIGFwcHJv
YWNoPyAgV2UgcmVhbGx5IHNob3VsZCBiZSB1c2luZyBkZWJ1Z2ZzDQo+IG9ubHkgZm9yIGRlYnVn
Z2luZyBzdHVmZiAob2J2aW91c2x5KSwgYW5kIHRoZSByZWFsIGZpeCBmb3IgdGhpcyBzb3J0IG9m
DQo+IHRoaW5nIGlzIHRvIHN3aXRjaCBvdmVyIHRvIGNmZzgwMjExIHdoZXJlIHdlIGNhbiBhY3R1
YWxseSBleHRlbmQgdGhlDQo+IGNvbmZpZ3VyYXRpb24gQVBJIGluc3RlYWQgb2YgaGFja2luZyBp
dCBpbnRvIGRlYnVnZnMvV0VYVC9ldGMuDQo+DQo+IERhbg0KDQpUaGFua3MgZm9yIHlvdXIgc3Vn
Z2VzdGlvbi4NCg0KSW4gbGF0ZXN0IGtlcm5lbCwgSVdfUE9XRVJfU0FWSU5HIGlzIG5vdCBkZWZp
bmVkIGluIGluY2x1ZGUvbGludXgvd2lyZWxlc3MuaC4NCklXX1BPV0VSX1BFUklPRCBhbmQgSVdf
UE9XRVJfVElNRU9VVCBhcmUgZGVmaW5lZCB0aG91Z2guDQoNCldlIGFyZSBwbGFubmluZyB0byBy
ZW1vdmUgZGVidWdmcyBmb3IgY29uZmlndXJhdGlvbnMgYW5kIHVzZSB0aGUgZm9sbG93aW5nIGNv
bW1hbmRzIGluc3RlYWQuDQpQbGVhc2UgbGV0IHVzIGtub3cgaWYgdGhlcmUgaXMgYW55IGNvbmNl
cm4uDQoNCml3Y29uZmlnIHdsYW4wIHBvd2VyIHBlcmlvZCAwICAgLT4gZW5hYmxlIGRlZXAgc2xl
ZXAgKGVudGVyIGRlZXAgc2xlZXAgaW1tZWRpYXRlbHkpDQppd2NvbmZpZyB3bGFuMCBwb3dlciBw
ZXJpb2QgNSAgIC0+IGVuYWJsZSBhdXRvIGRlZXAgc2xlZXAgKGVudGVyIGRlZXAgc2xlZXAgYXV0
b21hdGljYWxseSBhZnRlciA1cyBpZGxlIHRpbWUpDQppd2NvbmZpZyB3bGFuMCBwb3dlciBwZXJp
b2QgLTEgIC0+IGRpc2FibGUgZGVlcCBzbGVlcCAvIGF1dG8gZGVlcCBzbGVlcA0KDQpCeSB0aGUg
d2F5LCB0aGVyZSBpcyBhIGJ1ZyBpbiBpd2NvbmZpZyB0b29sIHYyOS4gSXQgZG9lc27igJl0IHRh
a2UgYW55IHZhbHVlcyByaWdodCBhZnRlciAicGVyaW9kIiBvciAidGltZW91dCIuIFRoZSBuZXcg
dmVyc2lvbiBvZiBXaXJlbGVzcyBUb29scyB2MzAtcHJlOCAobGluayBiZWxvdykgZml4ZWQgdGhl
IGJ1ZzoNCg0KaHR0cDovL3d3dy5ocGwuaHAuY29tL3BlcnNvbmFsL0plYW5fVG91cnJpbGhlcy9M
aW51eC93aXJlbGVzc190b29scy4zMC5wcmU4LnRhci5neg0KDQpUaGFua3MsDQoNCkJpbmcNCg0K
Pg0KPiA+IFNpZ25lZC1vZmYtYnk6IEFtaXRrdW1hciBLYXJ3YXIgPGFrYXJ3YXJAbWFydmVsbC5j
b20+DQo+ID4gU2lnbmVkLW9mZi1ieTogQmluZyBaaGFvIDxiemhhb0BtYXJ2ZWxsLmNvbT4NCj4g
PiAtLS0NCj4gPiAgZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvUkVBRE1FICAgIHwgICAy
OCArKysrKy0NCj4gPiAgZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMgICAgIHwg
ICA3MiArKysrKysrKysrKysrLQ0KPiA+ICBkcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9j
bWRyZXNwLmMgfCAgIDEyICsrKw0KPiA+ICBkcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9k
ZWJ1Z2ZzLmMgfCAgMTYwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiAgZHJp
dmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVjbC5oICAgIHwgICAgNCArDQo+ID4gIGRyaXZl
cnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oICAgICB8ICAgMTggKysrKw0KPiA+ICBkcml2
ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0LmggICAgfCAgICAxICsNCj4gPiAgZHJpdmVy
cy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYyAgIHwgICAgMyArDQo+ID4gIGRyaXZlcnMv
bmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYyB8ICAgNTYgKysrKysrKysrKysNCj4gPiAg
ZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5oIHwgICAgMyArLQ0KPiA+ICBk
cml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuYyAgfCAgICAzICsNCj4gPiAgZHJp
dmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfdXNiLmMgIHwgICAgMyArDQo+ID4gIGRyaXZl
cnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYyAgICB8ICAxMTEgKysrKysrKysrKysrKysr
KysrKy0tLQ0KPiA+ICBkcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMgICAgfCAg
IDExICsrDQo+ID4gIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYyAgICB8ICAx
MzggKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiAgMTUgZmlsZXMgY2hhbmdlZCwgNjA0
IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2Ry
aXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL1JFQURNRSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNz
L2xpYmVydGFzL1JFQURNRQ0KPiA+IGluZGV4IGFiNmEyZDUuLjA1OWNlOGMgMTAwNjQ0DQo+ID4g
LS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvUkVBRE1FDQo+ID4gKysrIGIvZHJp
dmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvUkVBRE1FDQo+ID4gQEAgLTEsNSArMSw1IEBADQo+
ID4gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ID4gLSAgICAgICAgICAgICAgICAgICBSRUFE
TUUgZm9yIFVTQjgzODgNCj4gPiArICAgICAgICAgICAgICAgICAgIFJFQURNRSBmb3IgTGliZXJ0
YXMNCj4gPg0KPiA+ICAgKGMpIENvcHlyaWdodCDCqSAyMDAzLTIwMDYsIE1hcnZlbGwgSW50ZXJu
YXRpb25hbCBMdGQuDQo+ID4gICBBbGwgUmlnaHRzIFJlc2VydmVkDQo+ID4gQEAgLTIyNiw0ICsy
MjYsMzAgQEAgc2V0dXNlcnNjYW4NCj4gPiAgICAgIEFsbCBlbnRyaWVzIGluIHRoZSBzY2FuIHRh
YmxlIChub3QganVzdCB0aGUgbmV3IHNjYW4gZGF0YSB3aGVuIGtlZXA9MSkNCj4gPiAgICAgIHdp
bGwgYmUgZGlzcGxheWVkIHVwb24gY29tcGxldGlvbiBieSB1c2Ugb2YgdGhlIGdldHNjYW50YWJs
ZSBpb2N0bC4NCj4gPg0KPiA+ICtkZWVwc2xlZXANCj4gPiArDQo+ID4gKyAgIFRoaXMgY29tbWFu
ZCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgc3RhdGlvbiBpbiBkZWVwIHNsZWVwIG1vZGUvYXV0
bw0KPiA+ICsgICBkZWVwIHNsZWVwIG1vZGUuIENvbW1hbmQgZXhwZWN0cyB0d28gcGFyYW1ldGVy
czoNCj4gPiArICAgJ3N0YXRlJyAnaWRsZSB0aW1lIHBlcmlvZCcNCj4gPiArDQo+ID4gKyAgIFRo
ZSB0aW1lciBpcyBpbXBsZW1lbnRlZCB0byBtb25pdG9yIHRoZSBhY3Rpdml0aWVzIChjb21tYW5k
LCBldmVudCwNCj4gPiArICAgICAgICBkYXRhLCBldGMuKS4gV2hlbiBhbiBhY3Rpdml0eSBpcyBk
ZXRlY3RlZCBzdGF0aW9uIHdpbGwgZXhpdCBmcm9tIGRlZXANCj4gPiArICAgICAgICBzbGVlcCBt
b2RlIGF1dG9tYXRpY2FsbHkgYW5kIHJlc3RhcnQgdGhlIHRpbWVyLiBBdCB0aW1lciBleHBpcnkg
KG5vDQo+ID4gKyAgICAgICAgYWN0aXZpdHkgZm9yIGRlZmluZWQgdGltZSBwZXJpb2QpIHRoZSBk
ZWVwc2xlZXAgbW9kZSBpcyBlbnRlcmVkDQo+ID4gKyAgICAgICAgYXV0b21hdGljYWxseS4NCj4g
PiArDQo+ID4gKyAgIE5vdGU6IHRoaXMgY29tbWFuZCBpcyBmb3IgU0RJTyBpbnRlcmZhY2Ugb25s
eS4NCj4gPiArDQo+ID4gKyAgIFBhdGg6IC9zeXMva2VybmVsL2RlYnVnL2xpYmVydGFzX3dpcmVs
ZXNzL2V0aFgvDQo+ID4gKw0KPiA+ICsgICBVc2FnZToNCj4gPiArICAgVG8gcmVhZCB0aGUgY3Vy
cmVudCBzdGF0dXMgb2YgZGVlcCBzbGVlcCBkbzoNCj4gPiArICAgICAgICAgICBjYXQgZGVlcHNs
ZWVwDQo+ID4gKyAgIFRvIGVuYWJsZSBkZWVwIHNsZWVwIG1vZGUgZG86DQo+ID4gKyAgICAgICAg
ICAgZWNobyAnMSAwJyA+IGRlZXBzbGVlcA0KPiA+ICsgICBUbyBlbmFibGUgYXV0byBkZWVwIHNs
ZWVwIG1vZGUgd2l0aCBpZGxlIHRpbWUgcGVyaW9kIDUgc2Vjb25kcyBkbzoNCj4gPiArICAgICAg
ICAgICBlY2hvICcxIDUwMDAnID4gZGVlcHNsZWVwDQo+ID4gKyAgIFRvIGRpc2FibGUgZGVlcCBz
bGVlcC9hdXRvIGRlZXAgc2xlZXAgbW9kZSBkbzoNCj4gPiArICAgICAgICAgICBlY2hvICcwIDAn
ID4gZGVlcHNsZWVwDQo+ID4gKw0KPiA+ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gPiBkaWZm
IC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMgYi9kcml2ZXJzL25l
dC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYw0KPiA+IGluZGV4IDY4NTA5ODEuLjNhM2U4OTQgMTAw
NjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMNCj4gPiAr
KysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYw0KPiA+IEBAIC0xNyw3ICsx
Nyw2IEBADQo+ID4NCj4gPiAgc3RhdGljIHN0cnVjdCBjbWRfY3RybF9ub2RlICpsYnNfZ2V0X2Nt
ZF9jdHJsX25vZGUoc3RydWN0IGxic19wcml2YXRlICpwcml2KTsNCj4gPg0KPiA+IC0NCj4gPiAg
LyoqDQo+ID4gICAqICBAYnJpZWYgU2ltcGxlIGNhbGxiYWNrIHRoYXQgY29waWVzIHJlc3BvbnNl
IGJhY2sgaW50byBjb21tYW5kDQo+ID4gICAqDQo+ID4gQEAgLTMxOSw2ICszMTgsNjAgQEAgaW50
IGxic19jbWRfODAyXzExX3NsZWVwX3BhcmFtcyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHVp
bnQxNl90IGNtZF9hY3Rpb24sDQo+ID4gICAgIHJldHVybiAwOw0KPiA+ICB9DQo+ID4NCj4gPiAr
c3RhdGljIGludCBsYnNfd2FpdF9mb3JfZHNfYXdha2Uoc3RydWN0IGxic19wcml2YXRlICpwcml2
KQ0KPiA+ICt7DQo+ID4gKyAgIGludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArICAgbGJzX2RlYl9l
bnRlcihMQlNfREVCX0NNRCk7DQo+ID4gKw0KPiA+ICsgICBpZiAocHJpdi0+aXNfZGVlcF9zbGVl
cCkgew0KPiA+ICsgICAgICAgICAgIGlmICghd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVv
dXQocHJpdi0+ZHNfYXdha2VfcSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAhcHJpdi0+aXNfZGVlcF9zbGVlcCwgKDEwICogSFopKSkgew0KPiA+ICsgICAgICAgICAg
ICAgICAgICAgbGJzX3ByX2VycigiZHNfYXdha2VfcTogdGltZXIgZXhwaXJlZFxuIik7DQo+ID4g
KyAgICAgICAgICAgICAgICAgICByZXQgPSAtMTsNCj4gPiArICAgICAgICAgICB9DQo+ID4gKyAg
IH0NCj4gPiArDQo+ID4gKyAgIGxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX0NNRCwgInJldCAl
ZCIsIHJldCk7DQo+ID4gKyAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK2ludCBs
YnNfc2V0X2RlZXBfc2xlZXAoc3RydWN0IGxic19wcml2YXRlICpwcml2LCBpbnQgZGVlcF9zbGVl
cCkNCj4gPiArew0KPiA+ICsgICBpbnQgcmV0ID0gIDA7DQo+ID4gKw0KPiA+ICsgICBsYnNfZGVi
X2VudGVyKExCU19ERUJfQ01EKTsNCj4gPiArDQo+ID4gKyAgIGlmIChkZWVwX3NsZWVwKSB7DQo+
ID4gKyAgICAgICAgICAgaWYgKHByaXYtPmlzX2RlZXBfc2xlZXAgIT0gMSkgew0KPiA+ICsgICAg
ICAgICAgICAgICAgICAgbGJzX2RlYl9jbWQoImRlZXAgc2xlZXA6IHNsZWVwXG4iKTsNCj4gPiAr
ICAgICAgICAgICAgICAgICAgIEJVR19PTighcHJpdi0+ZW50ZXJfZGVlcF9zbGVlcCk7DQo+ID4g
KyAgICAgICAgICAgICAgICAgICByZXQgPSBwcml2LT5lbnRlcl9kZWVwX3NsZWVwKHByaXYpOw0K
PiA+ICsgICAgICAgICAgICAgICAgICAgaWYgKCFyZXQpIHsNCj4gPiArICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZShwcml2LT5kZXYpOw0KPiA+ICsgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuZXRpZl9jYXJyaWVyX29mZihwcml2LT5kZXYpOw0KPiA+ICsgICAg
ICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAg
ICAgICAgICAgICBsYnNfcHJfZXJyKCJkZWVwIHNsZWVwOiBhbHJlYWR5IGVuYWJsZWRcbiIpOw0K
PiA+ICsgICAgICAgICAgIH0NCj4gPiArICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICBpZiAo
cHJpdi0+aXNfZGVlcF9zbGVlcCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgbGJzX2RlYl9j
bWQoImRlZXAgc2xlZXA6IHdha2V1cFxuIik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICBCVUdf
T04oIXByaXYtPmV4aXRfZGVlcF9zbGVlcCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICByZXQg
PSBwcml2LT5leGl0X2RlZXBfc2xlZXAocHJpdik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICBp
ZiAoIXJldCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBsYnNfd2Fp
dF9mb3JfZHNfYXdha2UocHJpdik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChyZXQpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGJzX3ByX2Vy
cigiZGVlcCBzbGVlcDogd2FrZXVwIg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkXG4iKTsNCj4gPiArICAgICAgICAgICAgICAg
ICAgIH0NCj4gPiArICAgICAgICAgICB9DQo+ID4gKyAgIH0NCj4gPiArDQo+ID4gKyAgIGxic19k
ZWJfbGVhdmVfYXJncyhMQlNfREVCX0NNRCwgInJldCAlZCIsIHJldCk7DQo+ID4gKyAgIHJldHVy
biByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gIGludCBsYnNfY21kXzgwMl8xMV9zZXRfd2VwKHN0
cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdWludDE2X3QgY21kX2FjdGlvbiwNCj4gPiAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCBhc3NvY19yZXF1ZXN0ICphc3NvYykNCj4gPiAgew0KPiA+
IEBAIC0xMjQyLDggKzEyOTUsMTcgQEAgc3RhdGljIHZvaWQgbGJzX3N1Ym1pdF9jb21tYW5kKHN0
cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwNCj4gPiAgICAgICAgICAgICB0aW1lbyA9IEhaLzQ7DQo+
ID4gICAgIH0NCj4gPg0KPiA+IC0gICAvKiBTZXR1cCB0aGUgdGltZXIgYWZ0ZXIgdHJhbnNtaXQg
Y29tbWFuZCAqLw0KPiA+IC0gICBtb2RfdGltZXIoJnByaXYtPmNvbW1hbmRfdGltZXIsIGppZmZp
ZXMgKyB0aW1lbyk7DQo+ID4gKyAgIGlmIChjb21tYW5kID09IENNRF84MDJfMTFfREVFUF9TTEVF
UCkgew0KPiA+ICsgICAgICAgICAgIGlmIChwcml2LT5pc19hdXRvX2RlZXBfc2xlZXBfZW5hYmxl
ZCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgcHJpdi0+d2FrZXVwX2Rldl9yZXF1aXJlZCA9
IDE7DQo+ID4gKyAgICAgICAgICAgICAgICAgICBwcml2LT5kbmxkX3NlbnQgPSAwOw0KPiA+ICsg
ICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICBwcml2LT5pc19kZWVwX3NsZWVwID0gMTsNCj4g
PiArICAgICAgICAgICBsYnNfY29tcGxldGVfY29tbWFuZChwcml2LCBjbWRub2RlLCAwKTsNCj4g
PiArICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAvKiBTZXR1cCB0aGUgdGltZXIgYWZ0ZXIg
dHJhbnNtaXQgY29tbWFuZCAqLw0KPiA+ICsgICAgICAgICAgIG1vZF90aW1lcigmcHJpdi0+Y29t
bWFuZF90aW1lciwgamlmZmllcyArIHRpbWVvKTsNCj4gPiArICAgfQ0KPiA+DQo+ID4gICAgIGxi
c19kZWJfbGVhdmUoTEJTX0RFQl9IT1NUKTsNCj4gPiAgfQ0KPiA+IEBAIC0xNTA1LDYgKzE1Njcs
MTAgQEAgaW50IGxic19wcmVwYXJlX2FuZF9zZW5kX2NvbW1hbmQoc3RydWN0IGxic19wcml2YXRl
ICpwcml2LA0KPiA+ICAgICBjYXNlIENNRF84MDJfMTFfQkVBQ09OX0NUUkw6DQo+ID4gICAgICAg
ICAgICAgcmV0ID0gbGJzX2NtZF9iY25fY3RybChwcml2LCBjbWRwdHIsIGNtZF9hY3Rpb24pOw0K
PiA+ICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICBjYXNlIENNRF84MDJfMTFfREVFUF9TTEVF
UDoNCj4gPiArICAgICAgICAgICBjbWRwdHItPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihDTURfODAy
XzExX0RFRVBfU0xFRVApOw0KPiA+ICsgICAgICAgICAgIGNtZHB0ci0+c2l6ZSA9IGNwdV90b19s
ZTE2KFNfRFNfR0VOKTsNCj4gPiArICAgICAgICAgICBicmVhazsNCj4gPiAgICAgZGVmYXVsdDoN
Cj4gPiAgICAgICAgICAgICBsYnNfcHJfZXJyKCJQUkVQX0NNRDogdW5rbm93biBjb21tYW5kIDB4
JTA0eFxuIiwgY21kX25vKTsNCj4gPiAgICAgICAgICAgICByZXQgPSAtMTsNCj4gPiBkaWZmIC0t
Z2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kcmVzcC5jIGIvZHJpdmVycy9u
ZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kcmVzcC5jDQo+ID4gaW5kZXggYzQyZDNmYS4uNDdkMmIx
OSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWRyZXNw
LmMNCj4gPiArKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWRyZXNwLmMNCj4g
PiBAQCAtNTA0LDkgKzUwNCwyMSBAQCBpbnQgbGJzX3Byb2Nlc3NfZXZlbnQoc3RydWN0IGxic19w
cml2YXRlICpwcml2LCB1MzIgZXZlbnQpDQo+ID4NCj4gPiAgICAgY2FzZSBNQUNSRUdfSU5UX0NP
REVfSE9TVF9BV0FLRToNCj4gPiAgICAgICAgICAgICBsYnNfZGViX2NtZCgiRVZFTlQ6IGhvc3Qg
YXdha2VcbiIpOw0KPiA+ICsgICAgICAgICAgIGlmIChwcml2LT5yZXNldF9kZWVwX3NsZWVwX3dh
a2V1cCkNCj4gPiArICAgICAgICAgICAgICAgICAgIHByaXYtPnJlc2V0X2RlZXBfc2xlZXBfd2Fr
ZXVwKHByaXYpOw0KPiA+ICsgICAgICAgICAgIHByaXYtPmlzX2RlZXBfc2xlZXAgPSAwOw0KPiA+
ICAgICAgICAgICAgIGxic19zZW5kX2NvbmZpcm13YWtlKHByaXYpOw0KPiA+ICAgICAgICAgICAg
IGJyZWFrOw0KPiA+DQo+ID4gKyAgIGNhc2UgTUFDUkVHX0lOVF9DT0RFX0RFRVBfU0xFRVBfQVdB
S0U6DQo+ID4gKyAgICAgICAgICAgaWYgKHByaXYtPnJlc2V0X2RlZXBfc2xlZXBfd2FrZXVwKQ0K
PiA+ICsgICAgICAgICAgICAgICAgICAgcHJpdi0+cmVzZXRfZGVlcF9zbGVlcF93YWtldXAocHJp
dik7DQo+ID4gKyAgICAgICAgICAgbGJzX2RlYl9jbWQoIkVWRU5UOiBkcyBhd2FrZVxuIik7DQo+
ID4gKyAgICAgICAgICAgcHJpdi0+aXNfZGVlcF9zbGVlcCA9IDA7DQo+ID4gKyAgICAgICAgICAg
cHJpdi0+d2FrZXVwX2Rldl9yZXF1aXJlZCA9IDA7DQo+ID4gKyAgICAgICAgICAgd2FrZV91cF9p
bnRlcnJ1cHRpYmxlKCZwcml2LT5kc19hd2FrZV9xKTsNCj4gPiArICAgICAgICAgICBicmVhazsN
Cj4gPiArDQo+ID4gICAgIGNhc2UgTUFDUkVHX0lOVF9DT0RFX1BTX0FXQUtFOg0KPiA+ICAgICAg
ICAgICAgIGxic19kZWJfY21kKCJFVkVOVDogcHMgYXdha2VcbiIpOw0KPiA+ICAgICAgICAgICAg
IC8qIGhhbmRsZSB1bmV4cGVjdGVkIFBTIEFXQUtFIGV2ZW50ICovDQo+ID4gZGlmZiAtLWdpdCBh
L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dp
cmVsZXNzL2xpYmVydGFzL2RlYnVnZnMuYw0KPiA+IGluZGV4IDg5M2E1NWMuLjYyNGE0MzggMTAw
NjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVidWdmcy5jDQo+
ID4gKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVidWdmcy5jDQo+ID4gQEAg
LTExNyw2ICsxMTcsMTEgQEAgc3RhdGljIHNzaXplX3QgbGJzX3NsZWVwcGFyYW1zX3dyaXRlKHN0
cnVjdCBmaWxlICpmaWxlLA0KPiA+ICAgICBpZiAoIWJ1ZikNCj4gPiAgICAgICAgICAgICByZXR1
cm4gLUVOT01FTTsNCj4gPg0KPiA+ICsgICBpZiAoIWxic19pc19jbWRfYWxsb3dlZChwcml2KSkg
ew0KPiA+ICsgICAgICAgICAgIHJldCA9IC1FQlVTWTsNCj4gPiArICAgICAgICAgICBnb3RvIG91
dF91bmxvY2s7DQo+ID4gKyAgIH0NCj4gPiArDQo+ID4gICAgIGJ1Zl9zaXplID0gbWluKGNvdW50
LCBsZW4gLSAxKTsNCj4gPiAgICAgaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGJ1
Zl9zaXplKSkgew0KPiA+ICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7DQo+ID4gQEAgLTE1Nyw2
ICsxNjIsMTEgQEAgc3RhdGljIHNzaXplX3QgbGJzX3NsZWVwcGFyYW1zX3JlYWQoc3RydWN0IGZp
bGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLA0KPiA+ICAgICBpZiAoIWJ1ZikNCj4gPiAg
ICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4gPg0KPiA+ICsgICBpZiAoIWxic19pc19jbWRf
YWxsb3dlZChwcml2KSkgew0KPiA+ICsgICAgICAgICAgIHJldCA9IC1FQlVTWTsNCj4gPiArICAg
ICAgICAgICBnb3RvIG91dF91bmxvY2s7DQo+ID4gKyAgIH0NCj4gPiArDQo+ID4gICAgIHJldCA9
IGxic19jbWRfODAyXzExX3NsZWVwX3BhcmFtcyhwcml2LCBDTURfQUNUX0dFVCwgJnNwKTsNCj4g
PiAgICAgaWYgKHJldCkNCj4gPiAgICAgICAgICAgICBnb3RvIG91dF91bmxvY2s7DQo+ID4gQEAg
LTE3Myw2ICsxODMsMTE4IEBAIG91dF91bmxvY2s6DQo+ID4gICAgIHJldHVybiByZXQ7DQo+ID4g
IH0NCj4gPg0KPiA+ICtzdGF0aWMgc3NpemVfdCBsYnNfZGVlcHNsZWVwX3JlYWQoc3RydWN0IGZp
bGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQ0KPiA+ICt7DQo+ID4gKyAgIHN0
cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsNCj4gPiArICAgc3Np
emVfdCBwb3MgPSAwOw0KPiA+ICsgICBpbnQgcmV0Ow0KPiA+ICsgICB1bnNpZ25lZCBsb25nIGFk
ZHIgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7DQo+ID4gKyAgIGNoYXIgKmJ1ZiA9IChj
aGFyICopYWRkcjsNCj4gPiArDQo+ID4gKyAgIGlmICghYnVmKQ0KPiA+ICsgICAgICAgICAgIHJl
dHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiArICAgaWYgKCFwcml2LT5lbnRlcl9kZWVwX3NsZWVw
KSB7DQo+ID4gKyAgICAgICAgICAgbGJzX3ByX2VycigiZGVlcCBzbGVlcCBmZWF0dXJlIGlzIG5v
dCBpbXBsZW1lbnRlZCAiDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3IgdGhp
cyBpbnRlcmZhY2UgZHJpdmVyXG4iKTsNCj4gPiArICAgICAgICAgICByZXQgPSAtRUlOVkFMOw0K
PiA+ICsgICAgICAgICAgIGdvdG8gb3V0X2RzOw0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICsgICBp
ZiAocHJpdi0+aXNfYXV0b19kZWVwX3NsZWVwX2VuYWJsZWQpDQo+ID4gKyAgICAgICAgICAgcG9z
ICs9IHNucHJpbnRmKGJ1ZiwgbGVuLCAiJWQgJWRcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByaXYtPmlzX2F1dG9fZGVlcF9zbGVlcF9lbmFibGVkLA0KPiA+ICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcml2LT5hdXRvX2RlZXBfc2xlZXBfdGltZW91dCk7DQo+ID4g
KyAgIGVsc2UgaWYgKHByaXYtPmlzX2RlZXBfc2xlZXApDQo+ID4gKyAgICAgICAgICAgcG9zICs9
IHNucHJpbnRmKGJ1ZiwgbGVuLCAiJWQgJWRcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByaXYtPmlzX2RlZXBfc2xlZXAsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByaXYtPmF1dG9fZGVlcF9zbGVlcF90aW1lb3V0KTsNCj4gPiArICAgZWxzZQ0KPiA+ICsg
ICAgICAgICAgIHBvcyArPSBzbnByaW50ZihidWYsIGxlbiwgIiVkICVkXG4iLA0KPiA+ICsgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5pc19kZWVwX3NsZWVwLA0KPiA+ICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcml2LT5hdXRvX2RlZXBfc2xlZXBfdGltZW91dCk7DQo+ID4g
Kw0KPiA+ICsgICByZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwg
cHBvcywgYnVmLCBwb3MpOw0KPiA+ICsNCj4gPiArb3V0X2RzOg0KPiA+ICsgICBmcmVlX3BhZ2Uo
YWRkcik7DQo+ID4gKyAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBz
c2l6ZV90IGxic19kZWVwc2xlZXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsDQo+ID4gKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwNCj4g
PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpw
cG9zKQ0KPiA+ICt7DQo+ID4gKyAgIHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGZpbGUtPnBy
aXZhdGVfZGF0YTsNCj4gPiArICAgc3NpemVfdCByZXMsIGJ1Zl9zaXplOw0KPiA+ICsgICBpbnQg
aXNfZGVlcF9zbGVlcCwgYXV0b19kZWVwX3NsZWVwX3RpbWVvdXQ7DQo+ID4gKyAgIHVuc2lnbmVk
IGxvbmcgYWRkciA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsNCj4gPiArICAgY2hhciAq
YnVmID0gKGNoYXIgKilhZGRyOw0KPiA+ICsNCj4gPiArICAgaWYgKCFidWYpDQo+ID4gKyAgICAg
ICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsgICBpZiAoIXByaXYtPmVudGVyX2Rl
ZXBfc2xlZXApIHsNCj4gPiArICAgICAgICAgICBsYnNfcHJfZXJyKCJkZWVwIHNsZWVwIGZlYXR1
cmUgaXMgbm90IGltcGxlbWVudGVkICINCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImZvciB0aGlzIGludGVyZmFjZSBkcml2ZXJcbiIpOw0KPiA+ICsgICAgICAgICAgIHJlcyA9IC1F
SU5WQUw7DQo+ID4gKyAgICAgICAgICAgZ290byBvdXRfZHM7DQo+ID4gKyAgIH0NCj4gPiArDQo+
ID4gKyAgIGlmIChwcml2LT5jb25uZWN0X3N0YXR1cyA9PSBMQlNfQ09OTkVDVEVEKSB7DQo+ID4g
KyAgICAgICAgICAgbGJzX3ByX2VycigiY2FuJ3QgdXNlIGRlZXAgc2xlZXAgY21kIGluIGNvbm5l
Y3RlZCAiDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGF0ZVxuIik7DQo+ID4g
KyAgICAgICAgICAgcmVzID0gLUVJTlZBTDsNCj4gPiArICAgICAgICAgICBnb3RvIG91dF9kczsN
Cj4gPiArICAgfQ0KPiA+ICsNCj4gPiArICAgYnVmX3NpemUgPSBtaW4oY291bnQsIGxlbiAtIDEp
Ow0KPiA+ICsgICBpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyYnVmLCBidWZfc2l6ZSkpIHsN
Cj4gPiArICAgICAgICAgICByZXMgPSAtRUZBVUxUOw0KPiA+ICsgICAgICAgICAgIGdvdG8gb3V0
X2RzOw0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICsgICByZXMgPSBzc2NhbmYoYnVmLCAiJWQgJWQi
LCAmaXNfZGVlcF9zbGVlcCwgJmF1dG9fZGVlcF9zbGVlcF90aW1lb3V0KTsNCj4gPiArICAgaWYg
KChyZXMgIT0gMikgfHwgKCFpc19kZWVwX3NsZWVwICYmIGF1dG9fZGVlcF9zbGVlcF90aW1lb3V0
KSB8fA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoKGlzX2RlZXBf
c2xlZXAgPT0gMSkgfHwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
aXNfZGVlcF9zbGVlcCA9PSAwKSkpIHsNCj4gPiArICAgICAgICAgICBsYnNfcHJfZXJyKCJ1bmtu
b3duIG9wdGlvblxuIik7DQo+ID4gKyAgICAgICAgICAgcmVzID0gLUVJTlZBTDsNCj4gPiArICAg
ICAgICAgICBnb3RvIG91dF9kczsNCj4gPiArICAgfQ0KPiA+ICsNCj4gPiArICAgaWYgKGF1dG9f
ZGVlcF9zbGVlcF90aW1lb3V0KSB7DQo+ID4gKyAgICAgICAgICAgaWYgKCFwcml2LT5pc19hdXRv
X2RlZXBfc2xlZXBfZW5hYmxlZCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgcHJpdi0+aXNf
YWN0aXZpdHlfZGV0ZWN0ZWQgPSAwOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgcHJpdi0+YXV0
b19kZWVwX3NsZWVwX3RpbWVvdXQgPSBhdXRvX2RlZXBfc2xlZXBfdGltZW91dDsNCj4gPiArICAg
ICAgICAgICAgICAgICAgIGxic19lbnRlcl9hdXRvX2RlZXBfc2xlZXAocHJpdik7DQo+ID4gKyAg
ICAgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgICAgICAgIHByaXYtPmF1dG9fZGVl
cF9zbGVlcF90aW1lb3V0ID0gYXV0b19kZWVwX3NsZWVwX3RpbWVvdXQ7DQo+ID4gKyAgICAgICAg
ICAgICAgICAgICBsYnNfZGViX2RlYnVnZnMoImF1dG8gZGVlcCBzbGVlcDogYWxyZWFkeSBlbmFi
bGVkXG4iKTsNCj4gPiArICAgICAgICAgICB9DQo+ID4gKyAgIH0gZWxzZSB7DQo+ID4gKyAgICAg
ICAgICAgaWYgKHByaXYtPmlzX2F1dG9fZGVlcF9zbGVlcF9lbmFibGVkKSB7DQo+ID4gKyAgICAg
ICAgICAgICAgICAgICBsYnNfZXhpdF9hdXRvX2RlZXBfc2xlZXAocHJpdik7DQo+ID4gKyAgICAg
ICAgICAgICAgICAgICAvKiBUcnkgdG8gZXhpdCBkZWVwIHNsZWVwIGlmIGF1dG8gZGVlcCBzbGVl
cCBkaXNhYmxlZCAqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAgcmVzID0gbGJzX3NldF9kZWVw
X3NsZWVwKHByaXYsIDApOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgaWYgKHJlcykNCj4gPiAr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXRfZHM7DQo+ID4gKyAgICAgICAgICAg
fQ0KPiA+ICsgICAgICAgICAgIGlmICgoaXNfZGVlcF9zbGVlcCA9PSAwKSB8fCAoaXNfZGVlcF9z
bGVlcCA9PSAxKSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgcmVzID0gbGJzX3NldF9kZWVw
X3NsZWVwKHByaXYsIGlzX2RlZXBfc2xlZXApOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgaWYg
KHJlcykNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXRfZHM7DQo+ID4g
KyAgICAgICAgICAgfQ0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICsgICByZXMgPSBjb3VudDsNCj4g
PiArDQo+ID4gK291dF9kczoNCj4gPiArICAgZnJlZV9wYWdlKGFkZHIpOw0KPiA+ICsgICByZXR1
cm4gcmVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICAvKg0KPiA+ICAgKiBXaGVuIGNhbGxpbmcgQ01E
XzgwMl8xMV9TVUJTQ1JJQkVfRVZFTlQgd2l0aCBDTURfQUNUX0dFVCwgbWUgbWlnaHQNCj4gPiAg
ICogZ2V0IGEgYnVuY2ggb2YgdmVuZG9yLXNwZWNpZmljIFRMVnMgKGEuay5hLiBJRXMpIGJhY2sg
ZnJvbSB0aGUNCj4gPiBAQCAtMjIzLDYgKzM0NSw5IEBAIHN0YXRpYyBzc2l6ZV90IGxic190aHJl
c2hvbGRfcmVhZCh1aW50MTZfdCB0bHZfdHlwZSwgdWludDE2X3QgZXZlbnRfbWFzaywNCj4gPiAg
ICAgdTggZnJlcTsNCj4gPiAgICAgaW50IGV2ZW50cyA9IDA7DQo+ID4NCj4gPiArICAgaWYgKCFs
YnNfaXNfY21kX2FsbG93ZWQocHJpdikpDQo+ID4gKyAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsN
Cj4gPiArDQo+ID4gICAgIGJ1ZiA9IChjaGFyICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwp
Ow0KPiA+ICAgICBpZiAoIWJ1ZikNCj4gPiAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4g
PiBAQCAtMjc1LDYgKzQwMCw5IEBAIHN0YXRpYyBzc2l6ZV90IGxic190aHJlc2hvbGRfd3JpdGUo
dWludDE2X3QgdGx2X3R5cGUsIHVpbnQxNl90IGV2ZW50X21hc2ssDQo+ID4gICAgIGNoYXIgKmJ1
ZjsNCj4gPiAgICAgaW50IHJldDsNCj4gPg0KPiA+ICsgICBpZiAoIWxic19pc19jbWRfYWxsb3dl
ZChwcml2KSkNCj4gPiArICAgICAgICAgICByZXR1cm4gLUVCVVNZOw0KPiA+ICsNCj4gPiAgICAg
YnVmID0gKGNoYXIgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7DQo+ID4gICAgIGlmICgh
YnVmKQ0KPiA+ICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOw0KPiA+IEBAIC00NDQsNiArNTcy
LDExIEBAIHN0YXRpYyBzc2l6ZV90IGxic19yZG1hY19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBj
aGFyIF9fdXNlciAqdXNlcmJ1ZiwNCj4gPiAgICAgaWYgKCFidWYpDQo+ID4gICAgICAgICAgICAg
cmV0dXJuIC1FTk9NRU07DQo+ID4NCj4gPiArICAgaWYgKCFsYnNfaXNfY21kX2FsbG93ZWQocHJp
dikpIHsNCj4gPiArICAgICAgICAgICBmcmVlX3BhZ2UoYWRkcik7DQo+ID4gKyAgICAgICAgICAg
cmV0dXJuIC1FQlVTWTsNCj4gPiArICAgfQ0KPiA+ICsNCj4gPiAgICAgb2ZmdmFsLm9mZnNldCA9
IHByaXYtPm1hY19vZmZzZXQ7DQo+ID4gICAgIG9mZnZhbC52YWx1ZSA9IDA7DQo+ID4NCj4gPiBA
QCAtNDk2LDYgKzYyOSwxMSBAQCBzdGF0aWMgc3NpemVfdCBsYnNfd3JtYWNfd3JpdGUoc3RydWN0
IGZpbGUgKmZpbGUsDQo+ID4gICAgIGlmICghYnVmKQ0KPiA+ICAgICAgICAgICAgIHJldHVybiAt
RU5PTUVNOw0KPiA+DQo+ID4gKyAgIGlmICghbGJzX2lzX2NtZF9hbGxvd2VkKHByaXYpKSB7DQo+
ID4gKyAgICAgICAgICAgcmVzID0gLUVCVVNZOw0KPiA+ICsgICAgICAgICAgIGdvdG8gb3V0X3Vu
bG9jazsNCj4gPiArICAgfQ0KPiA+ICsNCj4gPiAgICAgYnVmX3NpemUgPSBtaW4oY291bnQsIGxl
biAtIDEpOw0KPiA+ICAgICBpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyYnVmLCBidWZfc2l6
ZSkpIHsNCj4gPiAgICAgICAgICAgICByZXMgPSAtRUZBVUxUOw0KPiA+IEBAIC01MzIsNiArNjcw
LDExIEBAIHN0YXRpYyBzc2l6ZV90IGxic19yZGJicF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBj
aGFyIF9fdXNlciAqdXNlcmJ1ZiwNCj4gPiAgICAgaWYgKCFidWYpDQo+ID4gICAgICAgICAgICAg
cmV0dXJuIC1FTk9NRU07DQo+ID4NCj4gPiArICAgaWYgKCFsYnNfaXNfY21kX2FsbG93ZWQocHJp
dikpIHsNCj4gPiArICAgICAgICAgICBmcmVlX3BhZ2UoYWRkcik7DQo+ID4gKyAgICAgICAgICAg
cmV0dXJuIC1FQlVTWTsNCj4gPiArICAgfQ0KPiA+ICsNCj4gPiAgICAgb2ZmdmFsLm9mZnNldCA9
IHByaXYtPmJicF9vZmZzZXQ7DQo+ID4gICAgIG9mZnZhbC52YWx1ZSA9IDA7DQo+ID4NCj4gPiBA
QCAtNTg1LDYgKzcyOCwxMSBAQCBzdGF0aWMgc3NpemVfdCBsYnNfd3JiYnBfd3JpdGUoc3RydWN0
IGZpbGUgKmZpbGUsDQo+ID4gICAgIGlmICghYnVmKQ0KPiA+ICAgICAgICAgICAgIHJldHVybiAt
RU5PTUVNOw0KPiA+DQo+ID4gKyAgIGlmICghbGJzX2lzX2NtZF9hbGxvd2VkKHByaXYpKSB7DQo+
ID4gKyAgICAgICAgICAgcmVzID0gLUVCVVNZOw0KPiA+ICsgICAgICAgICAgIGdvdG8gb3V0X3Vu
bG9jazsNCj4gPiArICAgfQ0KPiA+ICsNCj4gPiAgICAgYnVmX3NpemUgPSBtaW4oY291bnQsIGxl
biAtIDEpOw0KPiA+ICAgICBpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyYnVmLCBidWZfc2l6
ZSkpIHsNCj4gPiAgICAgICAgICAgICByZXMgPSAtRUZBVUxUOw0KPiA+IEBAIC02MjEsNiArNzY5
LDExIEBAIHN0YXRpYyBzc2l6ZV90IGxic19yZHJmX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNo
YXIgX191c2VyICp1c2VyYnVmLA0KPiA+ICAgICBpZiAoIWJ1ZikNCj4gPiAgICAgICAgICAgICBy
ZXR1cm4gLUVOT01FTTsNCj4gPg0KPiA+ICsgICBpZiAoIWxic19pc19jbWRfYWxsb3dlZChwcml2
KSkgew0KPiA+ICsgICAgICAgICAgIGZyZWVfcGFnZShhZGRyKTsNCj4gPiArICAgICAgICAgICBy
ZXR1cm4gLUVCVVNZOw0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICAgICBvZmZ2YWwub2Zmc2V0ID0g
cHJpdi0+cmZfb2Zmc2V0Ow0KPiA+ICAgICBvZmZ2YWwudmFsdWUgPSAwOw0KPiA+DQo+ID4gQEAg
LTY3NCw2ICs4MjcsMTEgQEAgc3RhdGljIHNzaXplX3QgbGJzX3dycmZfd3JpdGUoc3RydWN0IGZp
bGUgKmZpbGUsDQo+ID4gICAgIGlmICghYnVmKQ0KPiA+ICAgICAgICAgICAgIHJldHVybiAtRU5P
TUVNOw0KPiA+DQo+ID4gKyAgIGlmICghbGJzX2lzX2NtZF9hbGxvd2VkKHByaXYpKSB7DQo+ID4g
KyAgICAgICAgICAgcmVzID0gLUVCVVNZOw0KPiA+ICsgICAgICAgICAgIGdvdG8gb3V0X3VubG9j
azsNCj4gPiArICAgfQ0KPiA+ICsNCj4gPiAgICAgYnVmX3NpemUgPSBtaW4oY291bnQsIGxlbiAt
IDEpOw0KPiA+ICAgICBpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyYnVmLCBidWZfc2l6ZSkp
IHsNCj4gPiAgICAgICAgICAgICByZXMgPSAtRUZBVUxUOw0KPiA+IEBAIC03MTcsNiArODc1LDgg
QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX2ZpbGVzW10g
PSB7DQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVfZmlsZV9k
dW1teSksIH0sDQo+ID4gICAgIHsgInNsZWVwcGFyYW1zIiwgMDY0NCwgRk9QUyhsYnNfc2xlZXBw
YXJhbXNfcmVhZCwNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGJzX3NsZWVwcGFy
YW1zX3dyaXRlKSwgfSwNCj4gPiArICAgeyAiZGVlcHNsZWVwIiwgMDY0NCwgRk9QUyhsYnNfZGVl
cHNsZWVwX3JlYWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxic19kZWVwc2xl
ZXBfd3JpdGUpLCB9LA0KPiA+ICB9Ow0KPiA+DQo+ID4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbGJz
X2RlYnVnZnNfZmlsZXMgZGVidWdmc19ldmVudHNfZmlsZXNbXSA9IHsNCj4gPiBkaWZmIC0tZ2l0
IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVjbC5oIGIvZHJpdmVycy9uZXQvd2ly
ZWxlc3MvbGliZXJ0YXMvZGVjbC5oDQo+ID4gaW5kZXggMGI4NGJkYy4uMzRiNDc1ZiAxMDA2NDQN
Cj4gPiAtLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWNsLmgNCj4gPiArKysg
Yi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWNsLmgNCj4gPiBAQCAtMzMsNiArMzMs
MTAgQEAgaW50IGxic19leGVjdXRlX25leHRfY29tbWFuZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnBy
aXYpOw0KPiA+ICBpbnQgbGJzX3Byb2Nlc3NfZXZlbnQoc3RydWN0IGxic19wcml2YXRlICpwcml2
LCB1MzIgZXZlbnQpOw0KPiA+ICB2b2lkIGxic19xdWV1ZV9ldmVudChzdHJ1Y3QgbGJzX3ByaXZh
dGUgKnByaXYsIHUzMiBldmVudCk7DQo+ID4gIHZvaWQgbGJzX25vdGlmeV9jb21tYW5kX3Jlc3Bv
bnNlKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgdTggcmVzcF9pZHgpOw0KPiA+ICtpbnQgbGJz
X3NldF9kZWVwX3NsZWVwKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IGRlZXBfc2xlZXAp
Ow0KPiA+ICtpbnQgbGJzX2lzX2NtZF9hbGxvd2VkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdik7
DQo+ID4gK2ludCBsYnNfZW50ZXJfYXV0b19kZWVwX3NsZWVwKHN0cnVjdCBsYnNfcHJpdmF0ZSAq
cHJpdik7DQo+ID4gK2ludCBsYnNfZXhpdF9hdXRvX2RlZXBfc2xlZXAoc3RydWN0IGxic19wcml2
YXRlICpwcml2KTsNCj4gPg0KPiA+ICB1MzIgbGJzX2Z3X2luZGV4X3RvX2RhdGFfcmF0ZSh1OCBp
bmRleCk7DQo+ID4gIHU4IGxic19kYXRhX3JhdGVfdG9fZndfaW5kZXgodTMyIHJhdGUpOw0KPiA+
IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaCBiL2RyaXZl
cnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oDQo+ID4gaW5kZXggNTc4YzY5Ny4uZTJiNGVm
MiAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaA0K
PiA+ICsrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oDQo+ID4gQEAgLTEy
OSw2ICsxMjksMjAgQEAgc3RydWN0IGxic19wcml2YXRlIHsNCj4gPiAgICAgdTMyIGJicF9vZmZz
ZXQ7DQo+ID4gICAgIHUzMiByZl9vZmZzZXQ7DQo+ID4NCj4gPiArICAgLyoqIERlZXAgc2xlZXAg
ZmxhZyAqLw0KPiA+ICsgICBpbnQgaXNfZGVlcF9zbGVlcDsNCj4gPiArICAgLyoqIEF1dG8gZGVl
cCBzbGVlcCBlbmFibGVkIGZsYWcgKi8NCj4gPiArICAgaW50IGlzX2F1dG9fZGVlcF9zbGVlcF9l
bmFibGVkOw0KPiA+ICsgICAvKiogRGV2aWNlIHdha2V1cCByZXF1aXJlZCBmbGFnICovDQo+ID4g
KyAgIGludCB3YWtldXBfZGV2X3JlcXVpcmVkOw0KPiA+ICsgICAvKiogQXV0byBkZWVwIHNsZWVw
IGZsYWcqLw0KPiA+ICsgICBpbnQgaXNfYWN0aXZpdHlfZGV0ZWN0ZWQ7DQo+ID4gKyAgIC8qKiBB
dXRvIGRlZXAgc2xlZXAgdGltZW91dCAoaW4gbWlsaXNlY29uZHMpICovDQo+ID4gKyAgIGludCBh
dXRvX2RlZXBfc2xlZXBfdGltZW91dDsNCj4gPiArDQo+ID4gKyAgIC8qKiBEZWVwIHNsZWVwIHdh
aXQgcXVldWUgKi8NCj4gPiArICAgd2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgZHNfYXdha2VfcTsN
Cj4gPiArDQo+ID4gICAgIC8qIERvd25sb2FkIHNlbnQ6DQo+ID4gICAgICAgIGJpdDAgMS8wPWRh
dGFfc2VudC9kYXRhX3R4X2RvbmUsDQo+ID4gICAgICAgIGJpdDEgMS8wPWNtZF9zZW50L2NtZF90
eF9kb25lLA0KPiA+IEBAIC0xNTQsNiArMTY4LDkgQEAgc3RydWN0IGxic19wcml2YXRlIHsNCj4g
PiAgICAgLyoqIEhhcmR3YXJlIGFjY2VzcyAqLw0KPiA+ICAgICBpbnQgKCpod19ob3N0X3RvX2Nh
cmQpIChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHU4IHR5cGUsIHU4ICpwYXlsb2FkLCB1MTYg
bmIpOw0KPiA+ICAgICB2b2lkICgqcmVzZXRfY2FyZCkgKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJp
dik7DQo+ID4gKyAgIGludCAoKmVudGVyX2RlZXBfc2xlZXApIChzdHJ1Y3QgbGJzX3ByaXZhdGUg
KnByaXYpOw0KPiA+ICsgICBpbnQgKCpleGl0X2RlZXBfc2xlZXApIChzdHJ1Y3QgbGJzX3ByaXZh
dGUgKnByaXYpOw0KPiA+ICsgICBpbnQgKCpyZXNldF9kZWVwX3NsZWVwX3dha2V1cCkgKHN0cnVj
dCBsYnNfcHJpdmF0ZSAqcHJpdik7DQo+ID4NCj4gPiAgICAgLyogV2FrZSBPbiBMQU4gKi8NCj4g
PiAgICAgdWludDMyX3Qgd29sX2NyaXRlcmlhOw0KPiA+IEBAIC0yMDQsNiArMjIxLDcgQEAgc3Ry
dWN0IGxic19wcml2YXRlIHsNCj4gPg0KPiA+ICAgICAvKiogVGltZXJzICovDQo+ID4gICAgIHN0
cnVjdCB0aW1lcl9saXN0IGNvbW1hbmRfdGltZXI7DQo+ID4gKyAgIHN0cnVjdCB0aW1lcl9saXN0
IGF1dG9fZGVlcHNsZWVwX3RpbWVyOw0KPiA+ICAgICBpbnQgbnJfcmV0cmllczsNCj4gPiAgICAg
aW50IGNtZF90aW1lZF9vdXQ7DQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ly
ZWxlc3MvbGliZXJ0YXMvaG9zdC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9z
dC5oDQo+ID4gaW5kZXggZmU4ZjBjYi4uYzA1NWRhYSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJz
L25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0LmgNCj4gPiArKysgYi9kcml2ZXJzL25ldC93aXJl
bGVzcy9saWJlcnRhcy9ob3N0LmgNCj4gPiBAQCAtNTcsNiArNTcsNyBAQA0KPiA+ICAjZGVmaW5l
IENNRF84MDJfMTFfRU5BQkxFX1JTTiAgICAgICAgICAgICAgICAgICAgICAweDAwMmYNCj4gPiAg
I2RlZmluZSBDTURfODAyXzExX1NFVF9BRkMgICAgICAgICAgICAgICAgIDB4MDAzYw0KPiA+ICAj
ZGVmaW5lIENNRF84MDJfMTFfR0VUX0FGQyAgICAgICAgICAgICAgICAgMHgwMDNkDQo+ID4gKyNk
ZWZpbmUgQ01EXzgwMl8xMV9ERUVQX1NMRUVQICAgICAgICAgICAgICAgICAgMHgwMDNlDQo+ID4g
ICNkZWZpbmUgQ01EXzgwMl8xMV9BRF9IT0NfU1RPUCAgICAgICAgICAgICAgICAgICAgIDB4MDA0
MA0KPiA+ICAjZGVmaW5lIENNRF84MDJfMTFfSE9TVF9TTEVFUF9DRkcgICAgICAgICAgMHgwMDQz
DQo+ID4gICNkZWZpbmUgQ01EXzgwMl8xMV9XQUtFVVBfQ09ORklSTSAgICAgICAgICAweDAwNDQN
Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYyBi
L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMNCj4gPiBpbmRleCA2MjM4MTc2
Li40NjU3NDJmIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFz
L2lmX2NzLmMNCj4gPiArKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5j
DQo+ID4gQEAgLTk0Niw2ICs5NDYsOSBAQCBzdGF0aWMgaW50IGlmX2NzX3Byb2JlKHN0cnVjdCBw
Y21jaWFfZGV2aWNlICpwX2RldikNCj4gPiAgICAgY2FyZC0+cHJpdiA9IHByaXY7DQo+ID4gICAg
IHByaXYtPmNhcmQgPSBjYXJkOw0KPiA+ICAgICBwcml2LT5od19ob3N0X3RvX2NhcmQgPSBpZl9j
c19ob3N0X3RvX2NhcmQ7DQo+ID4gKyAgIHByaXYtPmVudGVyX2RlZXBfc2xlZXAgPSBOVUxMOw0K
PiA+ICsgICBwcml2LT5leGl0X2RlZXBfc2xlZXAgPSBOVUxMOw0KPiA+ICsgICBwcml2LT5yZXNl
dF9kZWVwX3NsZWVwX3dha2V1cCA9IE5VTEw7DQo+ID4gICAgIHByaXYtPmZ3X3JlYWR5ID0gMTsN
Cj4gPg0KPiA+ICAgICAvKiBOb3cgYWN0dWFsbHkgZ2V0IHRoZSBJUlEgKi8NCj4gPiBkaWZmIC0t
Z2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jIGIvZHJpdmVycy9u
ZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jDQo+ID4gaW5kZXggNDg1YThkNC4uOTcxNjcy
OCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlv
LmMNCj4gPiArKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMNCj4g
PiBAQCAtODMxLDYgKzgzMSw1OCBAQCBvdXQ6DQo+ID4gICAgIHJldHVybiByZXQ7DQo+ID4gIH0N
Cj4gPg0KPiA+ICtzdGF0aWMgaW50IGlmX3NkaW9fZW50ZXJfZGVlcF9zbGVlcChzdHJ1Y3QgbGJz
X3ByaXZhdGUgKnByaXYpDQo+ID4gK3sNCj4gPiArICAgaW50IHJldCA9IC0xOw0KPiA+ICsgICBz
dHJ1Y3QgY21kX2hlYWRlciBjbWQ7DQo+ID4gKw0KPiA+ICsgICBtZW1zZXQoJmNtZCwgMCwgc2l6
ZW9mKGNtZCkpOw0KPiA+ICsNCj4gPiArICAgbGJzX2RlYl9zZGlvKCJzZW5kIERFRVBfU0xFRVAg
Y29tbWFuZFxuIik7DQo+ID4gKyAgIHJldCA9IF9fbGJzX2NtZChwcml2LCBDTURfODAyXzExX0RF
RVBfU0xFRVAsICZjbWQsIHNpemVvZihjbWQpLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgbGJz
X2NtZF9jb3B5YmFjaywgKHVuc2lnbmVkIGxvbmcpICZjbWQpOw0KPiA+ICsgICBpZiAocmV0KQ0K
PiA+ICsgICAgICAgICAgIGxic19wcl9lcnIoIkRFRVBfU0xFRVAgY21kIGZhaWxlZFxuIik7DQo+
ID4gKw0KPiA+ICsgICBtZGVsYXkoMjAwKTsNCj4gPiArICAgcmV0dXJuIHJldDsNCj4gPiArfQ0K
PiA+ICsNCj4gPiArc3RhdGljIGludCBpZl9zZGlvX2V4aXRfZGVlcF9zbGVlcChzdHJ1Y3QgbGJz
X3ByaXZhdGUgKnByaXYpDQo+ID4gK3sNCj4gPiArICAgc3RydWN0IGlmX3NkaW9fY2FyZCAqY2Fy
ZCA9IHByaXYtPmNhcmQ7DQo+ID4gKyAgIGludCByZXQgPSAtMTsNCj4gPiArDQo+ID4gKyAgIGxi
c19kZWJfZW50ZXIoTEJTX0RFQl9TRElPKTsNCj4gPiArICAgc2Rpb19jbGFpbV9ob3N0KGNhcmQt
PmZ1bmMpOw0KPiA+ICsNCj4gPiArICAgc2Rpb193cml0ZWIoY2FyZC0+ZnVuYywgSE9TVF9QT1dF
Ul9VUCwgQ09ORklHVVJBVElPTl9SRUcsICZyZXQpOw0KPiA+ICsgICBpZiAocmV0KQ0KPiA+ICsg
ICAgICAgICAgIGxic19wcl9lcnIoInNkaW9fd3JpdGViIGZhaWxlZCFcbiIpOw0KPiA+ICsNCj4g
PiArICAgc2Rpb19yZWxlYXNlX2hvc3QoY2FyZC0+ZnVuYyk7DQo+ID4gKyAgIGxic19kZWJfbGVh
dmVfYXJncyhMQlNfREVCX1NESU8sICJyZXQgJWQiLCByZXQpOw0KPiA+ICsgICByZXR1cm4gcmV0
Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGlmX3NkaW9fcmVzZXRfZGVlcF9zbGVl
cF93YWtldXAoc3RydWN0IGxic19wcml2YXRlICpwcml2KQ0KPiA+ICt7DQo+ID4gKyAgIHN0cnVj
dCBpZl9zZGlvX2NhcmQgKmNhcmQgPSBwcml2LT5jYXJkOw0KPiA+ICsgICBpbnQgcmV0ID0gLTE7
DQo+ID4gKw0KPiA+ICsgICBsYnNfZGViX2VudGVyKExCU19ERUJfU0RJTyk7DQo+ID4gKyAgIHNk
aW9fY2xhaW1faG9zdChjYXJkLT5mdW5jKTsNCj4gPiArDQo+ID4gKyAgIHNkaW9fd3JpdGViKGNh
cmQtPmZ1bmMsIDAsIENPTkZJR1VSQVRJT05fUkVHLCAmcmV0KTsNCj4gPiArICAgaWYgKHJldCkN
Cj4gPiArICAgICAgICAgICBsYnNfcHJfZXJyKCJzZGlvX3dyaXRlYiBmYWlsZWQhXG4iKTsNCj4g
PiArDQo+ID4gKyAgIHNkaW9fcmVsZWFzZV9ob3N0KGNhcmQtPmZ1bmMpOw0KPiA+ICsgICBsYnNf
ZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TRElPLCAicmV0ICVkIiwgcmV0KTsNCj4gPiArICAgcmV0
dXJuIHJldDsNCj4gPiArDQo+ID4gK30NCj4gPiArDQo+ID4gIC8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KPiA+ICAv
KiBTRElPIGNhbGxiYWNrcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKi8NCj4gPiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQo+ID4gQEAgLTg1OSw2ICs5MTEsNyBAQCBz
dGF0aWMgdm9pZCBpZl9zZGlvX2ludGVycnVwdChzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKQ0KPiA+
ICAgICAgKiBJZ25vcmUgdGhlIGRlZmluZSBuYW1lLCB0aGlzIHJlYWxseSBtZWFucyB0aGUgY2Fy
ZCBoYXMNCj4gPiAgICAgICogc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIHRoZSBjb21tYW5kLg0KPiA+
ICAgICAgKi8NCj4gPiArICAgY2FyZC0+cHJpdi0+aXNfYWN0aXZpdHlfZGV0ZWN0ZWQgPSAxOw0K
PiA+ICAgICBpZiAoY2F1c2UgJiBJRl9TRElPX0hfSU5UX0ROTEQpDQo+ID4gICAgICAgICAgICAg
bGJzX2hvc3RfdG9fY2FyZF9kb25lKGNhcmQtPnByaXYpOw0KPiA+DQo+ID4gQEAgLTk5OCw2ICsx
MDUxLDkgQEAgc3RhdGljIGludCBpZl9zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMs
DQo+ID4NCj4gPiAgICAgcHJpdi0+Y2FyZCA9IGNhcmQ7DQo+ID4gICAgIHByaXYtPmh3X2hvc3Rf
dG9fY2FyZCA9IGlmX3NkaW9faG9zdF90b19jYXJkOw0KPiA+ICsgICBwcml2LT5lbnRlcl9kZWVw
X3NsZWVwID0gaWZfc2Rpb19lbnRlcl9kZWVwX3NsZWVwOw0KPiA+ICsgICBwcml2LT5leGl0X2Rl
ZXBfc2xlZXAgPSBpZl9zZGlvX2V4aXRfZGVlcF9zbGVlcDsNCj4gPiArICAgcHJpdi0+cmVzZXRf
ZGVlcF9zbGVlcF93YWtldXAgPSBpZl9zZGlvX3Jlc2V0X2RlZXBfc2xlZXBfd2FrZXVwOw0KPiA+
DQo+ID4gICAgIHByaXYtPmZ3X3JlYWR5ID0gMTsNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9kcml2
ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmggYi9kcml2ZXJzL25ldC93aXJlbGVz
cy9saWJlcnRhcy9pZl9zZGlvLmgNCj4gPiBpbmRleCA2MGM5YjJmLi4xMjE3OWMxIDEwMDY0NA0K
PiA+IC0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uaA0KPiA+ICsr
KyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uaA0KPiA+IEBAIC01MSw1
ICs1MSw2IEBADQo+ID4gICNkZWZpbmUgSUZfU0RJT19FVkVOVCAgICAgICAgICAgMHg4MGZjDQo+
ID4NCj4gPiAgI2RlZmluZSBJRl9TRElPX0JMT0NLX1NJWkUgMjU2DQo+ID4gLQ0KPiA+ICsjZGVm
aW5lIENPTkZJR1VSQVRJT05fUkVHICAgICAgICAgICAgICAgMHgwMw0KPiA+ICsjZGVmaW5lIEhP
U1RfUE9XRVJfVVAgICAgICAgICAgICAgICAgICAgKDB4MVUgPDwgMSkNCj4gPiAgI2VuZGlmDQo+
ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jIGIv
ZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMNCj4gPiBpbmRleCA0NDZlMzI3
Li5lMmZhNjU3IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFz
L2lmX3NwaS5jDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3Bp
LmMNCj4gPiBAQCAtMTExNyw2ICsxMTE3LDkgQEAgc3RhdGljIGludCBfX2RldmluaXQgaWZfc3Bp
X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpDQo+ID4gICAgIGNhcmQtPnByaXYgPSBwcml2
Ow0KPiA+ICAgICBwcml2LT5jYXJkID0gY2FyZDsNCj4gPiAgICAgcHJpdi0+aHdfaG9zdF90b19j
YXJkID0gaWZfc3BpX2hvc3RfdG9fY2FyZDsNCj4gPiArICAgcHJpdi0+ZW50ZXJfZGVlcF9zbGVl
cCA9IE5VTEw7DQo+ID4gKyAgIHByaXYtPmV4aXRfZGVlcF9zbGVlcCA9IE5VTEw7DQo+ID4gKyAg
IHByaXYtPnJlc2V0X2RlZXBfc2xlZXBfd2FrZXVwID0gTlVMTDsNCj4gPiAgICAgcHJpdi0+Zndf
cmVhZHkgPSAxOw0KPiA+DQo+ID4gICAgIC8qIEluaXRpYWxpemUgaW50ZXJydXB0IGhhbmRsaW5n
IHN0dWZmLiAqLw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRh
cy9pZl91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3VzYi5jDQo+ID4g
aW5kZXggOTJiYzhjNS4uYTgyNjJkZSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL25ldC93aXJl
bGVzcy9saWJlcnRhcy9pZl91c2IuYw0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xp
YmVydGFzL2lmX3VzYi5jDQo+ID4gQEAgLTMwMCw2ICszMDAsOSBAQCBzdGF0aWMgaW50IGlmX3Vz
Yl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwNCj4gPiAgICAgY2FyZHAtPnByaXYt
PmZ3X3JlYWR5ID0gMTsNCj4gPg0KPiA+ICAgICBwcml2LT5od19ob3N0X3RvX2NhcmQgPSBpZl91
c2JfaG9zdF90b19jYXJkOw0KPiA+ICsgICBwcml2LT5lbnRlcl9kZWVwX3NsZWVwID0gTlVMTDsN
Cj4gPiArICAgcHJpdi0+ZXhpdF9kZWVwX3NsZWVwID0gTlVMTDsNCj4gPiArICAgcHJpdi0+cmVz
ZXRfZGVlcF9zbGVlcF93YWtldXAgPSBOVUxMOw0KPiA+ICAjaWZkZWYgQ09ORklHX09MUEMNCj4g
PiAgICAgaWYgKG1hY2hpbmVfaXNfb2xwYygpKQ0KPiA+ICAgICAgICAgICAgIHByaXYtPnJlc2V0
X2NhcmQgPSBpZl91c2JfcmVzZXRfb2xwY19jYXJkOw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz
L25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJl
cnRhcy9tYWluLmMNCj4gPiBpbmRleCA4ZGYxY2ZkLi4zYjE0ZmNjIDEwMDY0NA0KPiA+IC0tLSBh
L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYw0KPiA+ICsrKyBiL2RyaXZlcnMv
bmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYw0KPiA+IEBAIC01NzQsOCArNTc0LDEwIEBAIHZv
aWQgbGJzX2hvc3RfdG9fY2FyZF9kb25lKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikNCj4gPiAg
ICAgcHJpdi0+ZG5sZF9zZW50ID0gRE5MRF9SRVNfUkVDRUlWRUQ7DQo+ID4NCj4gPiAgICAgLyog
V2FrZSBtYWluIHRocmVhZCBpZiBjb21tYW5kcyBhcmUgcGVuZGluZyAqLw0KPiA+IC0gICBpZiAo
IXByaXYtPmN1cl9jbWQgfHwgcHJpdi0+dHhfcGVuZGluZ19sZW4gPiAwKQ0KPiA+IC0gICAgICAg
ICAgIHdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdHEpOw0KPiA+ICsgICBpZiAoIXBy
aXYtPmN1cl9jbWQgfHwgcHJpdi0+dHhfcGVuZGluZ19sZW4gPiAwKSB7DQo+ID4gKyAgICAgICAg
ICAgaWYgKCFwcml2LT53YWtldXBfZGV2X3JlcXVpcmVkKQ0KPiA+ICsgICAgICAgICAgICAgICAg
ICAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0cSk7DQo+ID4gKyAgIH0NCj4gPg0K
PiA+ICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3Mp
Ow0KPiA+ICAgICBsYnNfZGViX2xlYXZlKExCU19ERUJfVEhSRUFEKTsNCj4gPiBAQCAtNzcwLDcg
Kzc3Miw4IEBAIHN0YXRpYyBpbnQgbGJzX3RocmVhZCh2b2lkICpkYXRhKQ0KPiA+ICAgICAgICAg
ICAgICAgICAgICAgc2hvdWxkc2xlZXAgPSAwOyAgICAgICAgLyogV2UgaGF2ZSBhIGNvbW1hbmQg
cmVzcG9uc2UgKi8NCj4gPiAgICAgICAgICAgICBlbHNlIGlmIChwcml2LT5jdXJfY21kKQ0KPiA+
ICAgICAgICAgICAgICAgICAgICAgc2hvdWxkc2xlZXAgPSAxOyAgICAgICAgLyogQ2FuJ3Qgc2Vu
ZCBhIGNvbW1hbmQ7IG9uZSBhbHJlYWR5IHJ1bm5pbmcgKi8NCj4gPiAtICAgICAgICAgICBlbHNl
IGlmICghbGlzdF9lbXB0eSgmcHJpdi0+Y21kcGVuZGluZ3EpKQ0KPiA+ICsgICAgICAgICAgIGVs
c2UgaWYgKCFsaXN0X2VtcHR5KCZwcml2LT5jbWRwZW5kaW5ncSkgJiYNCj4gPiArICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAhKHByaXYtPndha2V1cF9kZXZfcmVxdWlyZWQpKQ0K
PiA+ICAgICAgICAgICAgICAgICAgICAgc2hvdWxkc2xlZXAgPSAwOyAgICAgICAgLyogV2UgaGF2
ZSBhIGNvbW1hbmQgdG8gc2VuZCAqLw0KPiA+ICAgICAgICAgICAgIGVsc2UgaWYgKF9fa2ZpZm9f
bGVuKHByaXYtPmV2ZW50X2ZpZm8pKQ0KPiA+ICAgICAgICAgICAgICAgICAgICAgc2hvdWxkc2xl
ZXAgPSAwOyAgICAgICAgLyogV2UgaGF2ZSBhbiBldmVudCB0byBwcm9jZXNzICovDQo+ID4gQEAg
LTgyMiw2ICs4MjUsMjYgQEAgc3RhdGljIGludCBsYnNfdGhyZWFkKHZvaWQgKmRhdGEpDQo+ID4g
ICAgICAgICAgICAgfQ0KPiA+ICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcHJpdi0+ZHJp
dmVyX2xvY2spOw0KPiA+DQo+ID4gKyAgICAgICAgICAgLyogUHJvY2VzcyBoYXJkd2FyZSBldmVu
dHMsIGUuZy4gY2FyZCByZW1vdmVkLCBsaW5rIGxvc3QgKi8NCj4gPiArICAgICAgICAgICBzcGlu
X2xvY2tfaXJxKCZwcml2LT5kcml2ZXJfbG9jayk7DQo+ID4gKyAgICAgICAgICAgd2hpbGUgKF9f
a2ZpZm9fbGVuKHByaXYtPmV2ZW50X2ZpZm8pKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICB1
MzIgZXZlbnQ7DQo+ID4gKyAgICAgICAgICAgICAgICAgICBfX2tmaWZvX2dldChwcml2LT5ldmVu
dF9maWZvLCAodW5zaWduZWQgY2hhciAqKSAmZXZlbnQsDQo+ID4gKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVvZihldmVudCkpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgc3Bpbl91
bmxvY2tfaXJxKCZwcml2LT5kcml2ZXJfbG9jayk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICBs
YnNfcHJvY2Vzc19ldmVudChwcml2LCBldmVudCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICBz
cGluX2xvY2tfaXJxKCZwcml2LT5kcml2ZXJfbG9jayk7DQo+ID4gKyAgICAgICAgICAgfQ0KPiA+
ICsgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcHJpdi0+ZHJpdmVyX2xvY2spOw0KPiA+ICsN
Cj4gPiArICAgICAgICAgICBpZiAocHJpdi0+d2FrZXVwX2Rldl9yZXF1aXJlZCkgew0KPiA+ICsg
ICAgICAgICAgICAgICAgICAgbGJzX2RlYl90aHJlYWQoIldha2luZyB1cCBkZXZpY2UuLi5cbiIp
Ow0KPiA+ICsgICAgICAgICAgICAgICAgICAgLyogV2FrZSB1cCBkZXZpY2UgKi8NCj4gPiArICAg
ICAgICAgICAgICAgICAgIGlmIChwcml2LT5leGl0X2RlZXBfc2xlZXAocHJpdikpDQo+ID4gKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxic19kZWJfdGhyZWFkKCJXYWtldXAgZGV2aWNlIGZh
aWxlZFxuIik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4gPiArICAgICAg
ICAgICB9DQo+ID4gKw0KPiA+ICAgICAgICAgICAgIC8qIGNvbW1hbmQgdGltZW91dCBzdHVmZiAq
Lw0KPiA+ICAgICAgICAgICAgIGlmIChwcml2LT5jbWRfdGltZWRfb3V0ICYmIHByaXYtPmN1cl9j
bWQpIHsNCj4gPiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRu
b2RlID0gcHJpdi0+Y3VyX2NtZDsNCj4gPiBAQCAtODQ5LDE4ICs4NzIsNyBAQCBzdGF0aWMgaW50
IGxic190aHJlYWQodm9pZCAqZGF0YSkNCj4gPiAgICAgICAgICAgICB9DQo+ID4gICAgICAgICAg
ICAgcHJpdi0+Y21kX3RpbWVkX291dCA9IDA7DQo+ID4NCj4gPiAtICAgICAgICAgICAvKiBQcm9j
ZXNzIGhhcmR3YXJlIGV2ZW50cywgZS5nLiBjYXJkIHJlbW92ZWQsIGxpbmsgbG9zdCAqLw0KPiA+
IC0gICAgICAgICAgIHNwaW5fbG9ja19pcnEoJnByaXYtPmRyaXZlcl9sb2NrKTsNCj4gPiAtICAg
ICAgICAgICB3aGlsZSAoX19rZmlmb19sZW4ocHJpdi0+ZXZlbnRfZmlmbykpIHsNCj4gPiAtICAg
ICAgICAgICAgICAgICAgIHUzMiBldmVudDsNCj4gPg0KPiA+IC0gICAgICAgICAgICAgICAgICAg
X19rZmlmb19nZXQocHJpdi0+ZXZlbnRfZmlmbywgKHVuc2lnbmVkIGNoYXIgKikgJmV2ZW50LA0K
PiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZXZlbnQpKTsNCj4gPiAtICAg
ICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycSgmcHJpdi0+ZHJpdmVyX2xvY2spOw0KPiA+
IC0gICAgICAgICAgICAgICAgICAgbGJzX3Byb2Nlc3NfZXZlbnQocHJpdiwgZXZlbnQpOw0KPiA+
IC0gICAgICAgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycSgmcHJpdi0+ZHJpdmVyX2xvY2spOw0K
PiA+IC0gICAgICAgICAgIH0NCj4gPiAtICAgICAgICAgICBzcGluX3VubG9ja19pcnEoJnByaXYt
PmRyaXZlcl9sb2NrKTsNCj4gPg0KPiA+ICAgICAgICAgICAgIGlmICghcHJpdi0+ZndfcmVhZHkp
DQo+ID4gICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4gPiBAQCAtODk0LDYgKzkwNiw5
IEBAIHN0YXRpYyBpbnQgbGJzX3RocmVhZCh2b2lkICpkYXRhKQ0KPiA+ICAgICAgICAgICAgICAg
ICAocHJpdi0+cHNzdGF0ZSA9PSBQU19TVEFURV9QUkVfU0xFRVApKQ0KPiA+ICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7DQo+ID4NCj4gPiArICAgICAgICAgICBpZiAocHJpdi0+aXNfZGVl
cF9zbGVlcCkNCj4gPiArICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsNCj4gPiAg
ICAgICAgICAgICAvKiBFeGVjdXRlIHRoZSBuZXh0IGNvbW1hbmQgKi8NCj4gPiAgICAgICAgICAg
ICBpZiAoIXByaXYtPmRubGRfc2VudCAmJiAhcHJpdi0+Y3VyX2NtZCkNCj4gPiAgICAgICAgICAg
ICAgICAgICAgIGxic19leGVjdXRlX25leHRfY29tbWFuZChwcml2KTsNCj4gPiBAQCAtOTI4LDYg
Kzk0Myw3IEBAIHN0YXRpYyBpbnQgbGJzX3RocmVhZCh2b2lkICpkYXRhKQ0KPiA+ICAgICB9DQo+
ID4NCj4gPiAgICAgZGVsX3RpbWVyKCZwcml2LT5jb21tYW5kX3RpbWVyKTsNCj4gPiArICAgZGVs
X3RpbWVyKCZwcml2LT5hdXRvX2RlZXBzbGVlcF90aW1lcik7DQo+ID4gICAgIHdha2VfdXBfYWxs
KCZwcml2LT5jbWRfcGVuZGluZyk7DQo+ID4NCj4gPiAgICAgbGJzX2RlYl9sZWF2ZShMQlNfREVC
X1RIUkVBRCk7DQo+ID4gQEAgLTEwNTAsNiArMTA2Niw2MCBAQCBvdXQ6DQo+ID4gICAgIGxic19k
ZWJfbGVhdmUoTEJTX0RFQl9DTUQpOw0KPiA+ICB9DQo+ID4NCj4gPiArLyoqDQo+ID4gKyAqICBU
aGlzIGZ1bmN0aW9uIHB1dCB0aGUgZGV2aWNlIGJhY2sgdG8gZGVlcCBzbGVlcCBtb2RlIHdoZW4g
dGltZXIgZXhwaXJlcw0KPiA+ICsgKiAgYW5kIG5vIGFjdGl2aXR5IChjb21tYW5kLCBldmVudCwg
ZGF0YSBldGMuKSBpcyBkZXRlY3RlZC4NCj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lkIGF1dG9f
ZGVlcHNsZWVwX3RpbWVyX2ZuKHVuc2lnbmVkIGxvbmcgZGF0YSkNCj4gPiArew0KPiA+ICsgICBz
dHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSAoc3RydWN0IGxic19wcml2YXRlICopZGF0YTsNCj4g
PiArICAgaW50IHJldDsNCj4gPiArDQo+ID4gKyAgIGxic19kZWJfZW50ZXIoTEJTX0RFQl9DTUQp
Ow0KPiA+ICsNCj4gPiArICAgaWYgKHByaXYtPmlzX2FjdGl2aXR5X2RldGVjdGVkKSB7DQo+ID4g
KyAgICAgICAgICAgcHJpdi0+aXNfYWN0aXZpdHlfZGV0ZWN0ZWQgPSAwOw0KPiA+ICsgICB9IGVs
c2Ugew0KPiA+ICsgICAgICAgICAgIGlmIChwcml2LT5pc19hdXRvX2RlZXBfc2xlZXBfZW5hYmxl
ZCAmJg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAoIXByaXYtPndha2V1cF9kZXZf
cmVxdWlyZWQpICYmDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcml2LT5jb25u
ZWN0X3N0YXR1cyAhPSBMQlNfQ09OTkVDVEVEKSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAg
bGJzX2RlYl9tYWluKCJFbnRlcmluZyBhdXRvIGRlZXAgc2xlZXAgbW9kZS4uLlxuIik7DQo+ID4g
KyAgICAgICAgICAgICAgICAgICByZXQgPSBsYnNfcHJlcGFyZV9hbmRfc2VuZF9jb21tYW5kKHBy
aXYsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ01EXzgwMl8xMV9E
RUVQX1NMRUVQLCAwLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IDAsIE5VTEwpOw0KPiA+ICsgICAgICAgICAgIH0NCj4gPiArICAgfQ0KPiA+ICsgICBtb2RfdGlt
ZXIoJnByaXYtPmF1dG9fZGVlcHNsZWVwX3RpbWVyICwgamlmZmllcyArDQo+ID4gKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChwcml2LT5hdXRvX2RlZXBfc2xlZXBfdGltZW91dCAqIEhaKS8x
MDAwKTsNCj4gPiArICAgbGJzX2RlYl9sZWF2ZShMQlNfREVCX0NNRCk7DQo+ID4gK30NCj4gPiAr
DQo+ID4gK2ludCBsYnNfZW50ZXJfYXV0b19kZWVwX3NsZWVwKHN0cnVjdCBsYnNfcHJpdmF0ZSAq
cHJpdikNCj4gPiArew0KPiA+ICsgICBsYnNfZGViX2VudGVyKExCU19ERUJfU0RJTyk7DQo+ID4g
Kw0KPiA+ICsgICBwcml2LT5pc19hdXRvX2RlZXBfc2xlZXBfZW5hYmxlZCA9IDE7DQo+ID4gKyAg
IGlmIChwcml2LT5pc19kZWVwX3NsZWVwKQ0KPiA+ICsgICAgICAgICAgIHByaXYtPndha2V1cF9k
ZXZfcmVxdWlyZWQgPSAxOw0KPiA+ICsgICBtb2RfdGltZXIoJnByaXYtPmF1dG9fZGVlcHNsZWVw
X3RpbWVyICwNCj4gPiArICAgICAgICAgICAgICAgICAgIGppZmZpZXMgKyAocHJpdi0+YXV0b19k
ZWVwX3NsZWVwX3RpbWVvdXQgKiBIWikvMTAwMCk7DQo+ID4gKw0KPiA+ICsgICBsYnNfZGViX2xl
YXZlKExCU19ERUJfU0RJTyk7DQo+ID4gKyAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+
ICtpbnQgbGJzX2V4aXRfYXV0b19kZWVwX3NsZWVwKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikN
Cj4gPiArew0KPiA+ICsgICBsYnNfZGViX2VudGVyKExCU19ERUJfU0RJTyk7DQo+ID4gKw0KPiA+
ICsgICBwcml2LT5pc19hdXRvX2RlZXBfc2xlZXBfZW5hYmxlZCA9IDA7DQo+ID4gKyAgIHByaXYt
PmF1dG9fZGVlcF9zbGVlcF90aW1lb3V0ID0gMDsNCj4gPiArICAgZGVsX3RpbWVyKCZwcml2LT5h
dXRvX2RlZXBzbGVlcF90aW1lcik7DQo+ID4gKw0KPiA+ICsgICBsYnNfZGViX2xlYXZlKExCU19E
RUJfU0RJTyk7DQo+ID4gKyAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICBzdGF0aWMg
dm9pZCBsYnNfc3luY19jaGFubmVsX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQo+
ID4gIHsNCj4gPiAgICAgc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKHdv
cmssIHN0cnVjdCBsYnNfcHJpdmF0ZSwNCj4gPiBAQCAtMTA5OSwxMSArMTE2OSwxNyBAQCBzdGF0
aWMgaW50IGxic19pbml0X2FkYXB0ZXIoc3RydWN0IGxic19wcml2YXRlICpwcml2KQ0KPiA+ICAg
ICBwcml2LT5jYXBhYmlsaXR5ID0gV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFOw0KPiA+
ICAgICBwcml2LT5wc21vZGUgPSBMQlM4MDJfMTFQT1dFUk1PREVDQU07DQo+ID4gICAgIHByaXYt
PnBzc3RhdGUgPSBQU19TVEFURV9GVUxMX1BPV0VSOw0KPiA+ICsgICBwcml2LT5pc19kZWVwX3Ns
ZWVwID0gMDsNCj4gPiArICAgcHJpdi0+aXNfYXV0b19kZWVwX3NsZWVwX2VuYWJsZWQgPSAwOw0K
PiA+ICsgICBwcml2LT53YWtldXBfZGV2X3JlcXVpcmVkID0gMDsNCj4gPiArICAgaW5pdF93YWl0
cXVldWVfaGVhZCgmcHJpdi0+ZHNfYXdha2VfcSk7DQo+ID4NCj4gPiAgICAgbXV0ZXhfaW5pdCgm
cHJpdi0+bG9jayk7DQo+ID4NCj4gPiAgICAgc2V0dXBfdGltZXIoJnByaXYtPmNvbW1hbmRfdGlt
ZXIsIGNvbW1hbmRfdGltZXJfZm4sDQo+ID4gICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpcHJp
dik7DQo+ID4gKyAgIHNldHVwX3RpbWVyKCZwcml2LT5hdXRvX2RlZXBzbGVlcF90aW1lciwgYXV0
b19kZWVwc2xlZXBfdGltZXJfZm4sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAodW5zaWduZWQg
bG9uZylwcml2KTsNCj4gPg0KPiA+ICAgICBJTklUX0xJU1RfSEVBRCgmcHJpdi0+Y21kZnJlZXEp
Ow0KPiA+ICAgICBJTklUX0xJU1RfSEVBRCgmcHJpdi0+Y21kcGVuZGluZ3EpOw0KPiA+IEBAIC0x
MTQyLDYgKzEyMTgsNyBAQCBzdGF0aWMgdm9pZCBsYnNfZnJlZV9hZGFwdGVyKHN0cnVjdCBsYnNf
cHJpdmF0ZSAqcHJpdikNCj4gPiAgICAgaWYgKHByaXYtPmV2ZW50X2ZpZm8pDQo+ID4gICAgICAg
ICAgICAga2ZpZm9fZnJlZShwcml2LT5ldmVudF9maWZvKTsNCj4gPiAgICAgZGVsX3RpbWVyKCZw
cml2LT5jb21tYW5kX3RpbWVyKTsNCj4gPiArICAgZGVsX3RpbWVyKCZwcml2LT5hdXRvX2RlZXBz
bGVlcF90aW1lcik7DQo+ID4gICAgIGtmcmVlKHByaXYtPm5ldHdvcmtzKTsNCj4gPiAgICAgcHJp
di0+bmV0d29ya3MgPSBOVUxMOw0KPiA+DQo+ID4gQEAgLTEyNzIsNiArMTM0OSwxMSBAQCB2b2lk
IGxic19yZW1vdmVfY2FyZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpDQo+ID4gICAgIHdycXUu
YXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7DQo+ID4gICAgIHdpcmVsZXNzX3NlbmRf
ZXZlbnQocHJpdi0+ZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsNCj4gPg0KPiA+ICsgICBp
ZiAocHJpdi0+aXNfZGVlcF9zbGVlcCkgew0KPiA+ICsgICAgICAgICAgIHByaXYtPmlzX2RlZXBf
c2xlZXAgPSAwOw0KPiA+ICsgICAgICAgICAgIHdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+
ZHNfYXdha2VfcSk7DQo+ID4gKyAgIH0NCj4gPiArDQo+ID4gICAgIC8qIFN0b3AgdGhlIHRocmVh
ZCBzZXJ2aWNpbmcgdGhlIGludGVycnVwdHMgKi8NCj4gPiAgICAgcHJpdi0+c3VycHJpc2VyZW1v
dmVkID0gMTsNCj4gPiAgICAga3RocmVhZF9zdG9wKHByaXYtPm1haW5fdGhyZWFkKTsNCj4gPiBA
QCAtMTM5Miw2ICsxNDc0LDcgQEAgdm9pZCBsYnNfc3RvcF9jYXJkKHN0cnVjdCBsYnNfcHJpdmF0
ZSAqcHJpdikNCj4gPg0KPiA+ICAgICAvKiBEZWxldGUgdGhlIHRpbWVvdXQgb2YgdGhlIGN1cnJl
bnRseSBwcm9jZXNzaW5nIGNvbW1hbmQgKi8NCj4gPiAgICAgZGVsX3RpbWVyX3N5bmMoJnByaXYt
PmNvbW1hbmRfdGltZXIpOw0KPiA+ICsgICBkZWxfdGltZXJfc3luYygmcHJpdi0+YXV0b19kZWVw
c2xlZXBfdGltZXIpOw0KPiA+DQo+ID4gICAgIC8qIEZsdXNoIHBlbmRpbmcgY29tbWFuZCBub2Rl
cyAqLw0KPiA+ICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdz
KTsNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5j
IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5jDQo+ID4gaW5kZXggNmM5NWFm
My4uZTQ2OGUxNSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRh
cy9zY2FuLmMNCj4gPiArKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMN
Cj4gPiBAQCAtOTUwLDYgKzk1MCwxMSBAQCBpbnQgbGJzX3NldF9zY2FuKHN0cnVjdCBuZXRfZGV2
aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sDQo+ID4NCj4gPiAgICAgbGJz
X2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOw0KPiA+DQo+ID4gKyAgIGlmICghbGJzX2lzX2NtZF9h
bGxvd2VkKHByaXYpKSB7DQo+ID4gKyAgICAgICAgICAgcmV0ID0gLUVCVVNZOw0KPiA+ICsgICAg
ICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICAgICBpZiAoIXByaXYtPnJh
ZGlvX29uKSB7DQo+ID4gICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsNCj4gPiAgICAgICAgICAg
ICBnb3RvIG91dDsNCj4gPiBAQCAtMTAxNyw2ICsxMDIyLDEyIEBAIGludCBsYnNfZ2V0X3NjYW4o
c3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywNCj4g
Pg0KPiA+ICAgICBsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7DQo+ID4NCj4gPiArICAgaWYg
KCFsYnNfaXNfY21kX2FsbG93ZWQocHJpdikpIHsNCj4gPiArICAgICAgICAgICBlcnIgPSAtRUJV
U1k7DQo+ID4gKyAgICAgICAgICAgbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfV0VYVCwgInJl
dCAlZCIsIGVycik7DQo+ID4gKyAgICAgICAgICAgcmV0dXJuIGVycjsNCj4gPiArICAgfQ0KPiA+
ICsNCj4gPiAgICAgLyogaXdsaXN0IHNob3VsZCB3YWl0IHVudGlsIHRoZSBjdXJyZW50IHNjYW4g
aXMgZmluaXNoZWQgKi8NCj4gPiAgICAgaWYgKHByaXYtPnNjYW5fY2hhbm5lbCkNCj4gPiAgICAg
ICAgICAgICByZXR1cm4gLUVBR0FJTjsNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ly
ZWxlc3MvbGliZXJ0YXMvd2V4dC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4
dC5jDQo+ID4gaW5kZXggYmU4MzdhMC4uZWYyYjk4NiAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJz
L25ldC93aXJlbGVzcy9saWJlcnRhcy93ZXh0LmMNCj4gPiArKysgYi9kcml2ZXJzL25ldC93aXJl
bGVzcy9saWJlcnRhcy93ZXh0LmMNCj4gPiBAQCAtNDUsNiArNDUsMzEgQEAgc3RhdGljIGlubGlu
ZSB2b2lkIGxic19jYW5jZWxfYXNzb2NpYXRpb25fd29yayhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnBy
aXYpDQo+ID4gICAgIHByaXYtPnBlbmRpbmdfYXNzb2NfcmVxID0gTlVMTDsNCj4gPiAgfQ0KPiA+
DQo+ID4gKy8qKg0KPiA+ICsgKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBj
b21tYW5kIGlzIGFsbG93ZWQuDQo+ID4gKyAqDQo+ID4gKyAqICBAcGFyYW0gcHJpdiAgICAgICAg
IEEgcG9pbnRlciB0byBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUNCj4gPiArICogIEByZXR1cm4gICAg
ICAgICAgICAgYWxsb3dlZCBvciBub3QgYWxsb3dlZC4NCj4gPiArICovDQo+ID4gKw0KPiA+ICtp
bnQgbGJzX2lzX2NtZF9hbGxvd2VkKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikNCj4gPiArew0K
PiA+ICsgICBpbnQgICAgICAgICByZXQgPSAxOw0KPiA+ICsNCj4gPiArICAgbGJzX2RlYl9lbnRl
cihMQlNfREVCX1dFWFQpOw0KPiA+ICsNCj4gPiArICAgaWYgKCFwcml2LT5pc19hdXRvX2RlZXBf
c2xlZXBfZW5hYmxlZCkgew0KPiA+ICsgICAgICAgICAgIGlmIChwcml2LT5pc19kZWVwX3NsZWVw
KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICBsYnNfZGViX3dleHQoIklPQ1RMUyBjYWxsZWQg
d2hlbiBzdGF0aW9uIg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJp
cyBpbiBkZWVwIHNsZWVwXG4iKTsNCj4gPiArICAgICAgICAgICAgICAgICAgIHJldCA9IDA7DQo+
ID4gKyAgICAgICAgICAgfQ0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICsgICBsYnNfZGViX2xlYXZl
KExCU19ERUJfV0VYVCk7DQo+ID4gKyAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4N
Cj4gPiAgLyoqDQo+ID4gICAqICBAYnJpZWYgRmluZCB0aGUgY2hhbm5lbCBmcmVxdWVuY3kgcG93
ZXIgaW5mbyB3aXRoIHNwZWNpZmljIGNoYW5uZWwNCj4gPiBAQCAtMTY4LDYgKzE5MywxMSBAQCBz
dGF0aWMgaW50IGxic19nZXRfZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdf
cmVxdWVzdF9pbmZvICppbmZvLA0KPiA+DQo+ID4gICAgIGxic19kZWJfZW50ZXIoTEJTX0RFQl9X
RVhUKTsNCj4gPg0KPiA+ICsgICBpZiAoIWxic19pc19jbWRfYWxsb3dlZChwcml2KSkgew0KPiA+
ICsgICAgICAgICAgIGxic19kZWJfbGVhdmUoTEJTX0RFQl9XRVhUKTsNCj4gPiArICAgICAgICAg
ICByZXR1cm4gLUVCVVNZOw0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICAgICBjZnAgPSBsYnNfZmlu
ZF9jZnBfYnlfYmFuZF9hbmRfY2hhbm5lbChwcml2LCAwLA0KPiA+ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByaXYtPmN1cmJzc3BhcmFtcy5jaGFubmVsKTsNCj4gPg0K
PiA+IEBAIC0yNzgsNiArMzA4LDEyIEBAIHN0YXRpYyBpbnQgbGJzX3NldF9ydHMoc3RydWN0IG5l
dF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywNCj4gPg0KPiA+ICAg
ICBsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7DQo+ID4NCj4gPiArICAgaWYgKCFsYnNfaXNf
Y21kX2FsbG93ZWQocHJpdikpIHsNCj4gPiArICAgICAgICAgICByZXQgPSAtRUJVU1k7DQo+ID4g
KyAgICAgICAgICAgbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfV0VYVCwgInJldCAlZCIsIHJl
dCk7DQo+ID4gKyAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArICAgfQ0KPiA+ICsNCj4gPiAg
ICAgaWYgKHZ3cnEtPmRpc2FibGVkKQ0KPiA+ICAgICAgICAgICAgIHZhbCA9IE1SVkRSVl9SVFNf
TUFYX1ZBTFVFOw0KPiA+DQo+ID4gQEAgLTI5OSw2ICszMzUsMTEgQEAgc3RhdGljIGludCBsYnNf
Z2V0X3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICpp
bmZvLA0KPiA+DQo+ID4gICAgIGxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsNCj4gPg0KPiA+
ICsgICBpZiAoIWxic19pc19jbWRfYWxsb3dlZChwcml2KSkgew0KPiA+ICsgICAgICAgICAgIHJl
dCA9IC1FQlVTWTsNCj4gPiArICAgICAgICAgICBnb3RvIG91dDsNCj4gPiArICAgfQ0KPiA+ICsN
Cj4gPiAgICAgcmV0ID0gbGJzX2dldF9zbm1wX21pYihwcml2LCBTTk1QX01JQl9PSURfUlRTX1RI
UkVTSE9MRCwgJnZhbCk7DQo+ID4gICAgIGlmIChyZXQpDQo+ID4gICAgICAgICAgICAgZ290byBv
dXQ7DQo+ID4gQEAgLTMyMSw2ICszNjIsMTIgQEAgc3RhdGljIGludCBsYnNfc2V0X2ZyYWcoc3Ry
dWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywNCj4gPg0K
PiA+ICAgICBsYnNfZGViX2VudGVyKExCU19ERUJfV0VYVCk7DQo+ID4NCj4gPiArICAgaWYgKCFs
YnNfaXNfY21kX2FsbG93ZWQocHJpdikpIHsNCj4gPiArICAgICAgICAgICByZXQgPSAtRUJVU1k7
DQo+ID4gKyAgICAgICAgICAgbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfV0VYVCwgInJldCAl
ZCIsIHJldCk7DQo+ID4gKyAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArICAgfQ0KPiA+ICsN
Cj4gPiAgICAgaWYgKHZ3cnEtPmRpc2FibGVkKQ0KPiA+ICAgICAgICAgICAgIHZhbCA9IE1SVkRS
Vl9GUkFHX01BWF9WQUxVRTsNCj4gPg0KPiA+IEBAIC0zNDIsNiArMzg5LDExIEBAIHN0YXRpYyBp
bnQgbGJzX2dldF9mcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0
X2luZm8gKmluZm8sDQo+ID4NCj4gPiAgICAgbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOw0K
PiA+DQo+ID4gKyAgIGlmICghbGJzX2lzX2NtZF9hbGxvd2VkKHByaXYpKSB7DQo+ID4gKyAgICAg
ICAgICAgcmV0ID0gLUVCVVNZOw0KPiA+ICsgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICB9
DQo+ID4gKw0KPiA+ICAgICByZXQgPSBsYnNfZ2V0X3NubXBfbWliKHByaXYsIFNOTVBfTUlCX09J
RF9GUkFHX1RIUkVTSE9MRCwgJnZhbCk7DQo+ID4gICAgIGlmIChyZXQpDQo+ID4gICAgICAgICAg
ICAgZ290byBvdXQ7DQo+ID4gQEAgLTM5MSw2ICs0NDMsMTEgQEAgc3RhdGljIGludCBsYnNfZ2V0
X3R4cG93KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsDQo+ID4NCj4gPiAgICAgbGJzX2RlYl9lbnRl
cihMQlNfREVCX1dFWFQpOw0KPiA+DQo+ID4gKyAgIGlmICghbGJzX2lzX2NtZF9hbGxvd2VkKHBy
aXYpKSB7DQo+ID4gKyAgICAgICAgICAgcmV0ID0gLUVCVVNZOw0KPiA+ICsgICAgICAgICAgIGdv
dG8gb3V0Ow0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICAgICBpZiAoIXByaXYtPnJhZGlvX29uKSB7
DQo+ID4gICAgICAgICAgICAgbGJzX2RlYl93ZXh0KCJ0eCBwb3dlciBvZmZcbiIpOw0KPiA+ICAg
ICAgICAgICAgIHZ3cnEtPnZhbHVlID0gMDsNCj4gPiBAQCAtNDI0LDYgKzQ4MSwxMSBAQCBzdGF0
aWMgaW50IGxic19zZXRfcmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3Jl
cXVlc3RfaW5mbyAqaW5mbywNCj4gPg0KPiA+ICAgICBsYnNfZGViX2VudGVyKExCU19ERUJfV0VY
VCk7DQo+ID4NCj4gPiArICAgaWYgKCFsYnNfaXNfY21kX2FsbG93ZWQocHJpdikpIHsNCj4gPiAr
ICAgICAgICAgICByZXQgPSAtRUJVU1k7DQo+ID4gKyAgICAgICAgICAgZ290byBvdXQ7DQo+ID4g
KyAgIH0NCj4gPiArDQo+ID4gICAgICAgICAgaWYgKCh2d3JxLT5mbGFncyAmIElXX1JFVFJZX1RZ
UEUpICE9IElXX1JFVFJZX0xJTUlUKQ0KPiA+ICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FT1BO
T1RTVVBQOw0KPiA+DQo+ID4gQEAgLTQ3Miw2ICs1MzQsMTEgQEAgc3RhdGljIGludCBsYnNfZ2V0
X3JldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmlu
Zm8sDQo+ID4NCj4gPiAgICAgbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOw0KPiA+DQo+ID4g
KyAgIGlmICghbGJzX2lzX2NtZF9hbGxvd2VkKHByaXYpKSB7DQo+ID4gKyAgICAgICAgICAgcmV0
ID0gLUVCVVNZOw0KPiA+ICsgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICB9DQo+ID4gKw0K
PiA+ICAgICB2d3JxLT5kaXNhYmxlZCA9IDA7DQo+ID4NCj4gPiAgICAgaWYgKHZ3cnEtPmZsYWdz
ICYgSVdfUkVUUllfTE9ORykgew0KPiA+IEBAIC03MTIsNiArNzc5LDExIEBAIHN0YXRpYyBpbnQg
bGJzX3NldF9wb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9p
bmZvICppbmZvLA0KPiA+DQo+ID4gICAgIGxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsNCj4g
Pg0KPiA+ICsgICBpZiAoIWxic19pc19jbWRfYWxsb3dlZChwcml2KSkgew0KPiA+ICsgICAgICAg
ICAgIGxic19kZWJfbGVhdmUoTEJTX0RFQl9XRVhUKTsNCj4gPiArICAgICAgICAgICByZXR1cm4g
LUVCVVNZOw0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICAgICBpZiAoIShwcml2LT5md2NhcGluZm8g
JiBGV19DQVBJTkZPX1BTKSkgew0KPiA+ICAgICAgICAgICAgIGlmICh2d3JxLT5kaXNhYmxlZCkN
Cj4gPiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+IEBAIC03OTIsNiArODY0LDkg
QEAgc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzICpsYnNfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0
cnVjdCBuZXRfZGV2aWNlICpkZXYpDQo+ID4NCj4gPiAgICAgbGJzX2RlYl9lbnRlcihMQlNfREVC
X1dFWFQpOw0KPiA+DQo+ID4gKyAgIGlmICghbGJzX2lzX2NtZF9hbGxvd2VkKHByaXYpKQ0KPiA+
ICsgICAgICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICsNCj4gPiAgICAgcHJpdi0+d3N0YXRzLnN0
YXR1cyA9IHByaXYtPm1vZGU7DQo+ID4NCj4gPiAgICAgLyogSWYgd2UncmUgbm90IGFzc29jaWF0
ZWQsIGFsbCBxdWFsaXR5IHZhbHVlcyBhcmUgbWVhbmluZ2xlc3MgKi8NCj4gPiBAQCAtODkyLDYg
Kzk2NywxMiBAQCBzdGF0aWMgaW50IGxic19zZXRfZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2
LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLA0KPiA+DQo+ID4gICAgIGxic19kZWJfZW50
ZXIoTEJTX0RFQl9XRVhUKTsNCj4gPg0KPiA+ICsgICBpZiAoIWxic19pc19jbWRfYWxsb3dlZChw
cml2KSkgew0KPiA+ICsgICAgICAgICAgIHJldCA9IC1FQlVTWTsNCj4gPiArICAgICAgICAgICBs
YnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9XRVhULCAicmV0ICVkIiwgcmV0KTsNCj4gPiArICAg
ICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICAgICBtdXRleF9sb2Nr
KCZwcml2LT5sb2NrKTsNCj4gPiAgICAgYXNzb2NfcmVxID0gbGJzX2dldF9hc3NvY2lhdGlvbl9y
ZXF1ZXN0KHByaXYpOw0KPiA+ICAgICBpZiAoIWFzc29jX3JlcSkgew0KPiA+IEBAIC0xMDAwLDYg
KzEwODEsMTIgQEAgc3RhdGljIGludCBsYnNfc2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRl
diwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywNCj4gPiAgICAgdTggcmF0ZXNbTUFYX1JB
VEVTICsgMV07DQo+ID4NCj4gPiAgICAgbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOw0KPiA+
ICsNCj4gPiArICAgaWYgKCFsYnNfaXNfY21kX2FsbG93ZWQocHJpdikpIHsNCj4gPiArICAgICAg
ICAgICByZXQgPSAtRUJVU1k7DQo+ID4gKyAgICAgICAgICAgZ290byBvdXQ7DQo+ID4gKyAgIH0N
Cj4gPiArDQo+ID4gICAgIGxic19kZWJfd2V4dCgidndycS0+dmFsdWUgJWRcbiIsIHZ3cnEtPnZh
bHVlKTsNCj4gPiAgICAgbGJzX2RlYl93ZXh0KCJ2d3JxLT5maXhlZCAlZFxuIiwgdndycS0+Zml4
ZWQpOw0KPiA+DQo+ID4gQEAgLTEwNTgsNiArMTE0NSwxMSBAQCBzdGF0aWMgaW50IGxic19nZXRf
cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZv
LA0KPiA+DQo+ID4gICAgIGxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsNCj4gPg0KPiA+ICsg
ICBpZiAoIWxic19pc19jbWRfYWxsb3dlZChwcml2KSkgew0KPiA+ICsgICAgICAgICAgIGxic19k
ZWJfbGVhdmUoTEJTX0RFQl9XRVhUKTsNCj4gPiArICAgICAgICAgICByZXR1cm4gLUVCVVNZOw0K
PiA+ICsgICB9DQo+ID4gKw0KPiA+ICAgICBpZiAocHJpdi0+Y29ubmVjdF9zdGF0dXMgPT0gTEJT
X0NPTk5FQ1RFRCkgew0KPiA+ICAgICAgICAgICAgIHZ3cnEtPnZhbHVlID0gcHJpdi0+Y3VyX3Jh
dGUgKiA1MDAwMDA7DQo+ID4NCj4gPiBAQCAtMTA4NCw2ICsxMTc2LDExIEBAIHN0YXRpYyBpbnQg
bGJzX3NldF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsDQo+ID4NCj4gPiAgICAgbGJzX2Rl
Yl9lbnRlcihMQlNfREVCX1dFWFQpOw0KPiA+DQo+ID4gKyAgIGlmICghbGJzX2lzX2NtZF9hbGxv
d2VkKHByaXYpKSB7DQo+ID4gKyAgICAgICAgICAgcmV0ID0gLUVCVVNZOw0KPiA+ICsgICAgICAg
ICAgIGdvdG8gb3V0Ow0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICAgICBpZiAoICAgKCp1d3JxICE9
IElXX01PREVfQURIT0MpDQo+ID4gICAgICAgICAmJiAoKnV3cnEgIT0gSVdfTU9ERV9JTkZSQSkN
Cj4gPiAgICAgICAgICYmICgqdXdycSAhPSBJV19NT0RFX0FVVE8pKSB7DQo+ID4gQEAgLTEzMjUs
NiArMTQyMiwxMiBAQCBzdGF0aWMgaW50IGxic19zZXRfZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNl
ICpkZXYsDQo+ID4NCj4gPiAgICAgbGJzX2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOw0KPiA+DQo+
ID4gKyAgIGlmICghbGJzX2lzX2NtZF9hbGxvd2VkKHByaXYpKSB7DQo+ID4gKyAgICAgICAgICAg
cmV0ID0gLUVCVVNZOw0KPiA+ICsgICAgICAgICAgIGxic19kZWJfbGVhdmVfYXJncyhMQlNfREVC
X1dFWFQsICJyZXQgJWQiLCByZXQpOw0KPiA+ICsgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4g
KyAgIH0NCj4gPiArDQo+ID4gICAgIG11dGV4X2xvY2soJnByaXYtPmxvY2spOw0KPiA+ICAgICBh
c3NvY19yZXEgPSBsYnNfZ2V0X2Fzc29jaWF0aW9uX3JlcXVlc3QocHJpdik7DQo+ID4gICAgIGlm
ICghYXNzb2NfcmVxKSB7DQo+ID4gQEAgLTE1MDgsNiArMTYxMSwxMiBAQCBzdGF0aWMgaW50IGxi
c19zZXRfZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsDQo+ID4NCj4gPiAgICAgbGJz
X2RlYl9lbnRlcihMQlNfREVCX1dFWFQpOw0KPiA+DQo+ID4gKyAgIGlmICghbGJzX2lzX2NtZF9h
bGxvd2VkKHByaXYpKSB7DQo+ID4gKyAgICAgICAgICAgcmV0ID0gLUVCVVNZOw0KPiA+ICsgICAg
ICAgICAgIGxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1dFWFQsICJyZXQgJWQiLCByZXQpOw0K
PiA+ICsgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gKyAgIH0NCj4gPiArDQo+ID4gICAgIG11
dGV4X2xvY2soJnByaXYtPmxvY2spOw0KPiA+ICAgICBhc3NvY19yZXEgPSBsYnNfZ2V0X2Fzc29j
aWF0aW9uX3JlcXVlc3QocHJpdik7DQo+ID4gICAgIGlmICghYXNzb2NfcmVxKSB7DQo+ID4gQEAg
LTE3MjAsNiArMTgyOSwxMiBAQCBzdGF0aWMgaW50IGxic19zZXRfYXV0aChzdHJ1Y3QgbmV0X2Rl
dmljZSAqZGV2LA0KPiA+DQo+ID4gICAgIGxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsNCj4g
Pg0KPiA+ICsgICBpZiAoIWxic19pc19jbWRfYWxsb3dlZChwcml2KSkgew0KPiA+ICsgICAgICAg
ICAgIHJldCA9IC1FQlVTWTsNCj4gPiArICAgICAgICAgICBsYnNfZGViX2xlYXZlX2FyZ3MoTEJT
X0RFQl9XRVhULCAicmV0ICVkIiwgcmV0KTsNCj4gPiArICAgICAgICAgICByZXR1cm4gcmV0Ow0K
PiA+ICsgICB9DQo+ID4gKw0KPiA+ICAgICBtdXRleF9sb2NrKCZwcml2LT5sb2NrKTsNCj4gPiAg
ICAgYXNzb2NfcmVxID0gbGJzX2dldF9hc3NvY2lhdGlvbl9yZXF1ZXN0KHByaXYpOw0KPiA+ICAg
ICBpZiAoIWFzc29jX3JlcSkgew0KPiA+IEBAIC0xODIyLDYgKzE5MzcsMTIgQEAgc3RhdGljIGlu
dCBsYnNfZ2V0X2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwNCj4gPg0KPiA+ICAgICBsYnNf
ZGViX2VudGVyKExCU19ERUJfV0VYVCk7DQo+ID4NCj4gPiArICAgaWYgKCFsYnNfaXNfY21kX2Fs
bG93ZWQocHJpdikpIHsNCj4gPiArICAgICAgICAgICByZXQgPSAtRUJVU1k7DQo+ID4gKyAgICAg
ICAgICAgbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfV0VYVCwgInJldCAlZCIsIHJldCk7DQo+
ID4gKyAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArICAgfQ0KPiA+ICsNCj4gPiAgICAgc3dp
dGNoIChkd3JxLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsNCj4gPiAgICAgY2FzZSBJV19BVVRI
X0tFWV9NR01UOg0KPiA+ICAgICAgICAgICAgIGR3cnEtPnZhbHVlID0gcHJpdi0+c2VjaW5mby5r
ZXlfbWdtdDsNCj4gPiBAQCAtMTg2NCw2ICsxOTg1LDExIEBAIHN0YXRpYyBpbnQgbGJzX3NldF90
eHBvdyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvDQo+ICpp
bmZvLA0KPiA+DQo+ID4gICAgIGxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsNCj4gPg0KPiA+
ICsgICBpZiAoIWxic19pc19jbWRfYWxsb3dlZChwcml2KSkgew0KPiA+ICsgICAgICAgICAgIHJl
dCA9IC1FQlVTWTsNCj4gPiArICAgICAgICAgICBnb3RvIG91dDsNCj4gPiArICAgfQ0KPiA+ICsN
Cj4gPiAgICAgaWYgKHZ3cnEtPmRpc2FibGVkKSB7DQo+ID4gICAgICAgICAgICAgbGJzX3NldF9y
YWRpbyhwcml2LCBSQURJT19QUkVBTUJMRV9BVVRPLCAwKTsNCj4gPiAgICAgICAgICAgICBnb3Rv
IG91dDsNCj4gPiBAQCAtMTk4Myw2ICsyMTA5LDEyIEBAIHN0YXRpYyBpbnQgbGJzX3NldF9lc3Np
ZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvDQo+ICppbmZv
LA0KPiA+DQo+ID4gICAgIGxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsNCj4gPg0KPiA+ICsg
ICBpZiAoIWxic19pc19jbWRfYWxsb3dlZChwcml2KSkgew0KPiA+ICsgICAgICAgICAgIHJldCA9
IC1FQlVTWTsNCj4gPiArICAgICAgICAgICBsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9XRVhU
LCAicmV0ICVkIiwgcmV0KTsNCj4gPiArICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICsgICB9
DQo+ID4gKw0KPiA+ICAgICBpZiAoIXByaXYtPnJhZGlvX29uKSB7DQo+ID4gICAgICAgICAgICAg
cmV0ID0gLUVJTlZBTDsNCj4gPiAgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiBAQCAtMjExMCw2
ICsyMjQyLDEyIEBAIHN0YXRpYyBpbnQgbGJzX3NldF93YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRl
diwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywNCj4gPg0KPiA+ICAgICBsYnNfZGViX2Vu
dGVyKExCU19ERUJfV0VYVCk7DQo+ID4NCj4gPiArICAgaWYgKCFsYnNfaXNfY21kX2FsbG93ZWQo
cHJpdikpIHsNCj4gPiArICAgICAgICAgICByZXQgPSAtRUJVU1k7DQo+ID4gKyAgICAgICAgICAg
bGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfV0VYVCwgInJldCAlZCIsIHJldCk7DQo+ID4gKyAg
ICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArICAgfQ0KPiA+ICsNCj4gPiAgICAgaWYgKCFwcml2
LT5yYWRpb19vbikNCj4gPiAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPg0KDQo=
^ permalink raw reply
* Re: Firmware versioning best practices
From: Pavel Roskin @ 2009-09-28 22:33 UTC (permalink / raw)
To: Luis R. Rodriguez
Cc: linux-wireless, reinette chatre, Kalle Valo, Johannes Berg,
Christian Lamparter, Bob Copeland
In-Reply-To: <43e72e890909281517k23abaf8dvd3e84837ce307429@mail.gmail.com>
On Mon, 2009-09-28 at 15:17 -0700, Luis R. Rodriguez wrote:
> The ath_hif_usb driver will require the ar9271 firmware file but in
> the future an open firmware might become available. The ar9170 driver
> already is under the same situation already: a closed firmware is
> available but an open firmware can be used, only thing is ar9170 uses
> the same firmware name for both. We *could* change ar9170 to use the
> Intel practice of tagging a version at the end of each firmware
> release, like ar9170-1.fw but ar9170 originally was implemented with a
> 2-stage firmware requirement and so ar9170-1.fw is already taken.
Versions don't have to start with 1. We could start e.g. with 10.
> ar9170 still needs a solution for the different firmwares, once we
> start supporting the open firmware through some sort of release but
> I'd like to address ath_hif_usb now early so that we don't run into
> these snags and use some decent convention that is easy to follow.
We could use ar9170-apiversion-codeverestion.fw and link it to
ar9170-apiversion.fw. That is, if the open firmware version is 0.9.0
and it was compiled for API version 12, the filename would be
ar9170-12-0.9.0.fw and it could be linked to ar9170-12.fw.
> As I noted above, Intel seems to use the device-1.fw, device-2.fw
> naming convention. Is this the best approach? Or shall we have the
> same firmware filename and simply query the firmware for a map of
> capabilities? Any other ideas?
Distinctive names are good for simplicity of administration and the
capabilities are good for the sanity of the driver. But I don't see why
we cannot have both.
--
Regards,
Pavel Roskin
^ permalink raw reply
* Re: [PATCH] b43: Always use block-I/O for the PIO data registers
From: Albert Herranz @ 2009-09-28 22:30 UTC (permalink / raw)
To: Michael Buesch, John W. Linville; +Cc: Broadcom Wireless, linux-wireless
In-Reply-To: <200909231851.22110.mb@bu3sch.de>
Michael Buesch wrote:
> On SDIO the PIO data register seems to be hardwired to LE. So
> the MACCTL bit has no effect on the endianness.
> So also use block-I/O for the last word of the packet. block-I/O is always LE.
>
> Signed-off-by: Michael Buesch <mb@bu3sch.de>
>
> ---
>
>
> Index: wireless-testing/drivers/net/wireless/b43/pio.c
> ===================================================================
> --- wireless-testing.orig/drivers/net/wireless/b43/pio.c 2009-09-10 20:14:37.000000000 +0200
> +++ wireless-testing/drivers/net/wireless/b43/pio.c 2009-09-10 21:08:11.000000000 +0200
> @@ -340,10 +340,15 @@ static u16 tx_write_2byte_queue(struct b
> q->mmio_base + B43_PIO_TXDATA,
> sizeof(u16));
> if (data_len & 1) {
> + u8 tail[2] = { 0, };
> +
> /* Write the last byte. */
> ctl &= ~B43_PIO_TXCTL_WRITEHI;
> b43_piotx_write16(q, B43_PIO_TXCTL, ctl);
> - b43_piotx_write16(q, B43_PIO_TXDATA, data[data_len - 1]);
> + tail[0] = data[data_len - 1];
> + ssb_block_write(dev->dev, tail, 2,
> + q->mmio_base + B43_PIO_TXDATA,
> + sizeof(u16));
> }
>
> return ctl;
> @@ -386,26 +391,31 @@ static u32 tx_write_4byte_queue(struct b
> q->mmio_base + B43_PIO8_TXDATA,
> sizeof(u32));
> if (data_len & 3) {
> - u32 value = 0;
> + u8 tail[4] = { 0, };
>
> /* Write the last few bytes. */
> ctl &= ~(B43_PIO8_TXCTL_8_15 | B43_PIO8_TXCTL_16_23 |
> B43_PIO8_TXCTL_24_31);
> - data = &(data[data_len - 1]);
> switch (data_len & 3) {
> case 3:
> - ctl |= B43_PIO8_TXCTL_16_23;
> - value |= (u32)(*data) << 16;
> - data--;
> + ctl |= B43_PIO8_TXCTL_16_23 | B43_PIO8_TXCTL_8_15;
> + tail[0] = data[data_len - 3];
> + tail[1] = data[data_len - 2];
> + tail[2] = data[data_len - 1];
> + break;
> case 2:
> ctl |= B43_PIO8_TXCTL_8_15;
> - value |= (u32)(*data) << 8;
> - data--;
> + tail[0] = data[data_len - 2];
> + tail[1] = data[data_len - 1];
> + break;
> case 1:
> - value |= (u32)(*data);
> + tail[0] = data[data_len - 1];
> + break;
> }
> b43_piotx_write32(q, B43_PIO8_TXCTL, ctl);
> - b43_piotx_write32(q, B43_PIO8_TXDATA, value);
> + ssb_block_write(dev->dev, tail, 4,
> + q->mmio_base + B43_PIO8_TXDATA,
> + sizeof(u32));
> }
>
> return ctl;
> @@ -693,21 +703,25 @@ data_ready:
> q->mmio_base + B43_PIO8_RXDATA,
> sizeof(u32));
> if (len & 3) {
> - u32 value;
> - char *data;
> + u8 tail[4] = { 0, };
>
> /* Read the last few bytes. */
> - value = b43_piorx_read32(q, B43_PIO8_RXDATA);
> - data = &(skb->data[len + padding - 1]);
> + ssb_block_read(dev->dev, tail, 4,
> + q->mmio_base + B43_PIO8_RXDATA,
> + sizeof(u32));
> switch (len & 3) {
> case 3:
> - *data = (value >> 16);
> - data--;
> + skb->data[len + padding - 3] = tail[0];
> + skb->data[len + padding - 2] = tail[1];
> + skb->data[len + padding - 1] = tail[2];
> + break;
> case 2:
> - *data = (value >> 8);
> - data--;
> + skb->data[len + padding - 2] = tail[0];
> + skb->data[len + padding - 1] = tail[1];
> + break;
> case 1:
> - *data = value;
> + skb->data[len + padding - 1] = tail[0];
> + break;
> }
> }
> } else {
> @@ -715,11 +729,13 @@ data_ready:
> q->mmio_base + B43_PIO_RXDATA,
> sizeof(u16));
> if (len & 1) {
> - u16 value;
> + u8 tail[2] = { 0, };
>
> /* Read the last byte. */
> - value = b43_piorx_read16(q, B43_PIO_RXDATA);
> - skb->data[len + padding - 1] = value;
> + ssb_block_read(dev->dev, tail, 2,
> + q->mmio_base + B43_PIO_RXDATA,
> + sizeof(u16));
> + skb->data[len + padding - 1] = tail[0];
> }
> }
>
>
Without this patch, the last bytes of data sent/received to/from PIO FIFOs on SDIO-based cards get "swizzled" when its length is not multiple of 4 bytes.
Tested-by: Albert Herranz <albert_herranz@yahoo.es>
^ permalink raw reply
* ath5k, wifi enable hotkeys
From: Richard Zidlicky @ 2009-09-28 22:23 UTC (permalink / raw)
To: Bob Copeland; +Cc: linux-wireless
In-Reply-To: <20090705123105.GE2132@hash.localnet>
On Sun, Jul 05, 2009 at 08:31:05AM -0400, Bob Copeland wrote:
Hi,
> Try latest wireless-testing or 2.6.31-rc1; there may already be a fix
> for your hardware thanks to recently added rfkill support.
got around to give 2.6.30* more testing. LED now works nicely but that is about the
only thing that works.
Tried computers linked in Ad-Hoc mode with WEP. 2.6.30 and 2.6.31.1 work nicely
on the other end.
On the ath5k end it seems like 2.6.31 choked after resume from suspend or when interface
was reconfigured.
2.6.31.1 does not work at all on this netbook. LED indicates activity but network does
not get associated. "iwlist scan" does display available networks.
After having tried 2.6.31.1 I have to cold-boot 2.6.30.x to get the ath5k working again,
simple reboot does not do it.
>
> > Also, while the hotkey works how do query the current on/off status of it
> > in Linux?
>
> There's the /dev/rfkill device (see http://git.sipsolutions.net/rfkill.git)
> and I believe there are files under /sys/ as well which show the state but
> I don't have the details handy (/sys/class/rfkill/xxx/state?).
has that been merged into 2.6.31* ?
The /sys/.../rfkill files are there but could not figure out anything that changes
when hitting the hotkey.
Besides, I would think the LED will indicate rfkill status?
Richard
^ permalink raw reply
* Firmware versioning best practices
From: Luis R. Rodriguez @ 2009-09-28 22:17 UTC (permalink / raw)
To: linux-wireless
Cc: reinette chatre, Kalle Valo, Johannes Berg, Christian Lamparter,
Bob Copeland
The ath_hif_usb driver will require the ar9271 firmware file but in
the future an open firmware might become available. The ar9170 driver
already is under the same situation already: a closed firmware is
available but an open firmware can be used, only thing is ar9170 uses
the same firmware name for both. We *could* change ar9170 to use the
Intel practice of tagging a version at the end of each firmware
release, like ar9170-1.fw but ar9170 originally was implemented with a
2-stage firmware requirement and so ar9170-1.fw is already taken.
ar9170 still needs a solution for the different firmwares, once we
start supporting the open firmware through some sort of release but
I'd like to address ath_hif_usb now early so that we don't run into
these snags and use some decent convention that is easy to follow.
As I noted above, Intel seems to use the device-1.fw, device-2.fw
naming convention. Is this the best approach? Or shall we have the
same firmware filename and simply query the firmware for a map of
capabilities? Any other ideas?
Luis
^ permalink raw reply
* Re: Question on general wireless testing tree compilation.
From: Hin-Tak Leung @ 2009-09-28 21:52 UTC (permalink / raw)
To: Balaji Ravindran; +Cc: Linux Wireless
In-Reply-To: <16D9C5FD-4A2A-4061-9C26-FF5C0B0CDFBA@w1an.in>
On Fri, Sep 25, 2009 at 6:21 AM, Balaji Ravindran <b@w1an.in> wrote:
> Hi Everyone,
>
> Sorry for a very amateur question. Could anyone just help me get started
> with compiling the linux kernel from the wireless-testing tree? I just
> pulled the local wireless-testing repo, trying to navigate through the code,
> and wanted to compile the kernel, and to boot up to it. Could anyone just
> help me get started?
>
> I followed the instructions from
> http://www.cyberciti.biz/tips/compiling-linux-kernel-26.html
> and ended up with a compile error in 'make', while trying to create the
> bzimage. (error is on make: initramfs_data.cpi.o failed)
>
> Is there any other easy way to compile the kernel/debug.
>
>
> Thanks
>
> Balaji R
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
As the other replier has already stated, including the last few lines
of the message before the error would be nice.
Also, if you haven't built your own kernel before, it is probably
better to start from a known configuration rather than from scratch.
While all the tutorial, etc tells you to do 'make mrproper ; make
menuconfig/xconfig; make' , there are occasionally some missing
dependencies which aren't explicitly hooked up, so it might be easier
to do, instead of make menuconfig/xconfig, in the middle, copy your
distro's config (or your current running kernel's config) from either
/boot/config-* (packaged from your distro) or /proc/config.gz (for a
kernel which remembers its own config - it is a kernel config opton),
to .config in your source tree, run make oldconfig (which only ask
your questions about *difference* between the tree and the running
kernel), before running make menuconfig/xconfig. This way, you are
starting from a valid and know-working configuration for your
hardware/archecture.
Also, compat-wireless (which just replaces the wireless-related kernel
modules) is sometimes a quicker/easier alternative to the whole
wireless-testing.
^ permalink raw reply
* Re: pull request: wireless-2.6 2009-09-28
From: David Miller @ 2009-09-28 21:51 UTC (permalink / raw)
To: linville; +Cc: linux-wireless, netdev, linux-kernel
In-Reply-To: <20090928214047.GF4737@tuxdriver.com>
From: "John W. Linville" <linville@tuxdriver.com>
Date: Mon, 28 Sep 2009 17:40:48 -0400
> There are number of small fixes to core wireless infrastructure from
> Johannes Berg. These have been bounced around on the list quite a bit
> during the last several days, so I think they are solid. Also included
> is one that improves some debugging messages.
>
> There are a few fixes for the iwlwifi family of drivers, including a
> buffer overrun, a memory leak, and another debugging message fix.
>
> Arjan showed-up with a bounds checking fix in some ancient wext code. I
> included it due to the potential security implications.
>
> The sony-laptop fixes may seem a bit out of place, but they are related
> to rfkill. Also, they are "Acked-by: Mattia Dongili <malattia@linux.it>",
> who is the listed maintainer for that code. I put them at the end, so
> if you want you can pull from 8f1546cadf7ac5e9a40d54089a1c7302264ec49b
> instead of master.
>
> Please let me know if there are problems!
Pulled, thanks a lot John!
^ permalink raw reply
* pull request: wireless-2.6 2009-09-28
From: John W. Linville @ 2009-09-28 21:40 UTC (permalink / raw)
To: davem; +Cc: linux-wireless, netdev, linux-kernel
Dave,
This group of fixes is intended for the 2.6.32 train...
There are number of small fixes to core wireless infrastructure from
Johannes Berg. These have been bounced around on the list quite a bit
during the last several days, so I think they are solid. Also included
is one that improves some debugging messages.
There are a few fixes for the iwlwifi family of drivers, including a
buffer overrun, a memory leak, and another debugging message fix.
Arjan showed-up with a bounds checking fix in some ancient wext code. I
included it due to the potential security implications.
The sony-laptop fixes may seem a bit out of place, but they are related
to rfkill. Also, they are "Acked-by: Mattia Dongili <malattia@linux.it>",
who is the listed maintainer for that code. I put them at the end, so
if you want you can pull from 8f1546cadf7ac5e9a40d54089a1c7302264ec49b
instead of master.
Please let me know if there are problems!
Thanks,
John
---
Individual patches are available here:
http://www.kernel.org/pub/linux/kernel/people/linville/wireless-2.6/
---
The following changes since commit d1f8297a96b0d70f17704296a6666468f2087ce6:
Sascha Hlusiak (1):
Revert "sit: stateless autoconf for isatap"
are available in the git repository at:
ssh://master.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6.git master
Alan Jenkins (2):
sony-laptop: check for rfkill hard block at load time
sony-laptop: re-read the rfkill state when resuming from suspend
Arjan van de Ven (1):
wext: Add bound checks for copy_from_user
Johannes Berg (5):
cfg80211: wext: don't display BSSID unless associated
cfg80211: don't set privacy w/o key
cfg80211: always get BSS
mac80211: improve/fix mlme messages
wext: add back wireless/ dir in sysfs for cfg80211 interfaces
Reinette Chatre (3):
iwlwifi: fix debugfs buffer handling
iwlwifi: fix memory leak in command queue handling
iwlwifi: fix 3945 ucode info retrieval after failure
drivers/net/wireless/iwlwifi/iwl-1000.c | 2 +
drivers/net/wireless/iwlwifi/iwl-3945.c | 2 +
drivers/net/wireless/iwlwifi/iwl-3945.h | 2 +
drivers/net/wireless/iwlwifi/iwl-4965.c | 2 +
drivers/net/wireless/iwlwifi/iwl-5000.c | 4 +
drivers/net/wireless/iwlwifi/iwl-6000.c | 2 +
drivers/net/wireless/iwlwifi/iwl-agn.c | 185 ++++++++++++++++++++++++++
drivers/net/wireless/iwlwifi/iwl-core.c | 187 +--------------------------
drivers/net/wireless/iwlwifi/iwl-core.h | 14 ++
drivers/net/wireless/iwlwifi/iwl-debugfs.c | 8 +-
drivers/net/wireless/iwlwifi/iwl-tx.c | 6 +
drivers/net/wireless/iwlwifi/iwl3945-base.c | 31 ++---
drivers/platform/x86/sony-laptop.c | 9 ++
include/net/wext.h | 1 +
net/core/net-sysfs.c | 12 +-
net/mac80211/mlme.c | 18 ++--
net/wireless/sme.c | 5 +-
net/wireless/wext-sme.c | 8 +-
net/wireless/wext.c | 11 +-
19 files changed, 274 insertions(+), 235 deletions(-)
diff --git a/drivers/net/wireless/iwlwifi/iwl-1000.c b/drivers/net/wireless/iwlwifi/iwl-1000.c
index a95caa0..2716b91 100644
--- a/drivers/net/wireless/iwlwifi/iwl-1000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-1000.c
@@ -99,6 +99,8 @@ static struct iwl_lib_ops iwl1000_lib = {
.setup_deferred_work = iwl5000_setup_deferred_work,
.is_valid_rtc_data_addr = iwl5000_hw_valid_rtc_data_addr,
.load_ucode = iwl5000_load_ucode,
+ .dump_nic_event_log = iwl_dump_nic_event_log,
+ .dump_nic_error_log = iwl_dump_nic_error_log,
.init_alive_start = iwl5000_init_alive_start,
.alive_notify = iwl5000_alive_notify,
.send_tx_power = iwl5000_send_tx_power,
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c
index e9a685d..e70c5b0 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.c
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.c
@@ -2839,6 +2839,8 @@ static struct iwl_lib_ops iwl3945_lib = {
.txq_free_tfd = iwl3945_hw_txq_free_tfd,
.txq_init = iwl3945_hw_tx_queue_init,
.load_ucode = iwl3945_load_bsm,
+ .dump_nic_event_log = iwl3945_dump_nic_event_log,
+ .dump_nic_error_log = iwl3945_dump_nic_error_log,
.apm_ops = {
.init = iwl3945_apm_init,
.reset = iwl3945_apm_reset,
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.h b/drivers/net/wireless/iwlwifi/iwl-3945.h
index f240369..21679bf 100644
--- a/drivers/net/wireless/iwlwifi/iwl-3945.h
+++ b/drivers/net/wireless/iwlwifi/iwl-3945.h
@@ -209,6 +209,8 @@ extern int __must_check iwl3945_send_cmd(struct iwl_priv *priv,
struct iwl_host_cmd *cmd);
extern unsigned int iwl3945_fill_beacon_frame(struct iwl_priv *priv,
struct ieee80211_hdr *hdr,int left);
+extern void iwl3945_dump_nic_event_log(struct iwl_priv *priv);
+extern void iwl3945_dump_nic_error_log(struct iwl_priv *priv);
/*
* Currently used by iwl-3945-rs... look at restructuring so that it doesn't
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c
index 3259b88..a22a050 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965.c
+++ b/drivers/net/wireless/iwlwifi/iwl-4965.c
@@ -2298,6 +2298,8 @@ static struct iwl_lib_ops iwl4965_lib = {
.alive_notify = iwl4965_alive_notify,
.init_alive_start = iwl4965_init_alive_start,
.load_ucode = iwl4965_load_bsm,
+ .dump_nic_event_log = iwl_dump_nic_event_log,
+ .dump_nic_error_log = iwl_dump_nic_error_log,
.apm_ops = {
.init = iwl4965_apm_init,
.reset = iwl4965_apm_reset,
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c
index a6391c7..eb08f44 100644
--- a/drivers/net/wireless/iwlwifi/iwl-5000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-5000.c
@@ -1535,6 +1535,8 @@ struct iwl_lib_ops iwl5000_lib = {
.rx_handler_setup = iwl5000_rx_handler_setup,
.setup_deferred_work = iwl5000_setup_deferred_work,
.is_valid_rtc_data_addr = iwl5000_hw_valid_rtc_data_addr,
+ .dump_nic_event_log = iwl_dump_nic_event_log,
+ .dump_nic_error_log = iwl_dump_nic_error_log,
.load_ucode = iwl5000_load_ucode,
.init_alive_start = iwl5000_init_alive_start,
.alive_notify = iwl5000_alive_notify,
@@ -1585,6 +1587,8 @@ static struct iwl_lib_ops iwl5150_lib = {
.rx_handler_setup = iwl5000_rx_handler_setup,
.setup_deferred_work = iwl5000_setup_deferred_work,
.is_valid_rtc_data_addr = iwl5000_hw_valid_rtc_data_addr,
+ .dump_nic_event_log = iwl_dump_nic_event_log,
+ .dump_nic_error_log = iwl_dump_nic_error_log,
.load_ucode = iwl5000_load_ucode,
.init_alive_start = iwl5000_init_alive_start,
.alive_notify = iwl5000_alive_notify,
diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c
index 82b9c93..c295b8e 100644
--- a/drivers/net/wireless/iwlwifi/iwl-6000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-6000.c
@@ -100,6 +100,8 @@ static struct iwl_lib_ops iwl6000_lib = {
.setup_deferred_work = iwl5000_setup_deferred_work,
.is_valid_rtc_data_addr = iwl5000_hw_valid_rtc_data_addr,
.load_ucode = iwl5000_load_ucode,
+ .dump_nic_event_log = iwl_dump_nic_event_log,
+ .dump_nic_error_log = iwl_dump_nic_error_log,
.init_alive_start = iwl5000_init_alive_start,
.alive_notify = iwl5000_alive_notify,
.send_tx_power = iwl5000_send_tx_power,
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index 00457bf..cdc07c4 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -1526,6 +1526,191 @@ static int iwl_read_ucode(struct iwl_priv *priv)
return ret;
}
+#ifdef CONFIG_IWLWIFI_DEBUG
+static const char *desc_lookup_text[] = {
+ "OK",
+ "FAIL",
+ "BAD_PARAM",
+ "BAD_CHECKSUM",
+ "NMI_INTERRUPT_WDG",
+ "SYSASSERT",
+ "FATAL_ERROR",
+ "BAD_COMMAND",
+ "HW_ERROR_TUNE_LOCK",
+ "HW_ERROR_TEMPERATURE",
+ "ILLEGAL_CHAN_FREQ",
+ "VCC_NOT_STABLE",
+ "FH_ERROR",
+ "NMI_INTERRUPT_HOST",
+ "NMI_INTERRUPT_ACTION_PT",
+ "NMI_INTERRUPT_UNKNOWN",
+ "UCODE_VERSION_MISMATCH",
+ "HW_ERROR_ABS_LOCK",
+ "HW_ERROR_CAL_LOCK_FAIL",
+ "NMI_INTERRUPT_INST_ACTION_PT",
+ "NMI_INTERRUPT_DATA_ACTION_PT",
+ "NMI_TRM_HW_ER",
+ "NMI_INTERRUPT_TRM",
+ "NMI_INTERRUPT_BREAK_POINT"
+ "DEBUG_0",
+ "DEBUG_1",
+ "DEBUG_2",
+ "DEBUG_3",
+ "UNKNOWN"
+};
+
+static const char *desc_lookup(int i)
+{
+ int max = ARRAY_SIZE(desc_lookup_text) - 1;
+
+ if (i < 0 || i > max)
+ i = max;
+
+ return desc_lookup_text[i];
+}
+
+#define ERROR_START_OFFSET (1 * sizeof(u32))
+#define ERROR_ELEM_SIZE (7 * sizeof(u32))
+
+void iwl_dump_nic_error_log(struct iwl_priv *priv)
+{
+ u32 data2, line;
+ u32 desc, time, count, base, data1;
+ u32 blink1, blink2, ilink1, ilink2;
+
+ if (priv->ucode_type == UCODE_INIT)
+ base = le32_to_cpu(priv->card_alive_init.error_event_table_ptr);
+ else
+ base = le32_to_cpu(priv->card_alive.error_event_table_ptr);
+
+ if (!priv->cfg->ops->lib->is_valid_rtc_data_addr(base)) {
+ IWL_ERR(priv, "Not valid error log pointer 0x%08X\n", base);
+ return;
+ }
+
+ count = iwl_read_targ_mem(priv, base);
+
+ if (ERROR_START_OFFSET <= count * ERROR_ELEM_SIZE) {
+ IWL_ERR(priv, "Start IWL Error Log Dump:\n");
+ IWL_ERR(priv, "Status: 0x%08lX, count: %d\n",
+ priv->status, count);
+ }
+
+ desc = iwl_read_targ_mem(priv, base + 1 * sizeof(u32));
+ blink1 = iwl_read_targ_mem(priv, base + 3 * sizeof(u32));
+ blink2 = iwl_read_targ_mem(priv, base + 4 * sizeof(u32));
+ ilink1 = iwl_read_targ_mem(priv, base + 5 * sizeof(u32));
+ ilink2 = iwl_read_targ_mem(priv, base + 6 * sizeof(u32));
+ data1 = iwl_read_targ_mem(priv, base + 7 * sizeof(u32));
+ data2 = iwl_read_targ_mem(priv, base + 8 * sizeof(u32));
+ line = iwl_read_targ_mem(priv, base + 9 * sizeof(u32));
+ time = iwl_read_targ_mem(priv, base + 11 * sizeof(u32));
+
+ IWL_ERR(priv, "Desc Time "
+ "data1 data2 line\n");
+ IWL_ERR(priv, "%-28s (#%02d) %010u 0x%08X 0x%08X %u\n",
+ desc_lookup(desc), desc, time, data1, data2, line);
+ IWL_ERR(priv, "blink1 blink2 ilink1 ilink2\n");
+ IWL_ERR(priv, "0x%05X 0x%05X 0x%05X 0x%05X\n", blink1, blink2,
+ ilink1, ilink2);
+
+}
+
+#define EVENT_START_OFFSET (4 * sizeof(u32))
+
+/**
+ * iwl_print_event_log - Dump error event log to syslog
+ *
+ */
+static void iwl_print_event_log(struct iwl_priv *priv, u32 start_idx,
+ u32 num_events, u32 mode)
+{
+ u32 i;
+ u32 base; /* SRAM byte address of event log header */
+ u32 event_size; /* 2 u32s, or 3 u32s if timestamp recorded */
+ u32 ptr; /* SRAM byte address of log data */
+ u32 ev, time, data; /* event log data */
+
+ if (num_events == 0)
+ return;
+ if (priv->ucode_type == UCODE_INIT)
+ base = le32_to_cpu(priv->card_alive_init.log_event_table_ptr);
+ else
+ base = le32_to_cpu(priv->card_alive.log_event_table_ptr);
+
+ if (mode == 0)
+ event_size = 2 * sizeof(u32);
+ else
+ event_size = 3 * sizeof(u32);
+
+ ptr = base + EVENT_START_OFFSET + (start_idx * event_size);
+
+ /* "time" is actually "data" for mode 0 (no timestamp).
+ * place event id # at far right for easier visual parsing. */
+ for (i = 0; i < num_events; i++) {
+ ev = iwl_read_targ_mem(priv, ptr);
+ ptr += sizeof(u32);
+ time = iwl_read_targ_mem(priv, ptr);
+ ptr += sizeof(u32);
+ if (mode == 0) {
+ /* data, ev */
+ IWL_ERR(priv, "EVT_LOG:0x%08x:%04u\n", time, ev);
+ } else {
+ data = iwl_read_targ_mem(priv, ptr);
+ ptr += sizeof(u32);
+ IWL_ERR(priv, "EVT_LOGT:%010u:0x%08x:%04u\n",
+ time, data, ev);
+ }
+ }
+}
+
+void iwl_dump_nic_event_log(struct iwl_priv *priv)
+{
+ u32 base; /* SRAM byte address of event log header */
+ u32 capacity; /* event log capacity in # entries */
+ u32 mode; /* 0 - no timestamp, 1 - timestamp recorded */
+ u32 num_wraps; /* # times uCode wrapped to top of log */
+ u32 next_entry; /* index of next entry to be written by uCode */
+ u32 size; /* # entries that we'll print */
+
+ if (priv->ucode_type == UCODE_INIT)
+ base = le32_to_cpu(priv->card_alive_init.log_event_table_ptr);
+ else
+ base = le32_to_cpu(priv->card_alive.log_event_table_ptr);
+
+ if (!priv->cfg->ops->lib->is_valid_rtc_data_addr(base)) {
+ IWL_ERR(priv, "Invalid event log pointer 0x%08X\n", base);
+ return;
+ }
+
+ /* event log header */
+ capacity = iwl_read_targ_mem(priv, base);
+ mode = iwl_read_targ_mem(priv, base + (1 * sizeof(u32)));
+ num_wraps = iwl_read_targ_mem(priv, base + (2 * sizeof(u32)));
+ next_entry = iwl_read_targ_mem(priv, base + (3 * sizeof(u32)));
+
+ size = num_wraps ? capacity : next_entry;
+
+ /* bail out if nothing in log */
+ if (size == 0) {
+ IWL_ERR(priv, "Start IWL Event Log Dump: nothing in log\n");
+ return;
+ }
+
+ IWL_ERR(priv, "Start IWL Event Log Dump: display count %d, wraps %d\n",
+ size, num_wraps);
+
+ /* if uCode has wrapped back to top of log, start at the oldest entry,
+ * i.e the next one that uCode would fill. */
+ if (num_wraps)
+ iwl_print_event_log(priv, next_entry,
+ capacity - next_entry, mode);
+ /* (then/else) start at top of log */
+ iwl_print_event_log(priv, 0, next_entry, mode);
+
+}
+#endif
+
/**
* iwl_alive_start - called after REPLY_ALIVE notification received
* from protocol/runtime uCode (initialization uCode's
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
index fd26c0d..484d5c1 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.c
+++ b/drivers/net/wireless/iwlwifi/iwl-core.c
@@ -1309,189 +1309,6 @@ static void iwl_print_rx_config_cmd(struct iwl_priv *priv)
IWL_DEBUG_RADIO(priv, "u8[6] bssid_addr: %pM\n", rxon->bssid_addr);
IWL_DEBUG_RADIO(priv, "u16 assoc_id: 0x%x\n", le16_to_cpu(rxon->assoc_id));
}
-
-static const char *desc_lookup_text[] = {
- "OK",
- "FAIL",
- "BAD_PARAM",
- "BAD_CHECKSUM",
- "NMI_INTERRUPT_WDG",
- "SYSASSERT",
- "FATAL_ERROR",
- "BAD_COMMAND",
- "HW_ERROR_TUNE_LOCK",
- "HW_ERROR_TEMPERATURE",
- "ILLEGAL_CHAN_FREQ",
- "VCC_NOT_STABLE",
- "FH_ERROR",
- "NMI_INTERRUPT_HOST",
- "NMI_INTERRUPT_ACTION_PT",
- "NMI_INTERRUPT_UNKNOWN",
- "UCODE_VERSION_MISMATCH",
- "HW_ERROR_ABS_LOCK",
- "HW_ERROR_CAL_LOCK_FAIL",
- "NMI_INTERRUPT_INST_ACTION_PT",
- "NMI_INTERRUPT_DATA_ACTION_PT",
- "NMI_TRM_HW_ER",
- "NMI_INTERRUPT_TRM",
- "NMI_INTERRUPT_BREAK_POINT"
- "DEBUG_0",
- "DEBUG_1",
- "DEBUG_2",
- "DEBUG_3",
- "UNKNOWN"
-};
-
-static const char *desc_lookup(int i)
-{
- int max = ARRAY_SIZE(desc_lookup_text) - 1;
-
- if (i < 0 || i > max)
- i = max;
-
- return desc_lookup_text[i];
-}
-
-#define ERROR_START_OFFSET (1 * sizeof(u32))
-#define ERROR_ELEM_SIZE (7 * sizeof(u32))
-
-static void iwl_dump_nic_error_log(struct iwl_priv *priv)
-{
- u32 data2, line;
- u32 desc, time, count, base, data1;
- u32 blink1, blink2, ilink1, ilink2;
-
- if (priv->ucode_type == UCODE_INIT)
- base = le32_to_cpu(priv->card_alive_init.error_event_table_ptr);
- else
- base = le32_to_cpu(priv->card_alive.error_event_table_ptr);
-
- if (!priv->cfg->ops->lib->is_valid_rtc_data_addr(base)) {
- IWL_ERR(priv, "Not valid error log pointer 0x%08X\n", base);
- return;
- }
-
- count = iwl_read_targ_mem(priv, base);
-
- if (ERROR_START_OFFSET <= count * ERROR_ELEM_SIZE) {
- IWL_ERR(priv, "Start IWL Error Log Dump:\n");
- IWL_ERR(priv, "Status: 0x%08lX, count: %d\n",
- priv->status, count);
- }
-
- desc = iwl_read_targ_mem(priv, base + 1 * sizeof(u32));
- blink1 = iwl_read_targ_mem(priv, base + 3 * sizeof(u32));
- blink2 = iwl_read_targ_mem(priv, base + 4 * sizeof(u32));
- ilink1 = iwl_read_targ_mem(priv, base + 5 * sizeof(u32));
- ilink2 = iwl_read_targ_mem(priv, base + 6 * sizeof(u32));
- data1 = iwl_read_targ_mem(priv, base + 7 * sizeof(u32));
- data2 = iwl_read_targ_mem(priv, base + 8 * sizeof(u32));
- line = iwl_read_targ_mem(priv, base + 9 * sizeof(u32));
- time = iwl_read_targ_mem(priv, base + 11 * sizeof(u32));
-
- IWL_ERR(priv, "Desc Time "
- "data1 data2 line\n");
- IWL_ERR(priv, "%-28s (#%02d) %010u 0x%08X 0x%08X %u\n",
- desc_lookup(desc), desc, time, data1, data2, line);
- IWL_ERR(priv, "blink1 blink2 ilink1 ilink2\n");
- IWL_ERR(priv, "0x%05X 0x%05X 0x%05X 0x%05X\n", blink1, blink2,
- ilink1, ilink2);
-
-}
-
-#define EVENT_START_OFFSET (4 * sizeof(u32))
-
-/**
- * iwl_print_event_log - Dump error event log to syslog
- *
- */
-static void iwl_print_event_log(struct iwl_priv *priv, u32 start_idx,
- u32 num_events, u32 mode)
-{
- u32 i;
- u32 base; /* SRAM byte address of event log header */
- u32 event_size; /* 2 u32s, or 3 u32s if timestamp recorded */
- u32 ptr; /* SRAM byte address of log data */
- u32 ev, time, data; /* event log data */
-
- if (num_events == 0)
- return;
- if (priv->ucode_type == UCODE_INIT)
- base = le32_to_cpu(priv->card_alive_init.log_event_table_ptr);
- else
- base = le32_to_cpu(priv->card_alive.log_event_table_ptr);
-
- if (mode == 0)
- event_size = 2 * sizeof(u32);
- else
- event_size = 3 * sizeof(u32);
-
- ptr = base + EVENT_START_OFFSET + (start_idx * event_size);
-
- /* "time" is actually "data" for mode 0 (no timestamp).
- * place event id # at far right for easier visual parsing. */
- for (i = 0; i < num_events; i++) {
- ev = iwl_read_targ_mem(priv, ptr);
- ptr += sizeof(u32);
- time = iwl_read_targ_mem(priv, ptr);
- ptr += sizeof(u32);
- if (mode == 0) {
- /* data, ev */
- IWL_ERR(priv, "EVT_LOG:0x%08x:%04u\n", time, ev);
- } else {
- data = iwl_read_targ_mem(priv, ptr);
- ptr += sizeof(u32);
- IWL_ERR(priv, "EVT_LOGT:%010u:0x%08x:%04u\n",
- time, data, ev);
- }
- }
-}
-
-void iwl_dump_nic_event_log(struct iwl_priv *priv)
-{
- u32 base; /* SRAM byte address of event log header */
- u32 capacity; /* event log capacity in # entries */
- u32 mode; /* 0 - no timestamp, 1 - timestamp recorded */
- u32 num_wraps; /* # times uCode wrapped to top of log */
- u32 next_entry; /* index of next entry to be written by uCode */
- u32 size; /* # entries that we'll print */
-
- if (priv->ucode_type == UCODE_INIT)
- base = le32_to_cpu(priv->card_alive_init.log_event_table_ptr);
- else
- base = le32_to_cpu(priv->card_alive.log_event_table_ptr);
-
- if (!priv->cfg->ops->lib->is_valid_rtc_data_addr(base)) {
- IWL_ERR(priv, "Invalid event log pointer 0x%08X\n", base);
- return;
- }
-
- /* event log header */
- capacity = iwl_read_targ_mem(priv, base);
- mode = iwl_read_targ_mem(priv, base + (1 * sizeof(u32)));
- num_wraps = iwl_read_targ_mem(priv, base + (2 * sizeof(u32)));
- next_entry = iwl_read_targ_mem(priv, base + (3 * sizeof(u32)));
-
- size = num_wraps ? capacity : next_entry;
-
- /* bail out if nothing in log */
- if (size == 0) {
- IWL_ERR(priv, "Start IWL Event Log Dump: nothing in log\n");
- return;
- }
-
- IWL_ERR(priv, "Start IWL Event Log Dump: display count %d, wraps %d\n",
- size, num_wraps);
-
- /* if uCode has wrapped back to top of log, start at the oldest entry,
- * i.e the next one that uCode would fill. */
- if (num_wraps)
- iwl_print_event_log(priv, next_entry,
- capacity - next_entry, mode);
- /* (then/else) start at top of log */
- iwl_print_event_log(priv, 0, next_entry, mode);
-
-}
#endif
/**
* iwl_irq_handle_error - called for HW or SW error interrupt from card
@@ -1506,8 +1323,8 @@ void iwl_irq_handle_error(struct iwl_priv *priv)
#ifdef CONFIG_IWLWIFI_DEBUG
if (iwl_get_debug_level(priv) & IWL_DL_FW_ERRORS) {
- iwl_dump_nic_error_log(priv);
- iwl_dump_nic_event_log(priv);
+ priv->cfg->ops->lib->dump_nic_error_log(priv);
+ priv->cfg->ops->lib->dump_nic_event_log(priv);
iwl_print_rx_config_cmd(priv);
}
#endif
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h
index 7ff9ffb..e50103a 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.h
+++ b/drivers/net/wireless/iwlwifi/iwl-core.h
@@ -166,6 +166,8 @@ struct iwl_lib_ops {
int (*is_valid_rtc_data_addr)(u32 addr);
/* 1st ucode load */
int (*load_ucode)(struct iwl_priv *priv);
+ void (*dump_nic_event_log)(struct iwl_priv *priv);
+ void (*dump_nic_error_log)(struct iwl_priv *priv);
/* power management */
struct iwl_apm_ops apm_ops;
@@ -540,7 +542,19 @@ int iwl_pci_resume(struct pci_dev *pdev);
/*****************************************************
* Error Handling Debugging
******************************************************/
+#ifdef CONFIG_IWLWIFI_DEBUG
void iwl_dump_nic_event_log(struct iwl_priv *priv);
+void iwl_dump_nic_error_log(struct iwl_priv *priv);
+#else
+static inline void iwl_dump_nic_event_log(struct iwl_priv *priv)
+{
+}
+
+static inline void iwl_dump_nic_error_log(struct iwl_priv *priv)
+{
+}
+#endif
+
void iwl_clear_isr_stats(struct iwl_priv *priv);
/*****************************************************
diff --git a/drivers/net/wireless/iwlwifi/iwl-debugfs.c b/drivers/net/wireless/iwlwifi/iwl-debugfs.c
index fb84485..a198bcf 100644
--- a/drivers/net/wireless/iwlwifi/iwl-debugfs.c
+++ b/drivers/net/wireless/iwlwifi/iwl-debugfs.c
@@ -410,7 +410,7 @@ static ssize_t iwl_dbgfs_nvm_read(struct file *file,
pos += scnprintf(buf + pos, buf_size - pos, "0x%.4x ", ofs);
hex_dump_to_buffer(ptr + ofs, 16 , 16, 2, buf + pos,
buf_size - pos, 0);
- pos += strlen(buf);
+ pos += strlen(buf + pos);
if (buf_size - pos > 0)
buf[pos++] = '\n';
}
@@ -436,7 +436,7 @@ static ssize_t iwl_dbgfs_log_event_write(struct file *file,
if (sscanf(buf, "%d", &event_log_flag) != 1)
return -EFAULT;
if (event_log_flag == 1)
- iwl_dump_nic_event_log(priv);
+ priv->cfg->ops->lib->dump_nic_event_log(priv);
return count;
}
@@ -909,7 +909,7 @@ static ssize_t iwl_dbgfs_traffic_log_read(struct file *file,
"0x%.4x ", ofs);
hex_dump_to_buffer(ptr + ofs, 16, 16, 2,
buf + pos, bufsz - pos, 0);
- pos += strlen(buf);
+ pos += strlen(buf + pos);
if (bufsz - pos > 0)
buf[pos++] = '\n';
}
@@ -932,7 +932,7 @@ static ssize_t iwl_dbgfs_traffic_log_read(struct file *file,
"0x%.4x ", ofs);
hex_dump_to_buffer(ptr + ofs, 16, 16, 2,
buf + pos, bufsz - pos, 0);
- pos += strlen(buf);
+ pos += strlen(buf + pos);
if (bufsz - pos > 0)
buf[pos++] = '\n';
}
diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c
index a7422e5..c189075 100644
--- a/drivers/net/wireless/iwlwifi/iwl-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-tx.c
@@ -197,6 +197,12 @@ void iwl_cmd_queue_free(struct iwl_priv *priv)
pci_free_consistent(dev, priv->hw_params.tfd_size *
txq->q.n_bd, txq->tfds, txq->q.dma_addr);
+ /* deallocate arrays */
+ kfree(txq->cmd);
+ kfree(txq->meta);
+ txq->cmd = NULL;
+ txq->meta = NULL;
+
/* 0-fill queue descriptor structure */
memset(txq, 0, sizeof(*txq));
}
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c
index 4f2d439..c390dbd 100644
--- a/drivers/net/wireless/iwlwifi/iwl3945-base.c
+++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c
@@ -1481,6 +1481,7 @@ static inline void iwl_synchronize_irq(struct iwl_priv *priv)
tasklet_kill(&priv->irq_tasklet);
}
+#ifdef CONFIG_IWLWIFI_DEBUG
static const char *desc_lookup(int i)
{
switch (i) {
@@ -1504,7 +1505,7 @@ static const char *desc_lookup(int i)
#define ERROR_START_OFFSET (1 * sizeof(u32))
#define ERROR_ELEM_SIZE (7 * sizeof(u32))
-static void iwl3945_dump_nic_error_log(struct iwl_priv *priv)
+void iwl3945_dump_nic_error_log(struct iwl_priv *priv)
{
u32 i;
u32 desc, time, count, base, data1;
@@ -1598,7 +1599,7 @@ static void iwl3945_print_event_log(struct iwl_priv *priv, u32 start_idx,
}
}
-static void iwl3945_dump_nic_event_log(struct iwl_priv *priv)
+void iwl3945_dump_nic_event_log(struct iwl_priv *priv)
{
u32 base; /* SRAM byte address of event log header */
u32 capacity; /* event log capacity in # entries */
@@ -1640,6 +1641,16 @@ static void iwl3945_dump_nic_event_log(struct iwl_priv *priv)
iwl3945_print_event_log(priv, 0, next_entry, mode);
}
+#else
+void iwl3945_dump_nic_event_log(struct iwl_priv *priv)
+{
+}
+
+void iwl3945_dump_nic_error_log(struct iwl_priv *priv)
+{
+}
+
+#endif
static void iwl3945_irq_tasklet(struct iwl_priv *priv)
{
@@ -3683,21 +3694,6 @@ static ssize_t dump_error_log(struct device *d,
static DEVICE_ATTR(dump_errors, S_IWUSR, NULL, dump_error_log);
-static ssize_t dump_event_log(struct device *d,
- struct device_attribute *attr,
- const char *buf, size_t count)
-{
- struct iwl_priv *priv = dev_get_drvdata(d);
- char *p = (char *)buf;
-
- if (p[0] == '1')
- iwl3945_dump_nic_event_log(priv);
-
- return strnlen(buf, count);
-}
-
-static DEVICE_ATTR(dump_events, S_IWUSR, NULL, dump_event_log);
-
/*****************************************************************************
*
* driver setup and tear down
@@ -3742,7 +3738,6 @@ static struct attribute *iwl3945_sysfs_entries[] = {
&dev_attr_antenna.attr,
&dev_attr_channels.attr,
&dev_attr_dump_errors.attr,
- &dev_attr_dump_events.attr,
&dev_attr_flags.attr,
&dev_attr_filter_flags.attr,
#ifdef CONFIG_IWL3945_SPECTRUM_MEASUREMENT
diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c
index f9f68e0..afdbdaa 100644
--- a/drivers/platform/x86/sony-laptop.c
+++ b/drivers/platform/x86/sony-laptop.c
@@ -1041,6 +1041,9 @@ static int sony_nc_resume(struct acpi_device *device)
sony_backlight_update_status(sony_backlight_device) < 0)
printk(KERN_WARNING DRV_PFX "unable to restore brightness level\n");
+ /* re-read rfkill state */
+ sony_nc_rfkill_update();
+
return 0;
}
@@ -1078,6 +1081,8 @@ static int sony_nc_setup_rfkill(struct acpi_device *device,
struct rfkill *rfk;
enum rfkill_type type;
const char *name;
+ int result;
+ bool hwblock;
switch (nc_type) {
case SONY_WIFI:
@@ -1105,6 +1110,10 @@ static int sony_nc_setup_rfkill(struct acpi_device *device,
if (!rfk)
return -ENOMEM;
+ sony_call_snc_handle(0x124, 0x200, &result);
+ hwblock = !(result & 0x1);
+ rfkill_set_hw_state(rfk, hwblock);
+
err = rfkill_register(rfk);
if (err) {
rfkill_destroy(rfk);
diff --git a/include/net/wext.h b/include/net/wext.h
index 6d76a39..3f2b94d 100644
--- a/include/net/wext.h
+++ b/include/net/wext.h
@@ -14,6 +14,7 @@ extern int wext_handle_ioctl(struct net *net, struct ifreq *ifr, unsigned int cm
void __user *arg);
extern int compat_wext_handle_ioctl(struct net *net, unsigned int cmd,
unsigned long arg);
+extern struct iw_statistics *get_wireless_stats(struct net_device *dev);
#else
static inline int wext_proc_init(struct net *net)
{
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
index 7d4c575..821d309 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -16,7 +16,7 @@
#include <net/sock.h>
#include <linux/rtnetlink.h>
#include <linux/wireless.h>
-#include <net/iw_handler.h>
+#include <net/wext.h>
#include "net-sysfs.h"
@@ -363,15 +363,13 @@ static ssize_t wireless_show(struct device *d, char *buf,
char *))
{
struct net_device *dev = to_net_dev(d);
- const struct iw_statistics *iw = NULL;
+ const struct iw_statistics *iw;
ssize_t ret = -EINVAL;
read_lock(&dev_base_lock);
if (dev_isalive(dev)) {
- if (dev->wireless_handlers &&
- dev->wireless_handlers->get_wireless_stats)
- iw = dev->wireless_handlers->get_wireless_stats(dev);
- if (iw != NULL)
+ iw = get_wireless_stats(dev);
+ if (iw)
ret = (*format)(iw, buf);
}
read_unlock(&dev_base_lock);
@@ -505,7 +503,7 @@ int netdev_register_kobject(struct net_device *net)
*groups++ = &netstat_group;
#ifdef CONFIG_WIRELESS_EXT_SYSFS
- if (net->wireless_handlers && net->wireless_handlers->get_wireless_stats)
+ if (net->wireless_handlers || net->ieee80211_ptr)
*groups++ = &wireless_group;
#endif
#endif /* CONFIG_SYSFS */
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 97a278a..8d26e9b 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -1388,8 +1388,8 @@ ieee80211_rx_mgmt_disassoc(struct ieee80211_sub_if_data *sdata,
reason_code = le16_to_cpu(mgmt->u.disassoc.reason_code);
- printk(KERN_DEBUG "%s: disassociated (Reason: %u)\n",
- sdata->dev->name, reason_code);
+ printk(KERN_DEBUG "%s: disassociated from %pM (Reason: %u)\n",
+ sdata->dev->name, mgmt->sa, reason_code);
ieee80211_set_disassoc(sdata, false);
return RX_MGMT_CFG80211_DISASSOC;
@@ -1675,7 +1675,7 @@ static void ieee80211_rx_mgmt_probe_resp(struct ieee80211_sub_if_data *sdata,
/* direct probe may be part of the association flow */
if (wk && wk->state == IEEE80211_MGD_STATE_PROBE) {
- printk(KERN_DEBUG "%s direct probe responded\n",
+ printk(KERN_DEBUG "%s: direct probe responded\n",
sdata->dev->name);
wk->tries = 0;
wk->state = IEEE80211_MGD_STATE_AUTH;
@@ -2502,9 +2502,6 @@ int ieee80211_mgd_deauth(struct ieee80211_sub_if_data *sdata,
struct ieee80211_mgd_work *wk;
const u8 *bssid = NULL;
- printk(KERN_DEBUG "%s: deauthenticating by local choice (reason=%d)\n",
- sdata->dev->name, req->reason_code);
-
mutex_lock(&ifmgd->mtx);
if (ifmgd->associated && &ifmgd->associated->cbss == req->bss) {
@@ -2532,6 +2529,9 @@ int ieee80211_mgd_deauth(struct ieee80211_sub_if_data *sdata,
mutex_unlock(&ifmgd->mtx);
+ printk(KERN_DEBUG "%s: deauthenticating from %pM by local choice (reason=%d)\n",
+ sdata->dev->name, bssid, req->reason_code);
+
ieee80211_send_deauth_disassoc(sdata, bssid,
IEEE80211_STYPE_DEAUTH, req->reason_code,
cookie);
@@ -2545,9 +2545,6 @@ int ieee80211_mgd_disassoc(struct ieee80211_sub_if_data *sdata,
{
struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
- printk(KERN_DEBUG "%s: disassociating by local choice (reason=%d)\n",
- sdata->dev->name, req->reason_code);
-
mutex_lock(&ifmgd->mtx);
/*
@@ -2561,6 +2558,9 @@ int ieee80211_mgd_disassoc(struct ieee80211_sub_if_data *sdata,
return -ENOLINK;
}
+ printk(KERN_DEBUG "%s: disassociating from %pM by local choice (reason=%d)\n",
+ sdata->dev->name, req->bss->bssid, req->reason_code);
+
ieee80211_set_disassoc(sdata, false);
mutex_unlock(&ifmgd->mtx);
diff --git a/net/wireless/sme.c b/net/wireless/sme.c
index 7fae7ee..93c3ed3 100644
--- a/net/wireless/sme.c
+++ b/net/wireless/sme.c
@@ -762,9 +762,8 @@ int __cfg80211_connect(struct cfg80211_registered_device *rdev,
wdev->conn->params.ssid = wdev->ssid;
wdev->conn->params.ssid_len = connect->ssid_len;
- /* don't care about result -- but fill bssid & channel */
- if (!wdev->conn->params.bssid || !wdev->conn->params.channel)
- bss = cfg80211_get_conn_bss(wdev);
+ /* see if we have the bss already */
+ bss = cfg80211_get_conn_bss(wdev);
wdev->sme_state = CFG80211_SME_CONNECTING;
wdev->connect_keys = connkeys;
diff --git a/net/wireless/wext-sme.c b/net/wireless/wext-sme.c
index bf72527..5615a88 100644
--- a/net/wireless/wext-sme.c
+++ b/net/wireless/wext-sme.c
@@ -30,7 +30,8 @@ int cfg80211_mgd_wext_connect(struct cfg80211_registered_device *rdev,
if (wdev->wext.keys) {
wdev->wext.keys->def = wdev->wext.default_key;
wdev->wext.keys->defmgmt = wdev->wext.default_mgmt_key;
- wdev->wext.connect.privacy = true;
+ if (wdev->wext.default_key != -1)
+ wdev->wext.connect.privacy = true;
}
if (!wdev->wext.connect.ssid_len)
@@ -229,8 +230,7 @@ int cfg80211_mgd_wext_giwessid(struct net_device *dev,
data->flags = 1;
data->length = wdev->wext.connect.ssid_len;
memcpy(ssid, wdev->wext.connect.ssid, data->length);
- } else
- data->flags = 0;
+ }
wdev_unlock(wdev);
return 0;
@@ -306,8 +306,6 @@ int cfg80211_mgd_wext_giwap(struct net_device *dev,
wdev_lock(wdev);
if (wdev->current_bss)
memcpy(ap_addr->sa_data, wdev->current_bss->pub.bssid, ETH_ALEN);
- else if (wdev->wext.connect.bssid)
- memcpy(ap_addr->sa_data, wdev->wext.connect.bssid, ETH_ALEN);
else
memset(ap_addr->sa_data, 0, ETH_ALEN);
wdev_unlock(wdev);
diff --git a/net/wireless/wext.c b/net/wireless/wext.c
index 5b4a0ce..60fe577 100644
--- a/net/wireless/wext.c
+++ b/net/wireless/wext.c
@@ -470,7 +470,7 @@ static iw_handler get_handler(struct net_device *dev, unsigned int cmd)
/*
* Get statistics out of the driver
*/
-static struct iw_statistics *get_wireless_stats(struct net_device *dev)
+struct iw_statistics *get_wireless_stats(struct net_device *dev)
{
/* New location */
if ((dev->wireless_handlers != NULL) &&
@@ -773,10 +773,13 @@ static int ioctl_standard_iw_point(struct iw_point *iwp, unsigned int cmd,
essid_compat = 1;
else if (IW_IS_SET(cmd) && (iwp->length != 0)) {
char essid[IW_ESSID_MAX_SIZE + 1];
+ unsigned int len;
+ len = iwp->length * descr->token_size;
- err = copy_from_user(essid, iwp->pointer,
- iwp->length *
- descr->token_size);
+ if (len > IW_ESSID_MAX_SIZE)
+ return -EFAULT;
+
+ err = copy_from_user(essid, iwp->pointer, len);
if (err)
return -EFAULT;
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
^ permalink raw reply related
* Re: A problem loading ssb module
From: Luis R. Rodriguez @ 2009-09-28 21:00 UTC (permalink / raw)
To: Tim Gardner
Cc: Luis Rodriguez, Luis R. Rodriguez, Clyde McPherson,
Hauke Mehrtens, linux-wireless, bcm43xx-dev@lists.berlios.de
In-Reply-To: <4AC11ED6.2010706@canonical.com>
On Mon, Sep 28, 2009 at 01:38:46PM -0700, Tim Gardner wrote:
> Luis R. Rodriguez wrote:
> > On Mon, Sep 28, 2009 at 01:00:55PM -0700, Tim Gardner wrote:
> >> Luis R. Rodriguez wrote:
> >>> On Sun, Sep 27, 2009 at 12:50:19PM -0700, Luis R. Rodriguez wrote:
> >>>> On Sun, Sep 27, 2009 at 8:15 AM, Clyde McPherson <ccmcphe@verizon.net> wrote:
> >>>>>> On Thu, Sep 24, 2009 at 11:33 AM, Hauke Mehrtens <hauke@hauke-m.de> wrote:
> >>>>>>
> >>>>>>> Bryan Wu wrote:
> >>>>>>>
> >>>>>>>> Mauro Di Domenico wrote:
> >>>>>>>>
> >>>>>>>>> Hi,
> >>>>>>>>> I'm testing new b43 modules for my 14e4:4315 broadcom card.
> >>>>>>>>> I've compiled and installed compat-wireless-2009-09-16 in a debian
> >>>>>>>>> machine with kernel version 2.6.30-6.
> >>>>>>>>>
> >>>>>>>>> During the boot I experience this problem:
> >>>>>>>>>
> >>>>>>>>> $ dmesg|egrep "b43|ssb"
> >>>>>>>>>
> >>>>>>>>> [ 2.384463] b43-pci-bridge 0000:06:00.0: PCI INT A -> GSI 17 (level,
> >>>>>>>>> low) -> IRQ 17
> >>>>>>>>> [ 2.384477] b43-pci-bridge 0000:06:00.0: setting latency timer to 64
> >>>>>>>>> [ 2.544344] ssb: Sonics Silicon Backplane found on PCI device
> >>>>>>>>> 0000:06:00.0
> >>>>>>>>> [ 6.968981] b43: disagrees about version of symbol
> >>>>>>>>> ssb_device_is_enabled
> >>>>>>>>> [ 6.968986] b43: Unknown symbol ssb_device_is_enabled
> >>>>>>>>> [ 6.969280] b43: Unknown symbol ssb_pmu_set_ldo_paref
> >>>>>>>>> [ 6.969407] b43: disagrees about version of symbol
> >>>>>>>>> ssb_pcicore_dev_irqvecs_enable
> >>>>>>>>> [ 6.969410] b43: Unknown symbol ssb_pcicore_dev_irqvecs_enable
> >>>>>>>>> .....
> >>>>>>>>> ....
> >>>>>>>>> ...
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>> I faced the exactly same issue as Mauro did. +1 from me, but currently
> >>>>>>>> have
> >>>>>>>> no time to take a deeper look.
> >>>>>>>>
> >>>>>>>> Thanks
> >>>>>>>>
> >>>>>>> Hi,
> >>>>>>>
> >>>>>>> I had the same problem with the ssb module and compat-wireless in ubuntu
> >>>>>>> 9.04. The problem is that the ssb module is integrated into the
> >>>>>>> initramfs image. The version out of the initramfs image is loaded on
> >>>>>>> startup and not the version of compat-wireless. Running "sudo
> >>>>>>> update-initramfs -u" after installing compat-wireless and restaing the
> >>>>>>> system fixes the problem for me. Either Debian/Ubuntu should remove ssb
> >>>>>>> form default initramfs image or compat-wireless should update the image
> >>>>>>> with the install command. At least the compat-wireless documentation
> >>>>>>> needs an update.
> >>>>>>>
> >>>>>>> Hauke
> >>>>>>>
> >>>>>>> (adding Luis and linux-wireless list)
> >>>>>>>
> >>>>>> Tim, do you guys update the initramfs upon installation of lbm? If a
> >>>>>> user does not use lbm and uses compat-wireless I suppose we need to do
> >>>>>> something similar.
> >>>>>>
> >>>>>> Luis
> >>>>>> _______________________________________________
> >>>>>> Bcm43xx-dev mailing list
> >>>>>> Bcm43xx-dev@lists.berlios.de
> >>>>>> https://lists.berlios.de/mailman/listinfo/bcm43xx-dev
> >>>>>>
> >>>>> All:
> >>>>> I have a large group that uses the ssb module along with the Broadcom 4318,
> >>>>> in a CF form factor. If the CF card is inserted before boot, and the ssb
> >>>>> module is not in the initrd process, the laptops lock up and do not become
> >>>>> operational. The solution to this problem is/was adding the ssb.ko to the
> >>>>> initrd process. So I agree with Luis on this, the ssb module will have to be
> >>>>> added/updated to the initrd process. As for PCI operations, I don't know,
> >>>>> but for PCMCIA operations ssb.ko has to be added and/or updated. Anytime I
> >>>>> am testing new releases of b43, I run "update-initramfs -u" to update the
> >>>>> ssb module. (Sometimes you can do a rmmod ssb and rmmod b43, and then
> >>>>> modprobe them back in. - This saves a reboot)
> >>>> But why is ssb, b43, b44 needed upon early boot?
> >>> OK the reason seems to be netboot. Yeah the only fix for distros who want
> >>> this on the initramfs is to update it after a compat-wireless package is
> >>> installed. I suppose we can add a hook to compat-wireless for each distro.
> >>> I'm only familiar with Ubuntu way of doing this so if people are interested
> >>> in other distros you'll need to point/test how to do this on there.
> >>>
> >>> Please try this patch against compat-wireless: (also attached)
> >>>
> >>> From 99af88246c2de71aa799de2b63f9d9ccac41634f Mon Sep 17 00:00:00 2001
> >>> From: Luis R. Rodriguez <lrodriguez@atheros.com>
> >>> Date: Sun, 27 Sep 2009 13:58:22 -0700
> >>> Subject: [PATCH] Add scripts/update-initramfs and use it
> >>>
> >>> Some distributions may ship b44 and ssb on the initramfs for
> >>> netboot. To help with this we need to update the initrafms
> >>> for those distributions.
> >>>
> >>> Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
> >>> ---
> >>> Makefile | 1 +
> >>> scripts/update-initramfs | 33 +++++++++++++++++++++++++++++++++
> >>> 2 files changed, 34 insertions(+), 0 deletions(-)
> >>> create mode 100755 scripts/update-initramfs
> >>>
> >>> diff --git a/Makefile b/Makefile
> >>> index ab97de0..c7333a2 100644
> >>> --- a/Makefile
> >>> +++ b/Makefile
> >>> @@ -65,6 +65,7 @@ install: uninstall install-modules install-scripts
> >>> install-modules: modules
> >>> $(MAKE) -C $(KLIB_BUILD) M=$(PWD) $(KMODDIR_ARG) $(KMODPATH_ARG) \
> >>> modules_install
> >>> + @./scripts/update-initramfs
> >>>
> >>> install-scripts:
> >>> @# All the scripts we can use
> >>> diff --git a/scripts/update-initramfs b/scripts/update-initramfs
> >>> new file mode 100755
> >>> index 0000000..412d885
> >>> --- /dev/null
> >>> +++ b/scripts/update-initramfs
> >>> @@ -0,0 +1,33 @@
> >>> +#!/bin/bash
> >>> +# Copyright 2009 Luis R. Rodriguez <mcgrof@gmail.com>
> >>> +#
> >>> +# Since we provide ssb, the Ethernet module b44 some people may
> >>> +# rely on it to netboot, so update the initrafms for each
> >>> +# distribution.
> >>> +#
> >>> +# Note that in the future people may want to wireless-boot
> >>> +# so this will help with that as well.
> >>> +
> >>> +LSB_RED_ID=$(/usr/bin/lsb_release -i -s)
> >>> +
> >>> +KLIB=/lib/modules/2.6.31-wl/build
> >>> +ver=$(echo $KLIB | awk -F "/lib/modules/" '{print $2}' | awk -F"/" '{print $1}')
> >>> +dir=/boot/
> >>> +
> >>> +case $LSB_RED_ID in
> >>> +"Ubuntu")
> >>> + echo "Updating Ubuntu's initramfs for $ver under $dir ..."
> >>> + mkinitramfs -o $dir/initrd.img-$ver $ver
> >>> + echo "Will now run update-grub to ensure grub will find the new initramfs ..."
> >>> + update-grub
> >>> + ;;
> >>> +*)
> >>> + echo "Warning:"
> >>> + echo "You may or may not need to update your initframfs, you should if"
> >>> + echo "any of the modules installed are part of your initramfs. To add"
> >>> + echo "support for your distribution to do this automatically send a"
> >>> + echo "patch against $0. If your distribution does not require this"
> >>> + echo "send a patch against the '/usr/bin/lsb_release -i -s': $LSB_RED_ID"
> >>> + echo "tag for your distribution to avoid this warning."
> >>> + ;;
> >>> +esac
> >>>
> >> Luis - I'll do something similar in a post install script for Karmic LBM
> >
> > Great, thanks for the heads up.
> >
> >> since the install-modules target in your makefile isn't used for a
> >> debian install.
> >
> > Not sure I followed this part, what do you mean?
> >
>
> It has to do with the way debian packages are installed. In the case of
> LBM, the .ko files from the binary package are simply copied to their
> target locations during 'apt-get install'. Therefore, a post
> installation script needs to be run that updates the initramfs.
Oh I see, the debian/rules file entry for install, got it.
Luis
^ permalink raw reply
* Re: A problem loading ssb module
From: Tim Gardner @ 2009-09-28 20:38 UTC (permalink / raw)
To: Luis R. Rodriguez
Cc: Luis R. Rodriguez, Luis Rodriguez, Clyde McPherson,
Hauke Mehrtens, linux-wireless, bcm43xx-dev@lists.berlios.de
In-Reply-To: <20090928200759.GC7788@mosca>
Luis R. Rodriguez wrote:
> On Mon, Sep 28, 2009 at 01:00:55PM -0700, Tim Gardner wrote:
>> Luis R. Rodriguez wrote:
>>> On Sun, Sep 27, 2009 at 12:50:19PM -0700, Luis R. Rodriguez wrote:
>>>> On Sun, Sep 27, 2009 at 8:15 AM, Clyde McPherson <ccmcphe@verizon.net> wrote:
>>>>>> On Thu, Sep 24, 2009 at 11:33 AM, Hauke Mehrtens <hauke@hauke-m.de> wrote:
>>>>>>
>>>>>>> Bryan Wu wrote:
>>>>>>>
>>>>>>>> Mauro Di Domenico wrote:
>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>> I'm testing new b43 modules for my 14e4:4315 broadcom card.
>>>>>>>>> I've compiled and installed compat-wireless-2009-09-16 in a debian
>>>>>>>>> machine with kernel version 2.6.30-6.
>>>>>>>>>
>>>>>>>>> During the boot I experience this problem:
>>>>>>>>>
>>>>>>>>> $ dmesg|egrep "b43|ssb"
>>>>>>>>>
>>>>>>>>> [ 2.384463] b43-pci-bridge 0000:06:00.0: PCI INT A -> GSI 17 (level,
>>>>>>>>> low) -> IRQ 17
>>>>>>>>> [ 2.384477] b43-pci-bridge 0000:06:00.0: setting latency timer to 64
>>>>>>>>> [ 2.544344] ssb: Sonics Silicon Backplane found on PCI device
>>>>>>>>> 0000:06:00.0
>>>>>>>>> [ 6.968981] b43: disagrees about version of symbol
>>>>>>>>> ssb_device_is_enabled
>>>>>>>>> [ 6.968986] b43: Unknown symbol ssb_device_is_enabled
>>>>>>>>> [ 6.969280] b43: Unknown symbol ssb_pmu_set_ldo_paref
>>>>>>>>> [ 6.969407] b43: disagrees about version of symbol
>>>>>>>>> ssb_pcicore_dev_irqvecs_enable
>>>>>>>>> [ 6.969410] b43: Unknown symbol ssb_pcicore_dev_irqvecs_enable
>>>>>>>>> .....
>>>>>>>>> ....
>>>>>>>>> ...
>>>>>>>>>
>>>>>>>>>
>>>>>>>> I faced the exactly same issue as Mauro did. +1 from me, but currently
>>>>>>>> have
>>>>>>>> no time to take a deeper look.
>>>>>>>>
>>>>>>>> Thanks
>>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I had the same problem with the ssb module and compat-wireless in ubuntu
>>>>>>> 9.04. The problem is that the ssb module is integrated into the
>>>>>>> initramfs image. The version out of the initramfs image is loaded on
>>>>>>> startup and not the version of compat-wireless. Running "sudo
>>>>>>> update-initramfs -u" after installing compat-wireless and restaing the
>>>>>>> system fixes the problem for me. Either Debian/Ubuntu should remove ssb
>>>>>>> form default initramfs image or compat-wireless should update the image
>>>>>>> with the install command. At least the compat-wireless documentation
>>>>>>> needs an update.
>>>>>>>
>>>>>>> Hauke
>>>>>>>
>>>>>>> (adding Luis and linux-wireless list)
>>>>>>>
>>>>>> Tim, do you guys update the initramfs upon installation of lbm? If a
>>>>>> user does not use lbm and uses compat-wireless I suppose we need to do
>>>>>> something similar.
>>>>>>
>>>>>> Luis
>>>>>> _______________________________________________
>>>>>> Bcm43xx-dev mailing list
>>>>>> Bcm43xx-dev@lists.berlios.de
>>>>>> https://lists.berlios.de/mailman/listinfo/bcm43xx-dev
>>>>>>
>>>>> All:
>>>>> I have a large group that uses the ssb module along with the Broadcom 4318,
>>>>> in a CF form factor. If the CF card is inserted before boot, and the ssb
>>>>> module is not in the initrd process, the laptops lock up and do not become
>>>>> operational. The solution to this problem is/was adding the ssb.ko to the
>>>>> initrd process. So I agree with Luis on this, the ssb module will have to be
>>>>> added/updated to the initrd process. As for PCI operations, I don't know,
>>>>> but for PCMCIA operations ssb.ko has to be added and/or updated. Anytime I
>>>>> am testing new releases of b43, I run "update-initramfs -u" to update the
>>>>> ssb module. (Sometimes you can do a rmmod ssb and rmmod b43, and then
>>>>> modprobe them back in. - This saves a reboot)
>>>> But why is ssb, b43, b44 needed upon early boot?
>>> OK the reason seems to be netboot. Yeah the only fix for distros who want
>>> this on the initramfs is to update it after a compat-wireless package is
>>> installed. I suppose we can add a hook to compat-wireless for each distro.
>>> I'm only familiar with Ubuntu way of doing this so if people are interested
>>> in other distros you'll need to point/test how to do this on there.
>>>
>>> Please try this patch against compat-wireless: (also attached)
>>>
>>> From 99af88246c2de71aa799de2b63f9d9ccac41634f Mon Sep 17 00:00:00 2001
>>> From: Luis R. Rodriguez <lrodriguez@atheros.com>
>>> Date: Sun, 27 Sep 2009 13:58:22 -0700
>>> Subject: [PATCH] Add scripts/update-initramfs and use it
>>>
>>> Some distributions may ship b44 and ssb on the initramfs for
>>> netboot. To help with this we need to update the initrafms
>>> for those distributions.
>>>
>>> Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
>>> ---
>>> Makefile | 1 +
>>> scripts/update-initramfs | 33 +++++++++++++++++++++++++++++++++
>>> 2 files changed, 34 insertions(+), 0 deletions(-)
>>> create mode 100755 scripts/update-initramfs
>>>
>>> diff --git a/Makefile b/Makefile
>>> index ab97de0..c7333a2 100644
>>> --- a/Makefile
>>> +++ b/Makefile
>>> @@ -65,6 +65,7 @@ install: uninstall install-modules install-scripts
>>> install-modules: modules
>>> $(MAKE) -C $(KLIB_BUILD) M=$(PWD) $(KMODDIR_ARG) $(KMODPATH_ARG) \
>>> modules_install
>>> + @./scripts/update-initramfs
>>>
>>> install-scripts:
>>> @# All the scripts we can use
>>> diff --git a/scripts/update-initramfs b/scripts/update-initramfs
>>> new file mode 100755
>>> index 0000000..412d885
>>> --- /dev/null
>>> +++ b/scripts/update-initramfs
>>> @@ -0,0 +1,33 @@
>>> +#!/bin/bash
>>> +# Copyright 2009 Luis R. Rodriguez <mcgrof@gmail.com>
>>> +#
>>> +# Since we provide ssb, the Ethernet module b44 some people may
>>> +# rely on it to netboot, so update the initrafms for each
>>> +# distribution.
>>> +#
>>> +# Note that in the future people may want to wireless-boot
>>> +# so this will help with that as well.
>>> +
>>> +LSB_RED_ID=$(/usr/bin/lsb_release -i -s)
>>> +
>>> +KLIB=/lib/modules/2.6.31-wl/build
>>> +ver=$(echo $KLIB | awk -F "/lib/modules/" '{print $2}' | awk -F"/" '{print $1}')
>>> +dir=/boot/
>>> +
>>> +case $LSB_RED_ID in
>>> +"Ubuntu")
>>> + echo "Updating Ubuntu's initramfs for $ver under $dir ..."
>>> + mkinitramfs -o $dir/initrd.img-$ver $ver
>>> + echo "Will now run update-grub to ensure grub will find the new initramfs ..."
>>> + update-grub
>>> + ;;
>>> +*)
>>> + echo "Warning:"
>>> + echo "You may or may not need to update your initframfs, you should if"
>>> + echo "any of the modules installed are part of your initramfs. To add"
>>> + echo "support for your distribution to do this automatically send a"
>>> + echo "patch against $0. If your distribution does not require this"
>>> + echo "send a patch against the '/usr/bin/lsb_release -i -s': $LSB_RED_ID"
>>> + echo "tag for your distribution to avoid this warning."
>>> + ;;
>>> +esac
>>>
>> Luis - I'll do something similar in a post install script for Karmic LBM
>
> Great, thanks for the heads up.
>
>> since the install-modules target in your makefile isn't used for a
>> debian install.
>
> Not sure I followed this part, what do you mean?
>
It has to do with the way debian packages are installed. In the case of
LBM, the .ko files from the binary package are simply copied to their
target locations during 'apt-get install'. Therefore, a post
installation script needs to be run that updates the initramfs.
rtg
--
Tim Gardner tim.gardner@canonical.com
^ permalink raw reply
* Re: Unable to create an 802.11s mesh using compat-wireless-2009-09-27
From: Andrey Yurovsky @ 2009-09-28 20:28 UTC (permalink / raw)
To: Simon Raffeiner; +Cc: linux-wireless
In-Reply-To: <200909271541.58448.sturmflut@lieberbiber.de>
On Sun, Sep 27, 2009 at 6:41 AM, Simon Raffeiner
<sturmflut@lieberbiber.de> wrote:
> and falls back to "Managed" after about five seconds:
Is there an application like NetworkManager running? If so, please
kill it before proceeding. Also it's not useful/needed to run
"iwconfig", it doesn't understand mesh interfaces. Please only use
iw.
-Andrey
^ permalink raw reply
* Re: [PATCH] iwlagn: fix panic in iwl{5000,4965}_rx_reply_tx
From: John W. Linville @ 2009-09-28 20:14 UTC (permalink / raw)
To: reinette chatre; +Cc: Stanislaw Gruszka, linux-wireless@vger.kernel.org
In-Reply-To: <1253828287.26521.999.camel@rc-desk>
On Thu, Sep 24, 2009 at 02:38:07PM -0700, reinette chatre wrote:
> Hi Stanislaw,
>
> On Wed, 2009-09-23 at 01:51 -0700, Stanislaw Gruszka wrote:
> > In some cases firmware can give us bad value of index in transmit
> > buffers array. This patch add sanity check for such values and return
> > from processing function instantly when it happens.
> >
> > https://bugzilla.redhat.com/show_bug.cgi?id=521931
> >
> > Patch was tested by reporter on iwl5000. I think check can be also
> > helpful for 4965.
> >
> > Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
> > ---
>
> I looked at the bugzilla entry and I think that there may be another fix
> required here. After the driver submitted the five frames it received a
> surprisingly large number of tx responses from firmware, with one of
> these causing the problem. The bad value from the firmware may be a
> result of something else done incorrectly by driver here since the
> firmware has been trying for more than 40 times at this point to inform
> driver about tx results.
>
> I commented in that bugzilla and we can continue to debug this issue
> there. Until then I'd like to hold off on this patch.
Hmmm...well, I already sent it to Dave/Linus -- it's in 2.6.32-rc1...
John
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
^ permalink raw reply
* Re: A problem loading ssb module
From: Luis R. Rodriguez @ 2009-09-28 20:07 UTC (permalink / raw)
To: Tim Gardner
Cc: Luis R. Rodriguez, Luis Rodriguez, Clyde McPherson,
Hauke Mehrtens, linux-wireless, bcm43xx-dev@lists.berlios.de
In-Reply-To: <4AC115F7.8020909@canonical.com>
On Mon, Sep 28, 2009 at 01:00:55PM -0700, Tim Gardner wrote:
> Luis R. Rodriguez wrote:
> > On Sun, Sep 27, 2009 at 12:50:19PM -0700, Luis R. Rodriguez wrote:
> >> On Sun, Sep 27, 2009 at 8:15 AM, Clyde McPherson <ccmcphe@verizon.net> wrote:
> >>>
> >>>> On Thu, Sep 24, 2009 at 11:33 AM, Hauke Mehrtens <hauke@hauke-m.de> wrote:
> >>>>
> >>>>> Bryan Wu wrote:
> >>>>>
> >>>>>> Mauro Di Domenico wrote:
> >>>>>>
> >>>>>>> Hi,
> >>>>>>> I'm testing new b43 modules for my 14e4:4315 broadcom card.
> >>>>>>> I've compiled and installed compat-wireless-2009-09-16 in a debian
> >>>>>>> machine with kernel version 2.6.30-6.
> >>>>>>>
> >>>>>>> During the boot I experience this problem:
> >>>>>>>
> >>>>>>> $ dmesg|egrep "b43|ssb"
> >>>>>>>
> >>>>>>> [ 2.384463] b43-pci-bridge 0000:06:00.0: PCI INT A -> GSI 17 (level,
> >>>>>>> low) -> IRQ 17
> >>>>>>> [ 2.384477] b43-pci-bridge 0000:06:00.0: setting latency timer to 64
> >>>>>>> [ 2.544344] ssb: Sonics Silicon Backplane found on PCI device
> >>>>>>> 0000:06:00.0
> >>>>>>> [ 6.968981] b43: disagrees about version of symbol
> >>>>>>> ssb_device_is_enabled
> >>>>>>> [ 6.968986] b43: Unknown symbol ssb_device_is_enabled
> >>>>>>> [ 6.969280] b43: Unknown symbol ssb_pmu_set_ldo_paref
> >>>>>>> [ 6.969407] b43: disagrees about version of symbol
> >>>>>>> ssb_pcicore_dev_irqvecs_enable
> >>>>>>> [ 6.969410] b43: Unknown symbol ssb_pcicore_dev_irqvecs_enable
> >>>>>>> .....
> >>>>>>> ....
> >>>>>>> ...
> >>>>>>>
> >>>>>>>
> >>>>>> I faced the exactly same issue as Mauro did. +1 from me, but currently
> >>>>>> have
> >>>>>> no time to take a deeper look.
> >>>>>>
> >>>>>> Thanks
> >>>>>>
> >>>>> Hi,
> >>>>>
> >>>>> I had the same problem with the ssb module and compat-wireless in ubuntu
> >>>>> 9.04. The problem is that the ssb module is integrated into the
> >>>>> initramfs image. The version out of the initramfs image is loaded on
> >>>>> startup and not the version of compat-wireless. Running "sudo
> >>>>> update-initramfs -u" after installing compat-wireless and restaing the
> >>>>> system fixes the problem for me. Either Debian/Ubuntu should remove ssb
> >>>>> form default initramfs image or compat-wireless should update the image
> >>>>> with the install command. At least the compat-wireless documentation
> >>>>> needs an update.
> >>>>>
> >>>>> Hauke
> >>>>>
> >>>>> (adding Luis and linux-wireless list)
> >>>>>
> >>>> Tim, do you guys update the initramfs upon installation of lbm? If a
> >>>> user does not use lbm and uses compat-wireless I suppose we need to do
> >>>> something similar.
> >>>>
> >>>> Luis
> >>>> _______________________________________________
> >>>> Bcm43xx-dev mailing list
> >>>> Bcm43xx-dev@lists.berlios.de
> >>>> https://lists.berlios.de/mailman/listinfo/bcm43xx-dev
> >>>>
> >>> All:
> >>> I have a large group that uses the ssb module along with the Broadcom 4318,
> >>> in a CF form factor. If the CF card is inserted before boot, and the ssb
> >>> module is not in the initrd process, the laptops lock up and do not become
> >>> operational. The solution to this problem is/was adding the ssb.ko to the
> >>> initrd process. So I agree with Luis on this, the ssb module will have to be
> >>> added/updated to the initrd process. As for PCI operations, I don't know,
> >>> but for PCMCIA operations ssb.ko has to be added and/or updated. Anytime I
> >>> am testing new releases of b43, I run "update-initramfs -u" to update the
> >>> ssb module. (Sometimes you can do a rmmod ssb and rmmod b43, and then
> >>> modprobe them back in. - This saves a reboot)
> >> But why is ssb, b43, b44 needed upon early boot?
> >
> > OK the reason seems to be netboot. Yeah the only fix for distros who want
> > this on the initramfs is to update it after a compat-wireless package is
> > installed. I suppose we can add a hook to compat-wireless for each distro.
> > I'm only familiar with Ubuntu way of doing this so if people are interested
> > in other distros you'll need to point/test how to do this on there.
> >
> > Please try this patch against compat-wireless: (also attached)
> >
> > From 99af88246c2de71aa799de2b63f9d9ccac41634f Mon Sep 17 00:00:00 2001
> > From: Luis R. Rodriguez <lrodriguez@atheros.com>
> > Date: Sun, 27 Sep 2009 13:58:22 -0700
> > Subject: [PATCH] Add scripts/update-initramfs and use it
> >
> > Some distributions may ship b44 and ssb on the initramfs for
> > netboot. To help with this we need to update the initrafms
> > for those distributions.
> >
> > Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
> > ---
> > Makefile | 1 +
> > scripts/update-initramfs | 33 +++++++++++++++++++++++++++++++++
> > 2 files changed, 34 insertions(+), 0 deletions(-)
> > create mode 100755 scripts/update-initramfs
> >
> > diff --git a/Makefile b/Makefile
> > index ab97de0..c7333a2 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -65,6 +65,7 @@ install: uninstall install-modules install-scripts
> > install-modules: modules
> > $(MAKE) -C $(KLIB_BUILD) M=$(PWD) $(KMODDIR_ARG) $(KMODPATH_ARG) \
> > modules_install
> > + @./scripts/update-initramfs
> >
> > install-scripts:
> > @# All the scripts we can use
> > diff --git a/scripts/update-initramfs b/scripts/update-initramfs
> > new file mode 100755
> > index 0000000..412d885
> > --- /dev/null
> > +++ b/scripts/update-initramfs
> > @@ -0,0 +1,33 @@
> > +#!/bin/bash
> > +# Copyright 2009 Luis R. Rodriguez <mcgrof@gmail.com>
> > +#
> > +# Since we provide ssb, the Ethernet module b44 some people may
> > +# rely on it to netboot, so update the initrafms for each
> > +# distribution.
> > +#
> > +# Note that in the future people may want to wireless-boot
> > +# so this will help with that as well.
> > +
> > +LSB_RED_ID=$(/usr/bin/lsb_release -i -s)
> > +
> > +KLIB=/lib/modules/2.6.31-wl/build
> > +ver=$(echo $KLIB | awk -F "/lib/modules/" '{print $2}' | awk -F"/" '{print $1}')
> > +dir=/boot/
> > +
> > +case $LSB_RED_ID in
> > +"Ubuntu")
> > + echo "Updating Ubuntu's initramfs for $ver under $dir ..."
> > + mkinitramfs -o $dir/initrd.img-$ver $ver
> > + echo "Will now run update-grub to ensure grub will find the new initramfs ..."
> > + update-grub
> > + ;;
> > +*)
> > + echo "Warning:"
> > + echo "You may or may not need to update your initframfs, you should if"
> > + echo "any of the modules installed are part of your initramfs. To add"
> > + echo "support for your distribution to do this automatically send a"
> > + echo "patch against $0. If your distribution does not require this"
> > + echo "send a patch against the '/usr/bin/lsb_release -i -s': $LSB_RED_ID"
> > + echo "tag for your distribution to avoid this warning."
> > + ;;
> > +esac
> >
>
> Luis - I'll do something similar in a post install script for Karmic LBM
Great, thanks for the heads up.
> since the install-modules target in your makefile isn't used for a
> debian install.
Not sure I followed this part, what do you mean?
Luis
^ permalink raw reply
* Re: A problem loading ssb module
From: Tim Gardner @ 2009-09-28 20:00 UTC (permalink / raw)
To: Luis R. Rodriguez
Cc: Luis R. Rodriguez, Clyde McPherson, Hauke Mehrtens,
linux-wireless, bcm43xx-dev
In-Reply-To: <20090927210252.GA31472@bombadil.infradead.org>
Luis R. Rodriguez wrote:
> On Sun, Sep 27, 2009 at 12:50:19PM -0700, Luis R. Rodriguez wrote:
>> On Sun, Sep 27, 2009 at 8:15 AM, Clyde McPherson <ccmcphe@verizon.net> wrote:
>>>
>>>> On Thu, Sep 24, 2009 at 11:33 AM, Hauke Mehrtens <hauke@hauke-m.de> wrote:
>>>>
>>>>> Bryan Wu wrote:
>>>>>
>>>>>> Mauro Di Domenico wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>> I'm testing new b43 modules for my 14e4:4315 broadcom card.
>>>>>>> I've compiled and installed compat-wireless-2009-09-16 in a debian
>>>>>>> machine with kernel version 2.6.30-6.
>>>>>>>
>>>>>>> During the boot I experience this problem:
>>>>>>>
>>>>>>> $ dmesg|egrep "b43|ssb"
>>>>>>>
>>>>>>> [ 2.384463] b43-pci-bridge 0000:06:00.0: PCI INT A -> GSI 17 (level,
>>>>>>> low) -> IRQ 17
>>>>>>> [ 2.384477] b43-pci-bridge 0000:06:00.0: setting latency timer to 64
>>>>>>> [ 2.544344] ssb: Sonics Silicon Backplane found on PCI device
>>>>>>> 0000:06:00.0
>>>>>>> [ 6.968981] b43: disagrees about version of symbol
>>>>>>> ssb_device_is_enabled
>>>>>>> [ 6.968986] b43: Unknown symbol ssb_device_is_enabled
>>>>>>> [ 6.969280] b43: Unknown symbol ssb_pmu_set_ldo_paref
>>>>>>> [ 6.969407] b43: disagrees about version of symbol
>>>>>>> ssb_pcicore_dev_irqvecs_enable
>>>>>>> [ 6.969410] b43: Unknown symbol ssb_pcicore_dev_irqvecs_enable
>>>>>>> .....
>>>>>>> ....
>>>>>>> ...
>>>>>>>
>>>>>>>
>>>>>> I faced the exactly same issue as Mauro did. +1 from me, but currently
>>>>>> have
>>>>>> no time to take a deeper look.
>>>>>>
>>>>>> Thanks
>>>>>>
>>>>> Hi,
>>>>>
>>>>> I had the same problem with the ssb module and compat-wireless in ubuntu
>>>>> 9.04. The problem is that the ssb module is integrated into the
>>>>> initramfs image. The version out of the initramfs image is loaded on
>>>>> startup and not the version of compat-wireless. Running "sudo
>>>>> update-initramfs -u" after installing compat-wireless and restaing the
>>>>> system fixes the problem for me. Either Debian/Ubuntu should remove ssb
>>>>> form default initramfs image or compat-wireless should update the image
>>>>> with the install command. At least the compat-wireless documentation
>>>>> needs an update.
>>>>>
>>>>> Hauke
>>>>>
>>>>> (adding Luis and linux-wireless list)
>>>>>
>>>> Tim, do you guys update the initramfs upon installation of lbm? If a
>>>> user does not use lbm and uses compat-wireless I suppose we need to do
>>>> something similar.
>>>>
>>>> Luis
>>>> _______________________________________________
>>>> Bcm43xx-dev mailing list
>>>> Bcm43xx-dev@lists.berlios.de
>>>> https://lists.berlios.de/mailman/listinfo/bcm43xx-dev
>>>>
>>> All:
>>> I have a large group that uses the ssb module along with the Broadcom 4318,
>>> in a CF form factor. If the CF card is inserted before boot, and the ssb
>>> module is not in the initrd process, the laptops lock up and do not become
>>> operational. The solution to this problem is/was adding the ssb.ko to the
>>> initrd process. So I agree with Luis on this, the ssb module will have to be
>>> added/updated to the initrd process. As for PCI operations, I don't know,
>>> but for PCMCIA operations ssb.ko has to be added and/or updated. Anytime I
>>> am testing new releases of b43, I run "update-initramfs -u" to update the
>>> ssb module. (Sometimes you can do a rmmod ssb and rmmod b43, and then
>>> modprobe them back in. - This saves a reboot)
>> But why is ssb, b43, b44 needed upon early boot?
>
> OK the reason seems to be netboot. Yeah the only fix for distros who want
> this on the initramfs is to update it after a compat-wireless package is
> installed. I suppose we can add a hook to compat-wireless for each distro.
> I'm only familiar with Ubuntu way of doing this so if people are interested
> in other distros you'll need to point/test how to do this on there.
>
> Please try this patch against compat-wireless: (also attached)
>
> From 99af88246c2de71aa799de2b63f9d9ccac41634f Mon Sep 17 00:00:00 2001
> From: Luis R. Rodriguez <lrodriguez@atheros.com>
> Date: Sun, 27 Sep 2009 13:58:22 -0700
> Subject: [PATCH] Add scripts/update-initramfs and use it
>
> Some distributions may ship b44 and ssb on the initramfs for
> netboot. To help with this we need to update the initrafms
> for those distributions.
>
> Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
> ---
> Makefile | 1 +
> scripts/update-initramfs | 33 +++++++++++++++++++++++++++++++++
> 2 files changed, 34 insertions(+), 0 deletions(-)
> create mode 100755 scripts/update-initramfs
>
> diff --git a/Makefile b/Makefile
> index ab97de0..c7333a2 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -65,6 +65,7 @@ install: uninstall install-modules install-scripts
> install-modules: modules
> $(MAKE) -C $(KLIB_BUILD) M=$(PWD) $(KMODDIR_ARG) $(KMODPATH_ARG) \
> modules_install
> + @./scripts/update-initramfs
>
> install-scripts:
> @# All the scripts we can use
> diff --git a/scripts/update-initramfs b/scripts/update-initramfs
> new file mode 100755
> index 0000000..412d885
> --- /dev/null
> +++ b/scripts/update-initramfs
> @@ -0,0 +1,33 @@
> +#!/bin/bash
> +# Copyright 2009 Luis R. Rodriguez <mcgrof@gmail.com>
> +#
> +# Since we provide ssb, the Ethernet module b44 some people may
> +# rely on it to netboot, so update the initrafms for each
> +# distribution.
> +#
> +# Note that in the future people may want to wireless-boot
> +# so this will help with that as well.
> +
> +LSB_RED_ID=$(/usr/bin/lsb_release -i -s)
> +
> +KLIB=/lib/modules/2.6.31-wl/build
> +ver=$(echo $KLIB | awk -F "/lib/modules/" '{print $2}' | awk -F"/" '{print $1}')
> +dir=/boot/
> +
> +case $LSB_RED_ID in
> +"Ubuntu")
> + echo "Updating Ubuntu's initramfs for $ver under $dir ..."
> + mkinitramfs -o $dir/initrd.img-$ver $ver
> + echo "Will now run update-grub to ensure grub will find the new initramfs ..."
> + update-grub
> + ;;
> +*)
> + echo "Warning:"
> + echo "You may or may not need to update your initframfs, you should if"
> + echo "any of the modules installed are part of your initramfs. To add"
> + echo "support for your distribution to do this automatically send a"
> + echo "patch against $0. If your distribution does not require this"
> + echo "send a patch against the '/usr/bin/lsb_release -i -s': $LSB_RED_ID"
> + echo "tag for your distribution to avoid this warning."
> + ;;
> +esac
>
Luis - I'll do something similar in a post install script for Karmic LBM
since the install-modules target in your makefile isn't used for a
debian install.
rtg
--
Tim Gardner tim.gardner@canonical.com
^ permalink raw reply
* Re: [PATCH] ar9170: implement frequency calibration for one-stage/openfw
From: John W. Linville @ 2009-09-28 19:50 UTC (permalink / raw)
To: Christian Lamparter
Cc: Joerg Albert, Andrew Morton, linux-wireless, David S. Miller
In-Reply-To: <22ee4e770909281245g3346a800n940c28199e429abf@mail.gmail.com>
On Mon, Sep 28, 2009 at 09:45:28PM +0200, Christian Lamparter wrote:
> 2009/9/28 John W. Linville <linville@tuxdriver.com>:
> > On Sat, Sep 19, 2009 at 02:21:36PM +0200, Joerg Albert wrote:
> >> On 09/19/2009 02:02 AM, Andrew Morton wrote:
> >> > How did this get all the way into mainline?
> >>
> >> Strangely it compiles without any warning for me with the latest linux-wireless:
> >
> > That is strange -- no warning here (F-11) either...
> >
> > Christian, care to propose a patch? Or maybe just something like this?
> >
> > diff --git a/drivers/net/wireless/ath/ar9170/phy.c b/drivers/net/wireless/ath/ar9170/phy.c
> > index b3e5cf3..49c10cb 100644
> > --- a/drivers/net/wireless/ath/ar9170/phy.c
> > +++ b/drivers/net/wireless/ath/ar9170/phy.c
> > @@ -1220,7 +1220,7 @@ static int ar9170_set_freq_cal_data(struct ar9170 *ar,
> > &vpds[1][0]);
> > }
> >
> > - phy_data |= tmp << ((i & 3) << 3);
> > + phy_data = tmp << ((i & 3) << 3);
> > if ((i & 3) == 3) {
> > ar9170_regwrite(0x1c6280 + chain * 0x1000 +
> > (i & ~3), phy_data);
> >
> > John
> no? Andrew Morton's mail included a tiny patch which initializes the
> phy_data to 0. I assumed you would pick it up right away...
> Or is there something which would prevent it from including?
Don't know what email you got, but there was no patch in my inbox...
So, I presume you have no objection to the patch above? Initializing
phy_data just to unconditionally assign to it doesn't seem any better.
John
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.
^ permalink raw reply
* Re: A problem loading ssb module
From: Luis R. Rodriguez @ 2009-09-28 19:55 UTC (permalink / raw)
To: Luis R. Rodriguez
Cc: Clyde McPherson, Hauke Mehrtens, Tim Gardner, linux-wireless,
bcm43xx-dev
In-Reply-To: <20090927210252.GA31472@bombadil.infradead.org>
On Sun, Sep 27, 2009 at 2:02 PM, Luis R. Rodriguez
<mcgrof@bombadil.infradead.org> wrote:
> On Sun, Sep 27, 2009 at 12:50:19PM -0700, Luis R. Rodriguez wrote:
>> On Sun, Sep 27, 2009 at 8:15 AM, Clyde McPherson <ccmcphe@verizon.net> wrote:
>> >
>> >
>> >> On Thu, Sep 24, 2009 at 11:33 AM, Hauke Mehrtens <hauke@hauke-m.de> wrote:
>> >>
>> >>>
>> >>> Bryan Wu wrote:
>> >>>
>> >>>>
>> >>>> Mauro Di Domenico wrote:
>> >>>>
>> >>>>>
>> >>>>> Hi,
>> >>>>> I'm testing new b43 modules for my 14e4:4315 broadcom card.
>> >>>>> I've compiled and installed compat-wireless-2009-09-16 in a debian
>> >>>>> machine with kernel version 2.6.30-6.
>> >>>>>
>> >>>>> During the boot I experience this problem:
>> >>>>>
>> >>>>> $ dmesg|egrep "b43|ssb"
>> >>>>>
>> >>>>> [ 2.384463] b43-pci-bridge 0000:06:00.0: PCI INT A -> GSI 17 (level,
>> >>>>> low) -> IRQ 17
>> >>>>> [ 2.384477] b43-pci-bridge 0000:06:00.0: setting latency timer to 64
>> >>>>> [ 2.544344] ssb: Sonics Silicon Backplane found on PCI device
>> >>>>> 0000:06:00.0
>> >>>>> [ 6.968981] b43: disagrees about version of symbol
>> >>>>> ssb_device_is_enabled
>> >>>>> [ 6.968986] b43: Unknown symbol ssb_device_is_enabled
>> >>>>> [ 6.969280] b43: Unknown symbol ssb_pmu_set_ldo_paref
>> >>>>> [ 6.969407] b43: disagrees about version of symbol
>> >>>>> ssb_pcicore_dev_irqvecs_enable
>> >>>>> [ 6.969410] b43: Unknown symbol ssb_pcicore_dev_irqvecs_enable
>> >>>>> .....
>> >>>>> ....
>> >>>>> ...
>> >>>>>
>> >>>>>
>> >>>>
>> >>>> I faced the exactly same issue as Mauro did. +1 from me, but currently
>> >>>> have
>> >>>> no time to take a deeper look.
>> >>>>
>> >>>> Thanks
>> >>>>
>> >>>
>> >>> Hi,
>> >>>
>> >>> I had the same problem with the ssb module and compat-wireless in ubuntu
>> >>> 9.04. The problem is that the ssb module is integrated into the
>> >>> initramfs image. The version out of the initramfs image is loaded on
>> >>> startup and not the version of compat-wireless. Running "sudo
>> >>> update-initramfs -u" after installing compat-wireless and restaing the
>> >>> system fixes the problem for me. Either Debian/Ubuntu should remove ssb
>> >>> form default initramfs image or compat-wireless should update the image
>> >>> with the install command. At least the compat-wireless documentation
>> >>> needs an update.
>> >>>
>> >>> Hauke
>> >>>
>> >>> (adding Luis and linux-wireless list)
>> >>>
>> >>
>> >> Tim, do you guys update the initramfs upon installation of lbm? If a
>> >> user does not use lbm and uses compat-wireless I suppose we need to do
>> >> something similar.
>> >>
>> >> Luis
>> >> _______________________________________________
>> >> Bcm43xx-dev mailing list
>> >> Bcm43xx-dev@lists.berlios.de
>> >> https://lists.berlios.de/mailman/listinfo/bcm43xx-dev
>> >>
>> >
>> > All:
>> > I have a large group that uses the ssb module along with the Broadcom 4318,
>> > in a CF form factor. If the CF card is inserted before boot, and the ssb
>> > module is not in the initrd process, the laptops lock up and do not become
>> > operational. The solution to this problem is/was adding the ssb.ko to the
>> > initrd process. So I agree with Luis on this, the ssb module will have to be
>> > added/updated to the initrd process. As for PCI operations, I don't know,
>> > but for PCMCIA operations ssb.ko has to be added and/or updated. Anytime I
>> > am testing new releases of b43, I run "update-initramfs -u" to update the
>> > ssb module. (Sometimes you can do a rmmod ssb and rmmod b43, and then
>> > modprobe them back in. - This saves a reboot)
>>
>> But why is ssb, b43, b44 needed upon early boot?
>
> OK the reason seems to be netboot. Yeah the only fix for distros who want
> this on the initramfs is to update it after a compat-wireless package is
> installed. I suppose we can add a hook to compat-wireless for each distro.
> I'm only familiar with Ubuntu way of doing this so if people are interested
> in other distros you'll need to point/test how to do this on there.
>
> Please try this patch against compat-wireless: (also attached)
>
> From 99af88246c2de71aa799de2b63f9d9ccac41634f Mon Sep 17 00:00:00 2001
> From: Luis R. Rodriguez <lrodriguez@atheros.com>
> Date: Sun, 27 Sep 2009 13:58:22 -0700
> Subject: [PATCH] Add scripts/update-initramfs and use it
>
> Some distributions may ship b44 and ssb on the initramfs for
> netboot. To help with this we need to update the initrafms
> for those distributions.
>
> Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
I didn't see much feedback but I'm going to merge this in so that it
gets out with the 2.6.32-rc1 stable compat-wireless release.
Luis
^ permalink raw reply
* Re: [PATCH] ar9170: implement frequency calibration for one-stage/openfw
From: Christian Lamparter @ 2009-09-28 19:45 UTC (permalink / raw)
To: John W. Linville
Cc: Joerg Albert, Andrew Morton, linux-wireless, David S. Miller
In-Reply-To: <20090928184111.GB4737@tuxdriver.com>
2009/9/28 John W. Linville <linville@tuxdriver.com>:
> On Sat, Sep 19, 2009 at 02:21:36PM +0200, Joerg Albert wrote:
>> On 09/19/2009 02:02 AM, Andrew Morton wrote:
>> > On Thu, 3 Sep 2009 20:25:31 +0200
>> > Christian Lamparter <chunkeey@googlemail.com> wrote:
>> >
>> >> This patch ports some code from the vendor driver, which is
>> >> supposed to upload the right calibration values for the
>> >> chosen frequency.
>> >>
>> >> In theory, this should give a better range and throughput
>> >> for all users with the open, or one-stage firmware.
>> >>
>> >> ...
>> >>
>> >> + for (i = 0; i < 76; i++) {
>> >> + u32 phy_data;
>> >> + u8 tmp;
>> >> +
>> >> + if (i < 25) {
>> >> + tmp = ar9170_interpolate_val(i, &pwrs[0][0],
>> >> + &vpds[0][0]);
>> >> + } else {
>> >> + tmp = ar9170_interpolate_val(i - 12,
>> >> + &pwrs[1][0],
>> >> + &vpds[1][0]);
>> >> + }
>> >> +
>> >> + phy_data |= tmp << ((i & 3) << 3);
>> >
>> > Clearly buggy and the compiler warns. The value of phy_data is unknown
>> > here.
>> >
>> > How did this get all the way into mainline?
>>
>> Strangely it compiles without any warning for me with the latest linux-wireless:
>
> That is strange -- no warning here (F-11) either...
>
> Christian, care to propose a patch? Or maybe just something like this?
>
> diff --git a/drivers/net/wireless/ath/ar9170/phy.c b/drivers/net/wireless/ath/ar9170/phy.c
> index b3e5cf3..49c10cb 100644
> --- a/drivers/net/wireless/ath/ar9170/phy.c
> +++ b/drivers/net/wireless/ath/ar9170/phy.c
> @@ -1220,7 +1220,7 @@ static int ar9170_set_freq_cal_data(struct ar9170 *ar,
> &vpds[1][0]);
> }
>
> - phy_data |= tmp << ((i & 3) << 3);
> + phy_data = tmp << ((i & 3) << 3);
> if ((i & 3) == 3) {
> ar9170_regwrite(0x1c6280 + chain * 0x1000 +
> (i & ~3), phy_data);
>
> John
no? Andrew Morton's mail included a tiny patch which initializes the
phy_data to 0. I assumed you would pick it up right away...
Or is there something which would prevent it from including?
Regards,
Chr
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox