Hi all!
An user reported problems cloning a tree from git.linaro.org today with
a /git-ro URL:
git clone http://git.linaro.org/git-ro/people/foo/bar.git
He was getting:
fatal: http://git.linaro.org/git-ro/people/foo/bar.git/info/refs not found: did you run git update-server-info on the server?
This is because by default, git repos wont be kept up-to-date for http
access. The fix is trivial, it's a matter of enabling a "post-update
hook" which will run "git update-server-info" in this repo whenever you
push new commits.
There should already be a template to do this readily available just
after you create a new git repo; just remember to run:
cd /srv/git.linaro.org/git/foo/bar.git
mv hooks/post-update.sample hooks/post-update
Below is a list of affected repos; I prefer not fixing them because I
don't have enough permissions to do this on all repos, and because you
will have to do it for new repos anyway :-)
find -L /srv/git.linaro.org/git -iname \*.git -type d | while read d; do [ -e $d/hooks/post-update ] || echo $d; done
people/danilo/android-manifest.git
people/danilo/android.git
people/mansson/snowball/ltp.git
people/afrantzis/apitrace.git
people/dlezcano/pm-qa.git
people/dlezcano/cpuidle-next.git
people/dlezcano/linux-next.git
people/kurt-r-taylor/android-ucm.git
people/kurt-r-taylor/alsa-ucm.git
people/kurt-r-taylor/alsa-ucm-utils.git
people/dmart/linux-3-arm.git
people/dmart/linux-2.6.git
people/dmart/linux-2.6-arm.git
people/dmart/tunsetup.git
people/dmart/arm-virt-bl.git
people/dmart/boot-wrapper.git
people/arnd/flashbench.git
people/arnd/imx.git
people/arnd/demo.git
people/arnd/arm-soc.git
people/niklashernaeus/snowball-device-tree.git
people/ljones/linux-2.6.38-ux500.git
people/ljones/landingteamtools.git
people/ljones/linux-3.0-ux500.git
people/ljones/linux-2.6.35-ux500.git
people/sariohu/ffmpeg-0.6.1.git
people/sariohu/gstreamer0-11.git
people/sariohu/xbmc.git
people/sariohu/gst-plugins-base0-11.git
people/sariohu/gst-plugins-good0-11.git
people/sariohu/aacenc.git
people/mszyprowski/linux-archive.git
people/gesha/mynewproject/.git
people/bgaignard/ion_test_application.git
people/bgaignard/gst-openmax-0.10.x.git
people/bgaignard/lava_realvideo_test.git
people/tushar/umm-zero-copy-demo.git
people/fboudra/ioquake3.git
people/fboudra/irrlicht-gles.git
people/fboudra/release-and-project-management.git
people/fboudra/ogre3d-gles.git
people/fboudra/ioquake3-gles.git
people/sumitsemwal/linux-3.x.git
people/sumitsemwal/linux-dma-buf.git
people/vingu/kernel.git
people/shawnguo/linux-2.6.git
people/tomgall/meego/libresource.git
people/tomgall/meego/contextkit.git
people/tomgall/meego/libresourceqt.git
people/tomgall/meego/libmeegotouch.git
people/tomgall/meego/libjpeg-turbo.git
people/tomgall/meego/meegotouch-compositor.git
people/tomgall/libjpeg-turbo-leb/libjpeg-turbo.git
people/pawelmoll/linux.git
people/jstultz/android-dev.git
people/jstultz/linux.git
people/jstultz/android.git
people/jcrigby/kernel-package-info.git
people/jcrigby/ubuntu-packaging-ci-upstreams.git
people/jcrigby/linaro-boot-utils.git
people/jcrigby/linux-lt-ci-pack-info.git
people/jcrigby/ubuntu/linux-linaro-oneiric.git
people/jcrigby/ubuntu/future-linux-linaro-precise-3.2.git
people/jcrigby/ubuntu/linux-history.git
people/jcrigby/ubuntu/linux-linaro-quantal.git
people/jcrigby/ubuntu/linux-linaro-precise.git
people/jcrigby/ubuntu/linux-meta-linaro-natty.git
people/jcrigby/linux-lt.git
people/jcrigby/null-packaging.git
people/jcrigby/ubuntu-kernel-ci.git
people/nico/linux.git
people/weifeng/bellagio_components.git
people/weifeng/gst-plugins-gl.git
people/weifeng/gst-openmax.git
people/weifeng/kernel.git
people/weifeng/alsa-ucm-test.git
people/weifeng/pulseaudio.git
people/pfalcon/android/platform/manifest.git
people/pfalcon/android/linaro/build-configs.git
people/andygreen/arm-probe.git
people/andygreen/repo-branch-archive.git
people/andygreen/lt-tools.git
people/chaoyang/jpeg.git
people/chaoyang/libpng.git
people/bernhardrosenkranzer/repo-branch-archive.git
people/salgado/patchwork.git
people/mpoirier/snowball/linux-integration-3.0-ux500-androidized.git
people/mpoirier/u-boot-v2011.06.git
people/mpoirier/linux-ubuntu-3.0.n900.git
people/ryanharkin/stm.git
people/ryanharkin/repo-branch-archive.git
people/ryanharkin/uefi-config.git
people/mwaddel/u-boot.git
people/rmk/linux-arm.git
people/tixy/u-boot.git
people/tixy/linux.git
people/tixy/android-common.git
people/tixy/uefi.git
people/tixy/android-manifest.git
people/tixy/android-vexpress-a9.git
people/tixy/kernel.git
people/tixy/android-kernel.git
people/triad/linux-stericsson.git
people/triad/linux-pinctrl.git
people/planglais/linux-tb-ux500.git
people/paulliu/linux-2.6.git
people/rsalveti/linux-linaro-3.0.git
people/mbriand/linux-2.6-arm.git
people/pmaydell/qemu-arm.git
people/pmaydell/boot-wrapper.git
people/hrw/cross-toolchain-packaging.git
people/asac/android/external/skia.git
people/asac/android/packages/apps/Launcher.git
people/asac/android/kernel/lt-ti.git
people/asac/android/kernel/pandroid.git
people/asac/android/u-boot/pandroid.git
people/rusty/qemu-linaro.git
people/sachin/linux-linaro.git
people/sachin/linux-kernel-samsung.git
people/sachin/linux-linaro-2.6.36.git
people/sachin/linux-linaro-3.0.git
people/sachin/linux-linaro-2.6.38.git
people/sachin/linux-linaro-3.1.git
people/jserv/omap4-frameworks-base.git
people/amitdanielk/thermal-test.git
people/amitdanielk/linux.git
people/amitdanielk/pm-qa-thermal.git
people/amitdanielk/library/libnl.git
people/amitdanielk/powertop.git
people/patrikryd/b2r2lib.git
people/patrikryd/panda.git
people/patrikryd/pandaboard.git
people/patrikryd/build.git
people/riczhao/linux-2.6.git
people/chunsangjeong/gralloc-dev.git
people/sudip-jain/smartt-old.git
people/mandeep-ti/libjpeg_8b_neon.git
people/ronynandy/speex.git
people/ronynandy/u-boot-arndale.git
people/ronynandy/edk2-origen.git
people/ronynandy/speex_ubuntu.git
people/ronynandy/linux_stable.git
people/bhoj/boot-wrapper.git
people/bhoj/test-manifest.git
people/ycmiao/pxa-linux.git
people/vireshk/module.git
people/vireshk/linux-linaro-big-LITTLE-MP.git
people/dooferlad/patchwork.git
people/jessebarker/linaro-mm-sig/linux.git
people/jessebarker/linaro-mm-sig/linux-2.6.git
people/sachin-gupta/gstreamer.git
people/stevejahnke/kernel-thermal-framework.git
people/stevejahnke/thermal_manager.git
people/pfefferz/manifest.git
people/pfefferz/linux-2.6.git
people/doanac/LinaroConnect.git
people/doanac/monitis_python.git
people/doanac/linaro-toolchain-benchmarking.git
tools/arm-probe.git
arm/big.LITTLE/mp.git
ubuntu/linux-linaro-oneiric.git
ubuntu/future-linux-linaro-precise-3.2.git
ubuntu/linux-linaro-quantal.git
ubuntu/linux-linaro-precise.git
ubuntu/linux-meta-linaro-natty.git
landing-teams/working/samsung/edk2-origen.git
Thanks!
--
Loïc Minier
When working on low level kernel code, the indication that something
went wrong is often noticed as a kernel oops, or even a totally silent
system. This usually implies a modify-recompile-reboot cycle which can
become very very annoying if the reboot step implies popping out an SD
card from the board, inserting it into the work PC, mounting it, copying
the newly compiled kernel over, unmounting, moving the SD card back to
the board, to finally hit the reset button.
If you are an old fashioned kernel developer like me and live by the
simplest development environment (bash, vi, gcc) and your most trusted
debugging tool is printk(), then having the ability to quickly boot a
new kernel after moving printk traces around in order to pinpoint a
crash location is vital. But even for validation purposes on a remote
board, not needing physical intervention is really nice.
So, by popular demand, here's how I accomplished this on VirtualExpress
with a TC2 tile. This probably applies to other VirtualExpress
configurations too, but TC2 is the only one I tested.
Obtaining U-Boot
----------------
I don't have a particular affection for any bootloaders. They tend to
ask for more and more attention and visibility while their raison d'être
is actually to get out of the way and disappear as fast as possible.
While U-Boot has many things that certainly gets on my nerves, it has a
good point for itself which is its networking support. And here is the
key: let's fetch everything we need to boot the board over the network,
script it, so not to have to deal with the bootloader (or bootloaders in
this case) anymore.
First, let's get a copy of the U-Boot source tree. I used the Linaro
version as it includes Versatile Express support.
$ git clone git://git.linaro.org/boot/u-boot-linaro-stable.git
$ cd u-boot-linaro-stable/
Now... to get rid of U-Boot's most obnoxious feature (my opinion),
the following patch should be applied:
diff --git a/include/configs/vexpress_common.h b/include/configs/vexpress_common.h
index 88a2c95..3328443 100644
--- a/include/configs/vexpress_common.h
+++ b/include/configs/vexpress_common.h
@@ -177,6 +177,8 @@
#define CONFIG_CMD_SAVEENV
#define CONFIG_CMD_RUN
#define CONFIG_CMD_BOOTD
+#define CONFIG_CMD_BOOTZ
+#define CONFIG_SUPPORT_RAW_INITRD
#define CONFIG_CMD_ECHO
#define CONFIG_CMD_FAT
That basically enables U-Boot to boot a plain ARM Linux zImage file
without going through the mkimage step (the bootz command), and load a
plain ramdisk image without having to run mkimage on it. This mkimage
step is just extra fuss I can dispense with when working on and booting
kernels frequently.
Now let's build it. There is no TC2 (ca15 or ca7) config, however the
ca5 one appears to be close enough for our needs:
$ make vexpress_ca5x2
You should end up with a u-boot.bin to be used later.
ARM Versatile Express Boot Monitor
----------------------------------
This is the native boot loader on the Virtual Express. In fact there
are many instances of different loaders even on different processors
making the whole system rather weird but flexible. It lacks the ability
to load files from the network though. But that's what a second stage
bootloader such as U-Boot is for.
Good information on setting up a Virtual Express already exists. While
the instructions listed therein may or may not all apply to our case, I
still recommend to read the following pages to get familiar with this
beast:
https://wiki.linaro.org/PawelMoll/BootingVEMadeEasy
The script to generate a boot script to generate an ATAGS block is a
rather nice hack. But I want runtime DTB support and I prefer booting
over the network, especially when playing with ramdisk images which is
otherwise long to get reflashed. Still this page provides a nice
introduction to Virtual Express setup and gives good insights on the
micro switch usage and the VE boot monitor structure.
https://wiki.linaro.org/ARM/VersatileExpressSetup
This page shows how to install U-Boot on a Virtual Express and that's
what we want here. you should follow the instructions listed for the
CA15x2 CoreTile, except that the U-Boot binary to use is the one we just
compiled above. Also, for TC2 the images.txt file is located in
SITE1/HBI0249A/.
In short, once the internal MicroSD card is mounted over USb, the
u-boot.bin file we compiled should be copied to SOFTWARE/u-boot.bin.
Then the file SITE1/HBI0249A/images.txt should be updated to contain
something similar to this:
NOR4UPDATE: AUTO
NOR4ADDRESS: 0f800000
NOR4FILE: \SOFTWARE\u-boot.bin
NOR4LOAD: 0x80800000
NOR4ENTRY: 0x80800000
We also need a boot script to start U-Boot automatically:
NOR5UPDATE: AUTO
NOR5NAME: BOOTSCRIPT
NOR5ADDRESS: 00000000
NOR5FILE: \SOFTWARE\boot.txt
Here the "BOOTSCRIPT" name is important otherwise the script won't be
found and executed.
The number after "NOR" may differ, depending on the other images your
images.txt may already contain. Don't forget to update the TOTALIMAGES
value at the top to reflect the number of image definitions you have,
especially if you added new ones.
Finally, the content of SOFTWARE/boot.txt only needs to contain one
line:
flash run u-boot
That's it! unmounting the USB disk, setting SW[0] down and booting the
main board (entering the "reboot" command on the serial console) should
bring you to an U-Boot prompt.
The U-Boot configuration
------------------------
Once at the U-Boot prompt, it is necessary to set a couple environment
variables:
VExpress# setenv bootcmd run loadbootscript\; source \$fileaddr
VExpress# setenv loadbootscript dhcp 0x84000000 192.168.2.2:tc2_boot.scr
VExpress# saveenv
In the loadbootscript definition, I used an explicit IP address to
prefix the file name. This is because my DHCP server is not the same
machine as my TFTP server used to provide the location for the loaded
files. If your DHCP configuration already provides that information
then it is not necessary to provide such prefix. If you prefer using a
fixed IP address for the board, you may simply set the ipaddr, netmask
and gatewayip environment variables accordingly, and replace dhcp with
tftp in the definition of loadbootscript. And don't forget to saveenv
again.
That's it! Once the script is loaded over the network, we don't need to
deal with U-Boot's configuration anymore.
The U-Boot boot script
----------------------
Now you need a TFTP server (normally tftpd) on your PC or laptop. In
its content directory, there should be a file called tc2_boot.scr.
Unfortunately, the U-Boot obnoxiousness is striking back at us since
this must be mkimage wrapped. Let's start with the source, say
tc2_boot.txt which should contain the following U-Boot commands:
# set the TFTP server address (the dhcp command clobbers it)
setenv serverip 192.168.2.2
# load a DTB
tftp 0x82000000 vexpress-v2p-iks-tc2.dtb
# tell U-Boot about it
fdt addr $fileaddr
# load a ramdisk image
tftp 0x88000000 initrd.gz
# remember its location and size for later
setenv rd_addr $fileaddr
setenv rd_size $filesize
# load the kernel
tftp 0x81000000 zImage
# set our kernel parameters
setenv bootargs console=ttyAMA0,38400 earlyprintk debug root=/dev/sda1 rootwait
# boot the kernel
bootz $fileaddr $rd_addr:$rd_size $fdtaddr
The above is what I use and can be adapted to your needs. Again, maybe
you don't need to override serverip. Maybe you wish to use a NFS root.
Etc. That's the beauty of it: it is just a .txt file on your PC that you
can modify at will without having to flash it anywhere. Temporary
changes to the DTB with the fdt commands are also possible without
having to modify and recompile the corresponding .dts, etc.
However we need to ubootize it into tc2_boot.scr before it is usable:
$ mkimage -A ARM -T script -C none -d tc2_boot.txt tc2_boot.scr
(The one who tells me how to avoid this step gets a cookie.)
Suffice to copy the desired kernel zImage and initrd files there too for
the boot to proceed. It might even be possible to use a symbolic link
towards the zImage produced by the compilation of the kernel directly so
to avoid that copy, but I didn't push my own laziness that far.
Let's boot!
-----------
Now you may use the "reboot" command at the "Cmd>" prompt provided by
the microcontroller to power up the board. When the board is booted,
this prompt is moved from UART 0 to UART 1 while the kernel console
output is going to UART 0, so it is possible to shutdown or reboot the
board over UART 1 entirely unattended and remotely when both serial
ports are connected to a computer.
Enjoy !
Nicolas
Linaro 12.10 Release (Calendar Week 43): Here is test result summary for
Linaro ubuntu image on following boards:
1) ARM Versatile Express A9;
2) Samsung Origen;
3) TI Panda Board 4430;
4) TI Panda Board 4460.
Synopsis: No change on feature status for vexpress A9 and Samsung Origen.
Audio over HDMI and 3.5mm Jack Ports works well on another Panda 4430 board
which is currently held by another colleague. Suspend / Resume works well
on Panda 4460 but still failed on 4430.
1. vexpress A9 + ubuntu (Column AF):
https://docs.google.com/a/linaro.org/spreadsheet/ccc?key=0AroPySpr4FnEdFNmV…
Features' status is exactly same as previous week. Device Tree is still
unavailable and ARM landing team will continue their work on this. Video
playback is unavailable either.
2. Origen + ubuntu (Column AA):
https://docs.google.com/a/linaro.org/spreadsheet/ccc?key=0AroPySpr4FnEdEowN…
Now Power Management test doesn't hang the board, but still have many
failed test result. WiFi, Bluetooth, Unity 3D, HDMI and Video Playback are
still unavailable.
3. Panda 4430 + ubuntu (Column AC):
https://docs.google.com/a/linaro.org/spreadsheet/ccc?key=0AroPySpr4FnEdEwwZ…
Audio over HDMI and 3.5mm Jack Ports works well on another Panda 4430
board, and this will lead us to consider more about the hardware issue. The
other features remain the same.
4. Panda 4460 + ubuntu (Column AB):
https://docs.google.com/a/linaro.org/spreadsheet/ccc?key=0AroPySpr4FnEdEwwZ…
Suspend / Resume now works well on this build, but the Power Management
test popped up an old failure again. All other features remain the same,
dead lock error is still in the boot log and Audio input over 3.5mm Jack
Port is unavailable.
For the previous week (Calendar week 42) summary, please refer to
attachment.
Thank you.
Best Regards
Botao Sun
Greetings All,
More and more of people are getting interested in the subject of power
(energy) consumption monitoring. We have some external tools like
"battery simulators", energy probes etc., but some targets can measure
their power usage on their own.
Traditionally such data should be exposed to the user via hwmon sysfs
interface, and that's exactly what I did for "my" platform - I have
a /sys/class/hwmon/hwmon*/device/energy*_input and this was good
enough to draw pretty graphs in userspace. Everyone was happy...
Now I am getting new requests to do more with this data. In particular
I'm asked how to add such information to ftrace/perf output. The second
most frequent request is about providing it to a "energy aware"
cpufreq governor.
I've came up with three (non-mutually exclusive) options. I will
appreciate any other ideas and comments (including "it makes not sense
whatsoever" ones, with justification). Of course I am more than willing
to spend time on prototyping anything that seems reasonable and propose
patches.
=== Option 1: Trace event ===
This seems to be the "cheapest" option. Simply defining a trace event
that can be generated by a hwmon (or any other) driver makes the
interesting data immediately available to any ftrace/perf user. Of
course it doesn't really help with the cpufreq case, but seems to be
a good place to start with.
The question is how to define it... I've came up with two prototypes:
= Generic hwmon trace event =
This one allows any driver to generate a trace event whenever any
"hwmon attribute" (measured value) gets updated. The rate at which the
updates happen can be controlled by already existing "update_interval"
attribute.
8<-------------------------------------------
TRACE_EVENT(hwmon_attr_update,
TP_PROTO(struct device *dev, struct attribute *attr, long long input),
TP_ARGS(dev, attr, input),
TP_STRUCT__entry(
__string( dev, dev_name(dev))
__string( attr, attr->name)
__field( long long, input)
),
TP_fast_assign(
__assign_str(dev, dev_name(dev));
__assign_str(attr, attr->name);
__entry->input = input;
),
TP_printk("%s %s %lld", __get_str(dev), __get_str(attr), __entry->input)
);
8<-------------------------------------------
It generates such ftrace message:
<...>212.673126: hwmon_attr_update: hwmon4 temp1_input 34361
One issue with this is that some external knowledge is required to
relate a number to a processor core. Or maybe it's not an issue at all
because it should be left for the user(space)?
= CPU power/energy/temperature trace event =
This one is designed to emphasize the relation between the measured
value (whether it is energy, temperature or any other physical
phenomena, really) and CPUs, so it is quite specific (too specific?)
8<-------------------------------------------
TRACE_EVENT(cpus_environment,
TP_PROTO(const struct cpumask *cpus, long long value, char unit),
TP_ARGS(cpus, value, unit),
TP_STRUCT__entry(
__array( unsigned char, cpus, sizeof(struct cpumask))
__field( long long, value)
__field( char, unit)
),
TP_fast_assign(
memcpy(__entry->cpus, cpus, sizeof(struct cpumask));
__entry->value = value;
__entry->unit = unit;
),
TP_printk("cpus %s %lld[%c]",
__print_cpumask((struct cpumask *)__entry->cpus),
__entry->value, __entry->unit)
);
8<-------------------------------------------
And the equivalent ftrace message is:
<...>127.063107: cpus_environment: cpus 0,1,2,3 34361[C]
It's a cpumask, not just single cpu id, because the sensor may measure
the value per set of CPUs, eg. a temperature of the whole silicon die
(so all the cores) or an energy consumed by a subset of cores (this
is my particular use case - two meters monitor a cluster of two
processors and a cluster of three processors, all working as a SMP
system).
Of course the cpus __array could be actually a special __cpumask field
type (I've just hacked the __print_cpumask so far). And I've just
realised that the unit field should actually be a string to allow unit
prefixes to be specified (the above should obviously be "34361[mC]"
not "[C]"). Also - excuse the "cpus_environment" name - this was the
best I was able to come up with at the time and I'm eager to accept
any alternative suggestions :-)
=== Option 2: hwmon perf PMU ===
Although the trace event makes it possible to obtain interesting
information using perf, the user wouldn't be able to treat the
energy meter as a normal data source. In particular there would
be no way of creating a group of events consisting eg. of a
"normal" leader (eg. cache miss event) triggering energy meter
read. The only way to get this done is to implement a perf PMU
backend providing "environmental data" to the user.
= High-level hwmon API and PMU =
Current hwmon subsystem does not provide any abstraction for the
measured values and requires particular drivers to create specified
sysfs attributes than used by userspace libsensors. This makes
the framework ultimately flexible and ultimately hard to access
from within the kernel...
What could be done here is some (simple) API to register the
measured values with the hwmon core which would result in creating
equivalent sysfs attributes automagically, but also allow a
in-kernel API for values enumeration and access. That way the core
could also register a "hwmon PMU" with the perf framework providing
data from all "compliant" drivers.
= A driver-specific PMU =
Of course a particular driver could register its own perf PMU on its
own. It's certainly an option, just very suboptimal in my opinion.
Or maybe not? Maybe the task is so specialized that it makes sense?
=== Option 3: CPU power(energy) monitoring framework ===
And last but not least, maybe the problem deserves some dedicated
API? Something that would take providers and feed their data into
interested parties, in particular a perf PMU implementation and
cpufreq governors?
Maybe it could be an extension to the thermal framework? It already
gives some meaning to a physical phenomena. Adding other, related ones
like energy, and relating it to cpu cores could make some sense.
I've tried to gather all potentially interested audience in the To:
list, but if I missed anyone - please, do let them (and/or me) know.
Best regards and thanks for participation in the discussion!
Pawel
Hi All,
Due to a glitch with UEFI and the latest kernels, we are forced to leave the TC2s offline until the issue is resolved. Ryan Harkin and I have been working to try and resolve this, but the best we could do is to get them to pass their health check (using sticking plaster, string and a large hammer) but they would then fail every test that was submitted to them, which would be kind of pointless. We're working actively to fix this problem, and I'll let you know when we're back up and running.
Thanks, and apologies once again,
Dave
Hi Fengguang,
Thanks for your mail. Few things i learnt from it:
- Rafael has already applied my patches :)
- I haven't used sparse in my life till this point. Now i know how to use it.
On 23 October 2012 10:21, Fengguang Wu <fengguang.wu(a)intel.com> wrote:
> Hi viresh,
>
> FYI, there are new sparse warnings show up in
Actually these aren't new warnings, but old. Because some part is moved from
one file to another, that's why your script shows them as new warnings.
Anyway, i don't hesitate in fixing them.
@Rafael: Most of these are due to mixed use of u64 and cputime64_t. Both of
which are u64 if i am not wrong. Any specific reason that we used cputime64_t
instead of u64? Or can i make everything u64 instead in governors?
--
viresh
> tree: git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next
> head: 13f5e2d9a915373dd1573d8fe0214738bc69004f
> commit: 83a73f712f2275033b2dc7f5c664988a1823ebc7 cpufreq: Move common part from governors to separate file, v2
> date: 5 hours ago
>
> + drivers/cpufreq/cpufreq_governor.c:46:53: sparse: incorrect type in argument 2 (different modifiers)
> drivers/cpufreq/cpufreq_governor.c:46:53: expected unsigned long long [usertype] *wall
> drivers/cpufreq/cpufreq_governor.c:46:53: got unsigned long long [nocast] [usertype] *wall
> + drivers/cpufreq/cpufreq_governor.c:46:53: sparse: implicit cast from nocast type
> drivers/cpufreq/cpufreq_governor.c:48:58: sparse: incorrect type in argument 2 (different modifiers)
> drivers/cpufreq/cpufreq_governor.c:48:58: expected unsigned long long [usertype] *last_update_time
> drivers/cpufreq/cpufreq_governor.c:48:58: got unsigned long long [nocast] [usertype] *wall
> drivers/cpufreq/cpufreq_governor.c:48:58: sparse: implicit cast from nocast type
>
> vim +46 drivers/cpufreq/cpufreq_governor.c
>
> 83a73f71 viresh kumar 2012-10-23 30 busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_SOFTIRQ];
> 83a73f71 viresh kumar 2012-10-23 31 busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_STEAL];
> 83a73f71 viresh kumar 2012-10-23 32 busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_NICE];
> 83a73f71 viresh kumar 2012-10-23 33
> 83a73f71 viresh kumar 2012-10-23 34 idle_time = cur_wall_time - busy_time;
> 83a73f71 viresh kumar 2012-10-23 35 if (wall)
> 83a73f71 viresh kumar 2012-10-23 36 *wall = jiffies_to_usecs(cur_wall_time);
> 83a73f71 viresh kumar 2012-10-23 37
> 83a73f71 viresh kumar 2012-10-23 38 return jiffies_to_usecs(idle_time);
> 83a73f71 viresh kumar 2012-10-23 39 }
> 83a73f71 viresh kumar 2012-10-23 40
> 83a73f71 viresh kumar 2012-10-23 41 cputime64_t get_cpu_idle_time(unsigned int cpu, cputime64_t *wall)
> 83a73f71 viresh kumar 2012-10-23 42 {
> 83a73f71 viresh kumar 2012-10-23 43 u64 idle_time = get_cpu_idle_time_us(cpu, NULL);
> 83a73f71 viresh kumar 2012-10-23 44
> 83a73f71 viresh kumar 2012-10-23 45 if (idle_time == -1ULL)
> 83a73f71 viresh kumar 2012-10-23 @46 return get_cpu_idle_time_jiffy(cpu, wall);
> 83a73f71 viresh kumar 2012-10-23 47 else
> 83a73f71 viresh kumar 2012-10-23 48 idle_time += get_cpu_iowait_time_us(cpu, wall);
> 83a73f71 viresh kumar 2012-10-23 49
> 83a73f71 viresh kumar 2012-10-23 50 return idle_time;
> 83a73f71 viresh kumar 2012-10-23 51 }
> 83a73f71 viresh kumar 2012-10-23 52 EXPORT_SYMBOL_GPL(get_cpu_idle_time);
>
> ---
> 0-DAY kernel build testing backend Open Source Technology Center
> Fengguang Wu, Yuanhan Liu Intel Corporation
From: Morten Rasmussen <morten.rasmussen(a)arm.com>
Hi Paul, Paul, Peter, Suresh, linaro-sched-sig, and LKML,
As a follow-up on my Linux Plumbers Conference talk about my experiments with
scheduling on heterogeneous systems I'm posting a proof-of-concept patch set
with my modifications. The intention behind the modifications is to tweak
scheduling behaviour to only use fast (and power hungry) cores when it is
necessary and also improve performance consistency. Without the modifications
it is more or less random where tasks are scheduled and so is the execution
time.
I'm seeing good improvements on performance consistency for web browsing on
Android using Bbench <http://www.gem5.org/Bbench> on the ARM big.LITTLE TC2
chip, which has two fast cores (Cortex-A15) and three power-efficient cores
(Cortex-A7). The total execution time numbers below are for Androids
SurfaceFlinger process is key for page rendering performance. The average
execution time is lower with the patches enabled and the standard deviation is
much smaller. Similar improvements can be seen for the Android.Browser and
WebViewCoreThread processes.
Total execution time statistics based on 50 runs.
SurfaceFlinger SMP kernel [s] HMP modifications [s]
------------------------------------------------------
Average 14.617 11.012
St. Dev. 4.577 0.902
10% Pctl. 9.343 10.783
90% Pctl. 18.743 11.695
Unfortunately, I cannot share power-efficiency numbers at this stage.
This patch set introduces proof-of-concept scheduler modifications which
attempt to improve scheduling decisions on heterogeneous multi-processor
systems (HMP) such as ARM big.LITTLE systems. The patch set relies on the
entity load-tracking re-work patch set by Paul Turner:
<https://lkml.org/lkml/2012/8/23/267>
The modifications attempt to migrate tasks between cores with different
compute capacity depending on the tracked load and priority. The aim is
to only use fast cores for tasks which really need the extra performance
and thereby improve power consumption by running everything else on the
slow cores.
The patch introduces hmp_domains to represent the different types of cores
that are available on the given platform. Multiple (>2) hmp_domains is
supported but not tested. hmp_domains must be set up by platform code and
the patch set includes patches for ARM platforms using device-tree.
The patches intentionally try to avoid modifying the existing code paths
as much as possible. The aim is to experiment with HMP scheduling and get
the overall policy right before integrating it properly with the existing
load-balancer.
Morten
Morten Rasmussen (10):
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
arch/arm/Kconfig | 46 +++++
arch/arm/include/asm/topology.h | 32 +++
arch/arm/kernel/topology.c | 91 ++++++++
include/linux/sched.h | 11 +
include/trace/events/sched.h | 153 ++++++++++++++
kernel/sched/core.c | 4 +
kernel/sched/fair.c | 434 ++++++++++++++++++++++++++++++++++++++-
kernel/sched/sched.h | 9 +
8 files changed, 779 insertions(+), 1 deletion(-)
--
1.7.9.5