This adds following helper routines:
- of_property_read_u8_array()
- of_property_read_u16_array()
- of_property_read_u8()
- of_property_read_u16()
This expects arrays from DT to be passed as:
- u8 array:
property = /bits/ 8 <0x50 0x60 0x70>;
- u16 array:
property = /bits/ 16 <0x5000 0x6000 0x7000>;
Signed-off-by: Viresh Kumar <viresh.kumar(a)linaro.org>
---
V2->V3:
- Expect u8 & u16 arrays to be passed using: /bits/ 8 or 16
- remove common macro, as not much common now :(
- Tested on ARM platform.
drivers/of/base.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
include/linux/of.h | 30 +++++++++++++++++++++
2 files changed, 107 insertions(+)
diff --git a/drivers/of/base.c b/drivers/of/base.c
index af3b22a..f564e31 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -671,12 +671,89 @@ struct device_node *of_find_node_by_phandle(phandle handle)
EXPORT_SYMBOL(of_find_node_by_phandle);
/**
+ * of_property_read_u8_array - Find and read an array of u8 from a property.
+ *
+ * @np: device node from which the property value is to be read.
+ * @propname: name of the property to be searched.
+ * @out_value: pointer to return value, modified only if return value is 0.
+ * @sz: number of array elements to read
+ *
+ * Search for a property in a device node and read 8-bit value(s) from
+ * it. Returns 0 on success, -EINVAL if the property does not exist,
+ * -ENODATA if property does not have a value, and -EOVERFLOW if the
+ * property data isn't large enough.
+ *
+ * dts entry of array should be like:
+ * property = /bits/ 8 <0x50 0x60 0x70>;
+ *
+ * The out_value is modified only if a valid u8 value can be decoded.
+ */
+int of_property_read_u8_array(const struct device_node *np,
+ const char *propname, u8 *out_values, size_t sz)
+{
+ struct property *prop = of_find_property(np, propname, NULL);
+ const u8 *val;
+
+ if (!prop)
+ return -EINVAL;
+ if (!prop->value)
+ return -ENODATA;
+ if ((sz * sizeof(*out_values)) > prop->length)
+ return -EOVERFLOW;
+
+ val = prop->value;
+ while (sz--)
+ *out_values++ = *val++;
+ return 0;
+}
+EXPORT_SYMBOL_GPL(of_property_read_u8_array);
+
+/**
+ * of_property_read_u16_array - Find and read an array of u16 from a property.
+ *
+ * @np: device node from which the property value is to be read.
+ * @propname: name of the property to be searched.
+ * @out_value: pointer to return value, modified only if return value is 0.
+ * @sz: number of array elements to read
+ *
+ * Search for a property in a device node and read 16-bit value(s) from
+ * it. Returns 0 on success, -EINVAL if the property does not exist,
+ * -ENODATA if property does not have a value, and -EOVERFLOW if the
+ * property data isn't large enough.
+ *
+ * dts entry of array should be like:
+ * property = /bits/ 16 <0x5000 0x6000 0x7000>;
+ *
+ * The out_value is modified only if a valid u16 value can be decoded.
+ */
+int of_property_read_u16_array(const struct device_node *np,
+ const char *propname, u16 *out_values, size_t sz)
+{
+ struct property *prop = of_find_property(np, propname, NULL);
+ const __be16 *val;
+
+ if (!prop)
+ return -EINVAL;
+ if (!prop->value)
+ return -ENODATA;
+ if ((sz * sizeof(*out_values)) > prop->length)
+ return -EOVERFLOW;
+
+ val = prop->value;
+ while (sz--)
+ *out_values++ = be16_to_cpup(val++);
+ return 0;
+}
+EXPORT_SYMBOL_GPL(of_property_read_u16_array);
+
+/**
* of_property_read_u32_array - Find and read an array of 32 bit integers
* from a property.
*
* @np: device node from which the property value is to be read.
* @propname: name of the property to be searched.
* @out_value: pointer to return value, modified only if return value is 0.
+ * @sz: number of array elements to read
*
* Search for a property in a device node and read 32-bit value(s) from
* it. Returns 0 on success, -EINVAL if the property does not exist,
diff --git a/include/linux/of.h b/include/linux/of.h
index b4e50d5..bfdc130 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -223,6 +223,10 @@ extern struct device_node *of_find_node_with_property(
extern struct property *of_find_property(const struct device_node *np,
const char *name,
int *lenp);
+extern int of_property_read_u8_array(const struct device_node *np,
+ const char *propname, u8 *out_values, size_t sz);
+extern int of_property_read_u16_array(const struct device_node *np,
+ const char *propname, u16 *out_values, size_t sz);
extern int of_property_read_u32_array(const struct device_node *np,
const char *propname,
u32 *out_values,
@@ -364,6 +368,18 @@ static inline struct device_node *of_find_compatible_node(
return NULL;
}
+static inline int of_property_read_u8_array(const struct device_node *np,
+ const char *propname, u8 *out_values, size_t sz)
+{
+ return -ENOSYS;
+}
+
+static inline int of_property_read_u16_array(const struct device_node *np,
+ const char *propname, u16 *out_values, size_t sz)
+{
+ return -ENOSYS;
+}
+
static inline int of_property_read_u32_array(const struct device_node *np,
const char *propname,
u32 *out_values, size_t sz)
@@ -470,6 +486,20 @@ static inline bool of_property_read_bool(const struct device_node *np,
return prop ? true : false;
}
+static inline int of_property_read_u8(const struct device_node *np,
+ const char *propname,
+ u8 *out_value)
+{
+ return of_property_read_u8_array(np, propname, out_value, 1);
+}
+
+static inline int of_property_read_u16(const struct device_node *np,
+ const char *propname,
+ u16 *out_value)
+{
+ return of_property_read_u16_array(np, propname, out_value, 1);
+}
+
static inline int of_property_read_u32(const struct device_node *np,
const char *propname,
u32 *out_value)
--
1.7.12.rc2.18.g61b472e
Hi,
This patch-set takes advantage of the new statistics that are going to be available in the kernel thanks to the per-entity load-tracking: http://thread.gmane.org/gmane.linux.kernel/1348522. It packs the small tasks in as few as possible CPU/Cluster/Core. The main goal of packing small tasks is to reduce the power consumption by minimizing the number of power domain that are used. The packing is done in 2 steps:
The 1st step looks for the best place to pack tasks on a system according to its topology and it defines a pack buddy CPU for each CPU if there is one available. The policy for setting a pack buddy CPU is that we pack at all levels where the power line is not shared by groups of CPUs. For describing this capability, a new flag has been introduced SD_SHARE_POWERLINE that is used to describe where CPUs of a scheduling domain are sharing their power rails. This flag has been set in all sched_domain in order to keep unchanged the default behaviour of the scheduler.
In a 2nd step, the scheduler checks the load level of the task which wakes up and the business of the buddy CPU. Then, It can decide to migrate the task on the buddy.
The patch-set has been tested on ARM platforms: quad CA-9 SMP and TC2 HMP (dual CA-15 and 3xCA-7 cluster). For ARM platform, the results have demonstrated that it's worth packing small tasks at all topology levels.
The performance tests have been done on both platforms with sysbench. The results don't show any performance regressions. These results are aligned with the policy which uses the normal behavior with heavy use cases.
test: sysbench --test=cpu --num-threads=N --max-requests=R run
Results below is the average duration of 3 tests on the quad CA-9.
default is the current scheduler behavior (pack buddy CPU is -1)
pack is the scheduler with the pack mecanism
| default | pack |
-----------------------------------
N=8; R=200 | 3.1999 | 3.1921 |
N=8; R=2000 | 31.4939 | 31.4844 |
N=12; R=200 | 3.2043 | 3.2084 |
N=12; R=2000 | 31.4897 | 31.4831 |
N=16; R=200 | 3.1774 | 3.1824 |
N=16; R=2000 | 31.4899 | 31.4897 |
-----------------------------------
The power consumption tests have been done only on TC2 platform which has got accessible power lines and I have used cyclictest to simulate small tasks. The tests show some power consumption improvements.
test: cyclictest -t 8 -q -e 1000000 -D 20 & cyclictest -t 8 -q -e 1000000 -D 20
The measurements have been done during 16 seconds and the result has been normalized to 100
| CA15 | CA7 | total |
-------------------------------------
default | 100 | 40 | 140 |
pack | <1 | 45 | <46 |
-------------------------------------
The A15 cluster is less power efficient than the A7 cluster but if we assume that the tasks is well spread on both clusters, we can guest estimate that the power consumption on a dual cluster of CA7 would have been for a default kernel:
| CA7 | CA7 | total |
-------------------------------------
default | 40 | 40 | 80 |
-------------------------------------
Vincent Guittot (6):
Revert "sched: introduce temporary FAIR_GROUP_SCHED dependency for
load-tracking"
sched: add a new SD SHARE_POWERLINE flag for sched_domain
sched: pack small task at wakeup
sched: secure access to other CPU statistics
sched: pack the idle load balance
ARM: sched: clear SD_SHARE_POWERLINE
arch/arm/kernel/topology.c | 5 ++
arch/ia64/include/asm/topology.h | 1 +
arch/tile/include/asm/topology.h | 1 +
include/linux/sched.h | 9 +--
include/linux/topology.h | 3 +
kernel/sched/core.c | 13 ++--
kernel/sched/fair.c | 155 +++++++++++++++++++++++++++++++++++---
kernel/sched/sched.h | 10 +--
8 files changed, 165 insertions(+), 32 deletions(-)
--
1.7.9.5
Hi Andrey,
Please pull big-LITTLE-MP-master-v12 with following updates:
- Based on v3.7-rc5
- Stats:
- Total Patches: 62
- New Patches: 1
- genirq: Add default affinity mask command line option in
misc-patches branch
- top 3 patches in: sched-pack-small-tasks-v1
- top 2 patches in: task-placement-v2
- additional patch in: config-fragments
- Dropped patches/branches (as they are managed in experimental
merge branch): 20
- patches in per-entity-load-tracking-with-core-sched-v1: 15
- Updated Patches: 0
---------------------x--------------------------x-----------------------
The following changes since commit 77b67063bb6bce6d475e910d3b886a606d0d91f7:
Linux 3.7-rc5 (2012-11-11 13:44:33 +0100)
are available in the git repository at:
git://git.linaro.org/arm/big.LITTLE/mp.git big-LITTLE-MP-master-v12
for you to fetch changes up to f942092bd1008de7379b4a52d38dc03de5949fc8:
Merge branches 'arm-multi_pmu_v2', 'hw-bkp-v7.1-debug-v1',
'task-placement-v2', 'misc-patches', 'config-fragments' and
'sched-pack-small-tasks-v1' into big-LITTLE-MP-master-v12-v2
(2012-11-17 09:29:41 +0530)
----------------------------------------------------------------
Ben Segall (1):
sched: Maintain per-rq runnable averages
Chris Redpath (1):
ARM: Experimental Frequency-Invariant Load Scaling Patch
Dietmar Eggemann (1):
ARM: hw_breakpoint: v7.1 self-hosted debug powerdown support
Jon Medhurst (1):
ARM: sched: Avoid empty 'slow' HMP domain
Liviu Dudau (2):
Revert "sched: secure access to other CPU statistics"
linaro/configs: big-LITTLE-MP: Enable the new tunable sysfs
interface by default.
Lorenzo Pieralisi (1):
ARM: kernel: provide cluster to logical cpu mask mapping API
Marc Zyngier (1):
ARM: perf: add guest vs host discrimination
Mark Rutland (1):
ARM: perf: register cpu_notifier at driver init
Morten Rasmussen (15):
sched: entity load-tracking load_avg_ratio
sched: Task placement for heterogeneous systems based on task
load-tracking
sched: Forced task migration on heterogeneous systems
sched: Introduce priority-based task migration filter
ARM: Add HMP scheduling support for ARM architecture
ARM: sched: Use device-tree to provide fast/slow CPU list for HMP
ARM: sched: Setup SCHED_HMP domains
sched: Add ftrace events for entity load-tracking
sched: Add HMP task migration ftrace event
sched: SCHED_HMP multi-domain task migration control
sched: Enable HMP priority filter by default
sched: Only down migrate low priority tasks if allowed by affinity mask
linaro/configs: Enable HMP priority filter by default
sched: SD_SHARE_POWERLINE buddy selection fix
ARM: TC2: Re-enable SD_SHARE_POWERLINE
Olivier Cozette (1):
ARM: Change load tracking scale using sysfs
Paul Turner (15):
sched: Track the runnable average on a per-task entity basis
sched: Aggregate load contributed by task entities on parenting cfs_rq
sched: Maintain the load contribution of blocked entities
sched: Add an rq migration call-back to sched_class
sched: Account for blocked load waking back up
sched: Aggregate total task_group load
sched: Compute load contribution by a group entity
sched: Normalize tg load contributions against runnable time
sched: Maintain runnable averages across throttled periods
sched: Replace update_shares weight distribution with per-entity
computation
sched: Refactor update_shares_cpu() -> update_blocked_avgs()
sched: Update_cfs_shares at period edge
sched: Make __update_entity_runnable_avg() fast
sched: Introduce temporary FAIR_GROUP_SCHED dependency for load-tracking
sched: implement usage tracking
Peter Zijlstra (1):
sched: Describe CFS load-balancer
Sudeep KarkadaNagesha (9):
ARM: perf: allocate CPU PMU dynamically at probe time
ARM: perf: consistently use struct perf_event in arm_pmu functions
ARM: perf: check ARMv7 counter validity on a per-pmu basis
ARM: perf: replace global CPU PMU pointer with per-cpu pointers
ARM: perf: register CPU PMUs with idr types
ARM: perf: set cpu affinity to support multiple PMUs
ARM: perf: set cpu affinity for the irqs correctly
ARM: perf: remove spaces in CPU PMU names
ARM: perf: save/restore pmu registers in pm notifier
Thomas Gleixner (1):
genirq: Add default affinity mask command line option
Vincent Guittot (5):
sched: add a new SD SHARE_POWERLINE flag for sched_domain
sched: pack small tasks
sched: secure access to other CPU statistics
sched: pack the idle load balance
ARM: sched: clear SD_SHARE_POWERLINE
Viresh Kumar (5):
Revert "sched: Introduce temporary FAIR_GROUP_SCHED dependency
for load-tracking"
configs: Add config fragments for big LITTLE MP
linaro/configs: Update big LITTLE MP fragment for task placement work
config-frag/big-LITTLE: Use device-tree to provide fast/slow CPU
list for HMP
Merge branches 'arm-multi_pmu_v2', 'hw-bkp-v7.1-debug-v1',
'task-placement-v2', 'misc-patches', 'config-fragments' and
'sched-pack-small-tasks-v1' into big-LITTLE-MP-master-v12-v2
Will Deacon (2):
ARM: perf: return NOTIFY_DONE from cpu notifier when no available PMU
ARM: perf: consistently use arm_pmu->name for PMU name
Documentation/devicetree/bindings/arm/pmu.txt | 3 +
Documentation/kernel-parameters.txt | 9 +
arch/arm/Kconfig | 85 ++
arch/arm/include/asm/perf_event.h | 5 +
arch/arm/include/asm/pmu.h | 40 +-
arch/arm/include/asm/topology.h | 34 +
arch/arm/kernel/hw_breakpoint.c | 57 +
arch/arm/kernel/perf_event.c | 103 +-
arch/arm/kernel/perf_event_cpu.c | 169 ++-
arch/arm/kernel/perf_event_v6.c | 130 +-
arch/arm/kernel/perf_event_v7.c | 295 ++--
arch/arm/kernel/perf_event_xscale.c | 161 +-
arch/arm/kernel/topology.c | 125 ++
arch/ia64/include/asm/topology.h | 1 +
arch/tile/include/asm/topology.h | 1 +
include/linux/sched.h | 29 +
include/linux/topology.h | 3 +
include/trace/events/sched.h | 153 ++
kernel/irq/irqdesc.c | 21 +-
kernel/sched/core.c | 16 +
kernel/sched/debug.c | 39 +-
kernel/sched/fair.c | 1942 ++++++++++++++++++++++---
kernel/sched/sched.h | 65 +-
linaro/configs/big-LITTLE-MP.conf | 13 +
24 files changed, 2943 insertions(+), 556 deletions(-)
create mode 100644 linaro/configs/big-LITTLE-MP.conf
The nr_busy_cpus field of the sched_group_power is sometime different from 0
whereas the platform is fully idle. This serie fixes 3 use cases:
- when the SCHED softirq is raised on an idle core for idle load balance but
the platform doesn't go out of the cpuidle state
- when some CPUs enter idle state while booting all CPUs
- when a CPU is unplug and/or replug
Vincent Guittot (3):
sched: fix nr_busy_cpus with coupled cpuidle
sched: fix init NOHZ_IDLE flag
sched: fix update NOHZ_IDLE flag
kernel/sched/core.c | 1 +
kernel/sched/fair.c | 2 +-
kernel/time/tick-sched.c | 2 ++
3 files changed, 4 insertions(+), 1 deletion(-)
--
1.7.10
This adds following helper routines:
- of_property_read_u8_array()
- of_property_read_u16_array()
- of_property_read_u8()
- of_property_read_u16()
First two actually share most of the code with of_property_read_u32_array(), so
the common part is taken out into a macro, which can be used by all three
*_array() routines.
Signed-off-by: Viresh Kumar <viresh.kumar(a)linaro.org>
---
V1->V2:
-----
- Use typeof() in of_property_read_array() macro instead of passing type to it
drivers/of/base.c | 73 +++++++++++++++++++++++++++++++++++++++++++-----------
include/linux/of.h | 30 ++++++++++++++++++++++
2 files changed, 89 insertions(+), 14 deletions(-)
diff --git a/drivers/of/base.c b/drivers/of/base.c
index af3b22a..039e178 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -670,6 +670,64 @@ struct device_node *of_find_node_by_phandle(phandle handle)
}
EXPORT_SYMBOL(of_find_node_by_phandle);
+#define of_property_read_array(_np, _pname, _out, _sz) \
+ struct property *_prop = of_find_property(_np, _pname, NULL); \
+ const __be32 *_val; \
+ \
+ if (!_prop) \
+ return -EINVAL; \
+ if (!_prop->value) \
+ return -ENODATA; \
+ if ((_sz * sizeof(*_out)) > _prop->length) \
+ return -EOVERFLOW; \
+ \
+ _val = _prop->value; \
+ while (_sz--) \
+ *_out++ = (typeof(*_out))be32_to_cpup(_val++); \
+ return 0;
+
+/**
+ * of_property_read_u8_array - Find and read an array of u8 from a property.
+ *
+ * @np: device node from which the property value is to be read.
+ * @propname: name of the property to be searched.
+ * @out_value: pointer to return value, modified only if return value is 0.
+ *
+ * Search for a property in a device node and read 8-bit value(s) from
+ * it. Returns 0 on success, -EINVAL if the property does not exist,
+ * -ENODATA if property does not have a value, and -EOVERFLOW if the
+ * property data isn't large enough.
+ *
+ * The out_value is modified only if a valid u8 value can be decoded.
+ */
+int of_property_read_u8_array(const struct device_node *np,
+ const char *propname, u8 *out_values, size_t sz)
+{
+ of_property_read_array(np, propname, out_values, sz);
+}
+EXPORT_SYMBOL_GPL(of_property_read_u8_array);
+
+/**
+ * of_property_read_u16_array - Find and read an array of u16 from a property.
+ *
+ * @np: device node from which the property value is to be read.
+ * @propname: name of the property to be searched.
+ * @out_value: pointer to return value, modified only if return value is 0.
+ *
+ * Search for a property in a device node and read 16-bit value(s) from
+ * it. Returns 0 on success, -EINVAL if the property does not exist,
+ * -ENODATA if property does not have a value, and -EOVERFLOW if the
+ * property data isn't large enough.
+ *
+ * The out_value is modified only if a valid u16 value can be decoded.
+ */
+int of_property_read_u16_array(const struct device_node *np,
+ const char *propname, u16 *out_values, size_t sz)
+{
+ of_property_read_array(np, propname, out_values, sz);
+}
+EXPORT_SYMBOL_GPL(of_property_read_u16_array);
+
/**
* of_property_read_u32_array - Find and read an array of 32 bit integers
* from a property.
@@ -689,20 +747,7 @@ int of_property_read_u32_array(const struct device_node *np,
const char *propname, u32 *out_values,
size_t sz)
{
- struct property *prop = of_find_property(np, propname, NULL);
- const __be32 *val;
-
- if (!prop)
- return -EINVAL;
- if (!prop->value)
- return -ENODATA;
- if ((sz * sizeof(*out_values)) > prop->length)
- return -EOVERFLOW;
-
- val = prop->value;
- while (sz--)
- *out_values++ = be32_to_cpup(val++);
- return 0;
+ of_property_read_array(np, propname, out_values, sz);
}
EXPORT_SYMBOL_GPL(of_property_read_u32_array);
diff --git a/include/linux/of.h b/include/linux/of.h
index 72843b7..e2d9b40 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -223,6 +223,10 @@ extern struct device_node *of_find_node_with_property(
extern struct property *of_find_property(const struct device_node *np,
const char *name,
int *lenp);
+extern int of_property_read_u8_array(const struct device_node *np,
+ const char *propname, u8 *out_values, size_t sz);
+extern int of_property_read_u16_array(const struct device_node *np,
+ const char *propname, u16 *out_values, size_t sz);
extern int of_property_read_u32_array(const struct device_node *np,
const char *propname,
u32 *out_values,
@@ -357,6 +361,18 @@ static inline struct device_node *of_find_compatible_node(
return NULL;
}
+static inline int of_property_read_u8_array(const struct device_node *np,
+ const char *propname, u8 *out_values, size_t sz)
+{
+ return -ENOSYS;
+}
+
+static inline int of_property_read_u16_array(const struct device_node *np,
+ const char *propname, u16 *out_values, size_t sz)
+{
+ return -ENOSYS;
+}
+
static inline int of_property_read_u32_array(const struct device_node *np,
const char *propname,
u32 *out_values, size_t sz)
@@ -463,6 +479,20 @@ static inline bool of_property_read_bool(const struct device_node *np,
return prop ? true : false;
}
+static inline int of_property_read_u8(const struct device_node *np,
+ const char *propname,
+ u8 *out_value)
+{
+ return of_property_read_u8_array(np, propname, out_value, 1);
+}
+
+static inline int of_property_read_u16(const struct device_node *np,
+ const char *propname,
+ u16 *out_value)
+{
+ return of_property_read_u16_array(np, propname, out_value, 1);
+}
+
static inline int of_property_read_u32(const struct device_node *np,
const char *propname,
u32 *out_value)
--
1.7.12.rc2.18.g61b472e
The original message was received at Mon, 19 Nov 2012 11:29:40 +0530 from 92.18.237.67
----- The following addresses had permanent fatal errors -----
linaro-dev(a)lists.linaro.org
Wrong mailing list, forwarding lo linaro-dev
---------- Forwarded message ----------
From: Alex Stefanescu <stefanescu(a)rice.edu>
Date: 18 November 2012 02:09
Subject: trouble using wifi on Linaro Ubuntu for Pandaboard
Hello,
I'm having trouble connecting to wifi on the Linaro Ubuntu releases
for the Pandaboard. I've tried with both 12.10 and 12.09 releases,
which are listed to have passed the wifi test.
I don't have a screen attached to the Pandaboard and I'm using minicom
over serial cable. Basically after boot I see:
> root@linaro-ubuntu-desktop:/boot# iwconfig
lo no wireless extensions.
wlan0 IEEE 802.11abgn ESSID:off/any
Mode:Managed Access Point: Not-Associated Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:on
eth0 no wireless extensions.
> root@linaro-ubuntu-desktop:/boot# iwlist wlan0 scan
wlan0 Scan completed :
[...]
Cell 02 - Address: 08:D0:9F:BF:27:51
Channel:6
Frequency:2.437 GHz (Channel 6)
Quality=44/70 Signal level=-66 dBm
Encryption key:off
ESSID:"Rice Visitor"
Bit Rates:5.5 Mb/s; 6 Mb/s; 9 Mb/s; 11 Mb/s; 12 Mb/s
18 Mb/s; 24 Mb/s; 36 Mb/s
Bit Rates:48 Mb/s; 54 Mb/s
Mode:Master
Extra:tsf=000002008b96ed23
Extra: Last beacon: 85ms ago
[...]
> root@linaro-ubuntu-desktop:/boot# iwconfig wlan0 essid "Rice Visitor"
[...]
[ 228.734680] wlan0: associate with 08:d0:9f:bf:27:51 (try 1/3)
[ 228.746246] wlan0: RX AssocResp from 08:d0:9f:bf:27:51 (capab=0x421 status=0
aid=4)
[ 228.805328] wl12xx: Association completed.
[ 228.827392] wlan0: associated
[ 228.831237] cfg80211: Calling CRDA for country: US
[ 228.836761] wlan0: disassociating from 08:d0:9f:bf:27:51 by local
choice (reason=3)
[ 228.926635] cfg80211: All devices are disconnected, going to
restore regulatory settings
[...]
After which there are several more similar connect-disconnect phases
and eventually the wlan firmware crashes and has to reboot.
I'm using Pandaboard with OMAP4430 and wl1271 wlan chipset.
I've also tried running wpa_supplicant manually to connect to both the
same open network, or another one secured with WPA2 (I used the
wpa_supplicant.conf from an Android phone so I'm pretty sure it was
correct) and I have the same issue. There is also a wpa_supplicant
always running in the background, does it matter?
> root@linaro-ubuntu-desktop:/boot# ps -ef | grep wpa
root 2083 1 0 Nov15 ? 00:01:16 /sbin/wpa_supplicant
-B -P /run/sendsigs.omit.d/wpasupplicant.pid -u -s -O
/var/run/wpa_supplicant
Thank you!
Hello All,
I am trying to cross-compile perf tool for ARM on x86 machine. I am using
linux-2.6.37. My goal is to compile perf binary statically to use in Gem5
simulator.
I am using CodeSourcery to cross compile. However, I get below error
====================================================
***** No libelf.h/libelf found, please install
libelf-dev/elfutils-libelf-devel and glibc-dev[el]. Stop.
make[1]: Leaving directory
====================================================================
I have libelf.h file compiled for ARM, I tried replacing it in
/usr/include and also in ../arm-none-linux-gnueabi/libc/usr/include.
However, I face the same error. (I am not exactly sure about where the
compiler is looking for libelf.h)
I came across *http://permalink.gmane.org/gmane.linux.ubuntu.devel.kernel.general/11207,*
where they say that there are issues related to perf cross-compiling
and are not yet solved (by Aug'12). Also
*http://www.omappedia.com/wiki/Ubuntu_kernel_build_alternatives#Cross-compilation*
states that " do_tools=false option is required with CodeSourcery
2010q1. It will prevent the generation of the tools binary package
(including perf) that would fail with CodeSourcery 2010q1 toolchain
(to be checked with Linaro or more recent CodeSourcery)." I am using
CodeSourcery 2011.03-41.
Is anyone successful in cross-compiling perf tool. I also need to
cross compile kernel next. So, any information would be of great help.
FYI, I will be using the linux kernle with ubuntu disk image in Gem5.
Thank you
Rizwana
*
*