* [U-Boot] Enabling cache on ARM
From: Stefano Babic @ 2011-10-31 15:09 UTC (permalink / raw)
To: u-boot
In-Reply-To: <CAOMZO5DeX51==Jr7U537qLp7CwFpdPCxx0DicF64+Tg0Po2ciQ@mail.gmail.com>
On 10/31/2011 03:36 PM, Fabio Estevam wrote:
> Hi Stefano and Albert,
>
> I would like to enable cache on some i.MX boards (ARM9, ARM11 and Cortex-A8).
>
> Are there any boards I could use as a reference on how to properly
> implement this?
>
> I thought I should simply do:
>
> #undef CONFIG_SYS_ICACHE_OFF
> #undef CONFIG_SYS_DCACHE_OFF
This is not enough, at least for systems where cache is not yet supported.
>
> ,but still I get a 'WARNING: Caches not enabled' message when I do this.
The reason is that enable_caches is missing for i.MX targets. You can
try to add enable_caches inside your board file, and implement it
calling dcache_enable().
However, i.MX drivers are actually proofed to be faulty when the cache
is enabled. At least the FEC driver and the MMC driver must be changed
to make them working when cache is on.
Best regards,
Stefano Babic
--
=====================================================================
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de
=====================================================================
^ permalink raw reply
* Re: [BUG] kernel 3.1.0 possible circular locking dependency detected
From: Linus Torvalds @ 2011-10-31 15:08 UTC (permalink / raw)
To: Knut Petersen
Cc: linux-kernel, reiserfs-devel, Greg KH, Al Viro, Christoph Hellwig,
Frederic Weisbecker, Peter Zijlstra
In-Reply-To: <4EAE5DE3.2020205@t-online.de>
[ Added a few more people to the cc ]
On Mon, Oct 31, 2011 at 1:35 AM, Knut Petersen
<Knut_Petersen@t-online.de> wrote:
> After a " rm -r /verybigdir" (about 12G on a 25G reiserfs 3.6partition)
> I found the following report about a circular locking dependency in
> kernel 3.1.0
Heh. There is even a comment about the ordering violation:
/* We use I_MUTEX_CHILD here to silence lockdep. It's safe because xattr
* mutation ops aren't called during rename or splace, which are the
* only other users of I_MUTEX_CHILD. It violates the ordering, but that's
* better than allocating another subclass just for this code. */
and apparently the comment is wrong: we *do* end up looking up xattrs
during splice, due to the security_inode_need_killpriv() thing.
So I think this needs a suid (or sgid) file that has xattrs and is removed.
That said, I suspect this is a false positive, because the actual
unlink can never happen while somebody is splicing to/from the same
file at the same time (because then the iput wouldn't be the last one
for the inode, and the file removal would be delayed until the file
has been closed for the last time).
But the hacky use of "I_MUTEX_CHILD" is basically not the proper way
to silence the lockdep splat.
Anybody?
Linus
^ permalink raw reply
* [U-Boot] [PATCH] miiphy: Note that miiphy_* API is deprecated
From: Tabi Timur-B04825 @ 2011-10-31 15:08 UTC (permalink / raw)
To: u-boot
In-Reply-To: <1320072373-367-1-git-send-email-afleming@freescale.com>
On Mon, Oct 31, 2011 at 9:46 AM, Andy Fleming <afleming@freescale.com> wrote:
> We want to move everything to phylib, and we definitely don't want
> new drivers using the miiphy infrastructure.
How about using gcc's deprecated function feature? Or is that too aggressive?
http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
--
Timur Tabi
Linux kernel developer at Freescale
^ permalink raw reply
* Re: [patch 07/66] btrfs: clear_extent_bit error push-up
From: David Sterba @ 2011-10-31 15:07 UTC (permalink / raw)
To: Jeff Mahoney, Chris Mason, David Sterba, Linux Btrfs
In-Reply-To: <20111027120049.GA19328@twin.jikos.cz>
On Thu, Oct 27, 2011 at 02:00:49PM +0200, David Sterba wrote:
> still crashes in xfstests/113 with the following fixup. so there may be more
> occurences of the ret value clobbering, I closely reviewed only this patch.
> I'll verify with just that on top.
So it did not crash (though I've hit the NULL-deref in
btrfs_print_leaf), but no errors related to clear_extent_bit.
david
^ permalink raw reply
* [U-Boot] [PATCH] part_efi: fix build warning
From: Lei Wen @ 2011-10-31 15:07 UTC (permalink / raw)
To: u-boot
part_efi.c: In function 'print_part_efi':
part_efi.c:133: warning: passing argument 3 of 'is_gpt_valid' from
incompatible pointer type
part_efi.c:95: note: expected 'struct gpt_header *' but argument is of
type 'struct gpt_header **'
part_efi.c: In function 'get_partition_info_efi':
part_efi.c:172: warning: passing argument 3 of 'is_gpt_valid' from
incompatible pointer type
part_efi.c:95: note: expected 'struct gpt_header *' but argument is of
type 'struct gpt_header **'
Signed-off-by: Lei Wen <leiwen@marvell.com>
---
disk/part_efi.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/disk/part_efi.c b/disk/part_efi.c
index e7f2714..ddf80a7 100644
--- a/disk/part_efi.c
+++ b/disk/part_efi.c
@@ -130,7 +130,7 @@ void print_part_efi(block_dev_desc_t * dev_desc)
}
/* This function validates AND fills in the GPT header and PTE */
if (is_gpt_valid(dev_desc, GPT_PRIMARY_PARTITION_TABLE_LBA,
- &(gpt_head), &gpt_pte) != 1) {
+ gpt_head, &gpt_pte) != 1) {
printf("%s: *** ERROR: Invalid GPT ***\n", __func__);
return;
}
@@ -169,7 +169,7 @@ int get_partition_info_efi(block_dev_desc_t * dev_desc, int part,
/* This function validates AND fills in the GPT header and PTE */
if (is_gpt_valid(dev_desc, GPT_PRIMARY_PARTITION_TABLE_LBA,
- &(gpt_head), &gpt_pte) != 1) {
+ gpt_head, &gpt_pte) != 1) {
printf("%s: *** ERROR: Invalid GPT ***\n", __func__);
return -1;
}
--
1.7.0.4
^ permalink raw reply related
* [U-Boot] [PATCH 2/2] armada100: define CONFIG_SYS_CACHELINE_SIZE
From: Lei Wen @ 2011-10-31 15:05 UTC (permalink / raw)
To: u-boot
In-Reply-To: <1320073546-7277-1-git-send-email-leiwen@marvell.com>
By default, on Armada100 SoC DCache Lnd ICache line
lengths are 32 bytes long
Signed-off-by: Lei Wen <leiwen@marvell.com>
---
arch/arm/include/asm/arch-armada100/config.h | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/arch/arm/include/asm/arch-armada100/config.h b/arch/arm/include/asm/arch-armada100/config.h
index d2094e5..637f313 100644
--- a/arch/arm/include/asm/arch-armada100/config.h
+++ b/arch/arm/include/asm/arch-armada100/config.h
@@ -33,6 +33,8 @@
#include <asm/arch/armada100.h>
#define CONFIG_ARM926EJS 1 /* Basic Architecture */
+/* default Dcache Line length for armada100 */
+#define CONFIG_SYS_CACHELINE_SIZE 32
#define CONFIG_SYS_TCLK (14745600) /* NS16550 clk config */
#define CONFIG_SYS_HZ_CLOCK (3250000) /* Timer Freq. 3.25MHZ */
--
1.7.0.4
^ permalink raw reply related
* [U-Boot] [PATCH 1/2] pantheon: define CONFIG_SYS_CACHELINE_SIZE
From: Lei Wen @ 2011-10-31 15:05 UTC (permalink / raw)
To: u-boot
In-Reply-To: <1320073546-7277-1-git-send-email-leiwen@marvell.com>
By default, on Pantheon SoC DCache Lnd ICache line
lengths are 32 bytes long
Signed-off-by: Lei Wen <leiwen@marvell.com>
---
arch/arm/include/asm/arch-pantheon/config.h | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/arch/arm/include/asm/arch-pantheon/config.h b/arch/arm/include/asm/arch-pantheon/config.h
index d10583d..e4fce7d 100644
--- a/arch/arm/include/asm/arch-pantheon/config.h
+++ b/arch/arm/include/asm/arch-pantheon/config.h
@@ -28,6 +28,8 @@
#include <asm/arch/pantheon.h>
#define CONFIG_ARM926EJS 1 /* Basic Architecture */
+/* default Dcache Line length for pantheon */
+#define CONFIG_SYS_CACHELINE_SIZE 32
#define CONFIG_SYS_TCLK (14745600) /* NS16550 clk config */
#define CONFIG_SYS_HZ_CLOCK (3250000) /* Timer Freq. 3.25MHZ */
--
1.7.0.4
^ permalink raw reply related
* [U-Boot] [PATCH 0/2] fix build error for pantheon and armada100
From: Lei Wen @ 2011-10-31 15:05 UTC (permalink / raw)
To: u-boot
For the CONFIG_SYS_CACHELINE_SIZE is required to be defined defaultly.
Add it to pantheon and armada100 accordingly.
Lei Wen (2):
pantheon: define CONFIG_SYS_CACHELINE_SIZE
armada100: define CONFIG_SYS_CACHELINE_SIZE
arch/arm/include/asm/arch-armada100/config.h | 2 ++
arch/arm/include/asm/arch-pantheon/config.h | 2 ++
2 files changed, 4 insertions(+), 0 deletions(-)
^ permalink raw reply
* [PATCH] xfstests: add 265 and 266 for multiple media files
From: Bill Kendall @ 2011-10-31 15:03 UTC (permalink / raw)
To: xfs
This patch adds a couple of tests for xfsdump when multiple media files
are used. 265 tests the case where a file is split across multiple media
files, and 266 tests the case where a file ends on one media file and
the next media file starts on another file. These tests use a small
media file size (xfsdump -d) so that they don't rely on having to hit
end-of-tape.
Signed-off-by: Bill Kendall <wkendall@sgi.com>
---
265 | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++
265.out | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
266 | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++
266.out | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
common.dump | 6 ++--
group | 2 +
6 files changed, 332 insertions(+), 3 deletions(-)
create mode 100755 265
create mode 100644 265.out
create mode 100755 266
create mode 100644 266.out
diff --git a/265 b/265
new file mode 100755
index 0000000..65d773e
--- /dev/null
+++ b/265
@@ -0,0 +1,75 @@
+#! /bin/bash
+# FS QA Test No. 265
+#
+# Test xfsdump with a file spanning multiple media files.
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2011 SGI. All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#-----------------------------------------------------------------------
+#
+# creator
+owner=wkendall@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0 # success is the default!
+trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
+
+#
+# create a 40 MiB file with an extended attr.
+# xfsdump writes file data in "extent groups", currently 16 MiB in size. After
+# writing an extent group or finishing a file, xfsdump will start a new media
+# file if it is over the suggested size. With a single 40 MiB file and using a
+# suggested media file size of 12 MiB below, this dump will be contained in 3
+# media files.
+#
+_create_files()
+{
+ cat <<End-of-File >$tmp.config
+# pathname size user group perm name value namespace
+biggg 41943040 $nobody $nobody 777 attr1 some_text1 root
+End-of-File
+
+ _wipe_fs
+ _do_create_dumpdir_fill
+ _stable_fs
+}
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.dump
+. ./common.attr
+
+# real QA test starts here
+_supported_fs xfs
+_supported_os Linux
+
+_require_tape $TAPE_DEV
+_require_attrs
+
+_create_files
+_erase_hard
+_do_dump -d 12
+_do_restore
+_ls_compare_sub
+_diff_compare
+_diff_compare_eas
+
+# success, all done
+exit
diff --git a/265.out b/265.out
new file mode 100644
index 0000000..863d6e6
--- /dev/null
+++ b/265.out
@@ -0,0 +1,88 @@
+QA output created by 265
+Put scsi tape driver into variable block size mode
+Creating directory system to dump using src/fill.
+Setup Attribute "attr1" set to a 10 byte value for biggg:
+some_text1
+.
+Erasing tape
+Dumping to tape...
+xfsdump -d12 -f TAPE_DEV -M stress_tape_media -L stress_265 SCRATCH_MNT
+xfsdump: using scsi tape (drive_scsitape) strategy
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "stress_265"
+xfsdump: ino map <PHASES>
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: /var/xfsdump/inventory created
+xfsdump: preparing drive
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: creating dump session media file 1 (media 0, file 1)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: creating dump session media file 2 (media 0, file 2)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dumping session inventory
+xfsdump: beginning inventory media file
+xfsdump: media file 3 (media 0, file 3)
+xfsdump: ending inventory media file
+xfsdump: inventory media file size NUM bytes
+xfsdump: writing stream terminator
+xfsdump: beginning media stream terminator
+xfsdump: media file 4 (media 0, file 4)
+xfsdump: ending media stream terminator
+xfsdump: media stream terminator size BLOCKSZ bytes
+xfsdump: dump size (non-dir files) : NUM bytes
+xfsdump: dump complete: SECS seconds elapsed
+xfsdump: Dump Status: SUCCESS
+Rewinding tape
+Restoring from tape...
+xfsrestore -f TAPE_DEV -L stress_265 RESTORE_DIR
+xfsrestore: using scsi tape (drive_scsitape) strategy
+xfsrestore: using online session inventory
+xfsrestore: searching media for directory dump
+xfsrestore: preparing drive
+xfsrestore: examining media file 0
+xfsrestore: reading directories
+xfsrestore: 2 directories and 2 entries processed
+xfsrestore: directory post-processing
+xfsrestore: restoring non-directory files
+xfsrestore: examining media file 1
+xfsrestore: seeking past media file directory dump
+xfsrestore: restoring non-directory files
+xfsrestore: examining media file 2
+xfsrestore: seeking past media file directory dump
+xfsrestore: restoring non-directory files
+xfsrestore: restore complete: SECS seconds elapsed
+xfsrestore: Restore Status: SUCCESS
+Comparing listing of dump directory with restore directory
+Files TMP.dump_dir and TMP.restore_dir are identical
+Comparing dump directory with restore directory
+Files DUMP_DIR/biggg and RESTORE_DIR/DUMP_SUBDIR/biggg are identical
+Only in SCRATCH_MNT: RESTORE_SUBDIR
+Comparing dump directory with restore directory
+Looking at the extended attributes (EAs)
+EAs on dump
+User names
+Root names
+Attribute "attr1" had a 10 byte value for DUMP_DIR/biggg:
+some_text1
+EAs on restore
+User names
+Root names
+Attribute "attr1" had a 10 byte value for DUMP_DIR/biggg:
+some_text1
+Files 265.ea1 and 265.ea2 are identical
diff --git a/266 b/266
new file mode 100755
index 0000000..46e40c4
--- /dev/null
+++ b/266
@@ -0,0 +1,78 @@
+#! /bin/bash
+# FS QA Test No. 266
+#
+# Test xfsdump with multiple media files where a file ends
+# at the end of the first media file (i.e., no file is split
+# across media files).
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2011 SGI. All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#-----------------------------------------------------------------------
+#
+# creator
+owner=wkendall@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0 # success is the default!
+trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
+
+#
+# create two 12 MiB files with extended attrs.
+# xfsdump writes file data in "extent groups", currently 16 MiB in size. After
+# writing an extent group or finishing a file, xfsdump will start a new media
+# file if it is over the suggested size. A media file size of 8 MiB is used
+# below, so after dumping a 12 MiB file xfsdump will start a new media file and
+# no file will be split across a media file.
+#
+_create_files()
+{
+ cat <<End-of-File >$tmp.config
+# pathname size user group perm name value namespace
+bigg1 12582912 $nobody $nobody 777 attr1 some_text1 root
+bigg2 12582912 $nobody $nobody 777 attr2 some_text2 user
+End-of-File
+
+ _wipe_fs
+ _do_create_dumpdir_fill
+ _stable_fs
+}
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.dump
+. ./common.attr
+
+# real QA test starts here
+_supported_fs xfs
+_supported_os Linux
+
+_require_tape $TAPE_DEV
+_require_attrs
+
+_create_files
+_erase_hard
+_do_dump -d 8
+_do_restore
+_ls_compare_sub
+_diff_compare
+_diff_compare_eas
+
+# success, all done
+exit
diff --git a/266.out b/266.out
new file mode 100644
index 0000000..853dc96
--- /dev/null
+++ b/266.out
@@ -0,0 +1,86 @@
+QA output created by 266
+Put scsi tape driver into variable block size mode
+Creating directory system to dump using src/fill.
+Setup Attribute "attr1" set to a 10 byte value for bigg1:
+some_text1
+.Attribute "attr2" set to a 10 byte value for bigg2:
+some_text2
+.
+Erasing tape
+Dumping to tape...
+xfsdump -d8 -f TAPE_DEV -M stress_tape_media -L stress_266 SCRATCH_MNT
+xfsdump: using scsi tape (drive_scsitape) strategy
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "stress_266"
+xfsdump: ino map <PHASES>
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: /var/xfsdump/inventory created
+xfsdump: preparing drive
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: creating dump session media file 1 (media 0, file 1)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dumping session inventory
+xfsdump: beginning inventory media file
+xfsdump: media file 2 (media 0, file 2)
+xfsdump: ending inventory media file
+xfsdump: inventory media file size NUM bytes
+xfsdump: writing stream terminator
+xfsdump: beginning media stream terminator
+xfsdump: media file 3 (media 0, file 3)
+xfsdump: ending media stream terminator
+xfsdump: media stream terminator size BLOCKSZ bytes
+xfsdump: dump size (non-dir files) : NUM bytes
+xfsdump: dump complete: SECS seconds elapsed
+xfsdump: Dump Status: SUCCESS
+Rewinding tape
+Restoring from tape...
+xfsrestore -f TAPE_DEV -L stress_266 RESTORE_DIR
+xfsrestore: using scsi tape (drive_scsitape) strategy
+xfsrestore: using online session inventory
+xfsrestore: searching media for directory dump
+xfsrestore: preparing drive
+xfsrestore: examining media file 0
+xfsrestore: reading directories
+xfsrestore: 2 directories and 3 entries processed
+xfsrestore: directory post-processing
+xfsrestore: restoring non-directory files
+xfsrestore: examining media file 1
+xfsrestore: seeking past media file directory dump
+xfsrestore: restoring non-directory files
+xfsrestore: restore complete: SECS seconds elapsed
+xfsrestore: Restore Status: SUCCESS
+Comparing listing of dump directory with restore directory
+Files TMP.dump_dir and TMP.restore_dir are identical
+Comparing dump directory with restore directory
+Files DUMP_DIR/bigg1 and RESTORE_DIR/DUMP_SUBDIR/bigg1 are identical
+Files DUMP_DIR/bigg2 and RESTORE_DIR/DUMP_SUBDIR/bigg2 are identical
+Only in SCRATCH_MNT: RESTORE_SUBDIR
+Comparing dump directory with restore directory
+Looking at the extended attributes (EAs)
+EAs on dump
+User names
+Attribute "attr2" had a 10 byte value for DUMP_DIR/bigg2:
+some_text2
+Root names
+Attribute "attr1" had a 10 byte value for DUMP_DIR/bigg1:
+some_text1
+EAs on restore
+User names
+Attribute "attr2" had a 10 byte value for DUMP_DIR/bigg2:
+some_text2
+Root names
+Attribute "attr1" had a 10 byte value for DUMP_DIR/bigg1:
+some_text1
+Files 266.ea1 and 266.ea2 are identical
diff --git a/common.dump b/common.dump
index d9e6565..3942e83 100644
--- a/common.dump
+++ b/common.dump
@@ -909,9 +909,9 @@ _parse_args()
-Q)
do_quota_check=false
;;
- -l)
- [ -z "$2" ] && _fail "missing argument for -l"
- dump_args="$dump_args -l$2"
+ -l|-d)
+ [ -z "$2" ] && _fail "missing argument for $1"
+ dump_args="$dump_args $1$2"
shift
;;
*)
diff --git a/group b/group
index 70ea462..8a23320 100644
--- a/group
+++ b/group
@@ -378,3 +378,5 @@ deprecated
262 auto quick quota
263 rw auto quick
264 dump ioctl auto quick
+265 dump ioctl tape
+266 dump ioctl tape
--
1.7.0.4
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply related
* Re: iwlagn: memory corruption with WPA enterprise
From: Stanislaw Gruszka @ 2011-10-31 16:03 UTC (permalink / raw)
To: Tomáš Janoušek; +Cc: linux-kernel, Wey-Yi Guy, linux-wireless
In-Reply-To: <20111029171554.GA16596@nomi.cz>
On Sat, Oct 29, 2011 at 07:15:54PM +0200, Tomáš Janoušek wrote:
> Is there anything I can do to track this down? Perhaps try some experimental
> uCode or something?
You may try debugging patches I posted a while ago:
http://marc.info/?l=linux-mm&m=131914560820378&w=2
http://marc.info/?l=linux-mm&m=131914560820293&w=2
http://marc.info/?l=linux-mm&m=131914560820317&w=2
With a bit of luck, kernel should panic and dump call-trace when
bad code start to write at memory addresses where is not suppose
to.
You have to compile kernel with CONFIG_DEBUG_PAGEALLOC and add
corrupt_dbg=1 to catch memory corruption. However that may not
work if you have small amount of memory.
Also would be good to enable other debug options:
CONFIG_DEBUG_OBJECTS=y
CONFIG_DEBUG_OBJECTS_FREE=y
CONFIG_DEBUG_OBJECTS_TIMERS=y
CONFIG_DEBUG_OBJECTS_WORK=y
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
CONFIG_DEBUG_SG=y
CONFIG_DEBUG_LIST=y
Stanislaw
^ permalink raw reply
* [PATCH] xfstests: delay before dumps for incremental tests
From: Bill Kendall @ 2011-10-31 15:02 UTC (permalink / raw)
To: xfs
To get reproducible results when testing incremental backups, files
contained in a backup should not have the same timestamp (at second
resolution) as the backup itself. If they do, those files will also
be included in the incremental backup, and this will likely cause
issues in the expected output of the test. This patch adds a sleep
to test 024 prior to doing the level 0 backup. The other incremental
tests already include similar delays.
Signed-off-by: Bill Kendall <wkendall@sgi.com>
---
024 | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/024 b/024
index de5ab5f..64b59bc 100755
--- a/024
+++ b/024
@@ -42,6 +42,8 @@ _supported_os Linux
_require_tape $TAPE_DEV
_create_dumpdir_fill
+# ensure file/dir timestamps precede dump timestamp
+sleep 2
src/bstat $SCRATCH_MNT >>$here/$seq.full
_erase_hard
_do_dump
--
1.7.0.4
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply related
* [PATCH 2/3] ext4: remove unnecessary call to waitqueue_active()
From: Theodore Ts'o @ 2011-10-31 15:02 UTC (permalink / raw)
To: Ext4 Developers List; +Cc: Theodore Ts'o
In-Reply-To: <1320073367-28916-1-git-send-email-tytso@mit.edu>
The usage of waitqueue_active() is not necessary, and introduces (I
believe) a hard-to-hit race.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
---
fs/ext4/page-io.c | 15 ++++-----------
1 files changed, 4 insertions(+), 11 deletions(-)
diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c
index aed4096..4fa1d70 100644
--- a/fs/ext4/page-io.c
+++ b/fs/ext4/page-io.c
@@ -70,7 +70,6 @@ static void put_io_page(struct ext4_io_page *io_page)
void ext4_free_io_end(ext4_io_end_t *io)
{
int i;
- wait_queue_head_t *wq;
BUG_ON(!io);
if (io->page)
@@ -78,10 +77,8 @@ void ext4_free_io_end(ext4_io_end_t *io)
for (i = 0; i < io->num_io_pages; i++)
put_io_page(io->pages[i]);
io->num_io_pages = 0;
- wq = ext4_ioend_wq(io->inode);
- if (atomic_dec_and_test(&EXT4_I(io->inode)->i_ioend_count) &&
- waitqueue_active(wq))
- wake_up_all(wq);
+ if (atomic_dec_and_test(&EXT4_I(io->inode)->i_ioend_count))
+ wake_up_all(ext4_ioend_wq(io->inode));
kmem_cache_free(io_end_cachep, io);
}
@@ -96,7 +93,6 @@ int ext4_end_io_nolock(ext4_io_end_t *io)
struct inode *inode = io->inode;
loff_t offset = io->offset;
ssize_t size = io->size;
- wait_queue_head_t *wq;
int ret = 0;
ext4_debug("ext4_end_io_nolock: io 0x%p from inode %lu,list->next 0x%p,"
@@ -121,11 +117,8 @@ int ext4_end_io_nolock(ext4_io_end_t *io)
if (io->flag & EXT4_IO_END_UNWRITTEN) {
io->flag &= ~EXT4_IO_END_UNWRITTEN;
/* Wake up anyone waiting on unwritten extent conversion */
- wq = ext4_ioend_wq(io->inode);
- if (atomic_dec_and_test(&EXT4_I(inode)->i_aiodio_unwritten) &&
- waitqueue_active(wq)) {
- wake_up_all(wq);
- }
+ if (atomic_dec_and_test(&EXT4_I(inode)->i_aiodio_unwritten))
+ wake_up_all(ext4_ioend_wq(io->inode));
}
return ret;
--
1.7.4.1.22.gec8e1.dirty
^ permalink raw reply related
* [PATCH 1/3] ext4: Use correct locking for ext4_end_io_nolock()
From: Theodore Ts'o @ 2011-10-31 15:02 UTC (permalink / raw)
To: Ext4 Developers List; +Cc: Tao Ma, Theodore Ts'o
In-Reply-To: <20111031150206.GC16825@thunk.org>
From: Tao Ma <boyu.mt@taobao.com>
We must hold i_completed_io_lock when manipulating anything on the
i_completed_io_list linked list. This includes io->lock, which we
were checking in ext4_end_io_nolock().
So move this check to ext4_end_io_work(). This also has the bonus of
avoiding extra work if it is already done without needing to take the
mutex.
Signed-off-by: Tao Ma <boyu.mt@taobao.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
---
fs/ext4/fsync.c | 3 ---
fs/ext4/page-io.c | 14 +++++++++++---
2 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c
index c942924..851ac5b 100644
--- a/fs/ext4/fsync.c
+++ b/fs/ext4/fsync.c
@@ -83,9 +83,6 @@ int ext4_flush_completed_IO(struct inode *inode)
int ret = 0;
int ret2 = 0;
- if (list_empty(&ei->i_completed_io_list))
- return ret;
-
dump_completed_IO(inode);
spin_lock_irqsave(&ei->i_completed_io_lock, flags);
while (!list_empty(&ei->i_completed_io_list)){
diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c
index 92f38ee..aed4096 100644
--- a/fs/ext4/page-io.c
+++ b/fs/ext4/page-io.c
@@ -87,6 +87,9 @@ void ext4_free_io_end(ext4_io_end_t *io)
/*
* check a range of space and convert unwritten extents to written.
+ *
+ * Called with inode->i_mutex; we depend on this when we manipulate
+ * io->flag, since we could otherwise race with ext4_flush_completed_IO()
*/
int ext4_end_io_nolock(ext4_io_end_t *io)
{
@@ -100,9 +103,6 @@ int ext4_end_io_nolock(ext4_io_end_t *io)
"list->prev 0x%p\n",
io, inode->i_ino, io->list.next, io->list.prev);
- if (list_empty(&io->list))
- return ret;
-
if (!(io->flag & EXT4_IO_END_UNWRITTEN))
return ret;
@@ -142,6 +142,13 @@ static void ext4_end_io_work(struct work_struct *work)
unsigned long flags;
int ret;
+ spin_lock_irqsave(&ei->i_completed_io_lock, flags);
+ if (list_empty(&io->list)) {
+ spin_unlock_irqrestore(&ei->i_completed_io_lock, flags);
+ goto free;
+ }
+ spin_unlock_irqrestore(&ei->i_completed_io_lock, flags);
+
if (!mutex_trylock(&inode->i_mutex)) {
/*
* Requeue the work instead of waiting so that the work
@@ -170,6 +177,7 @@ static void ext4_end_io_work(struct work_struct *work)
list_del_init(&io->list);
spin_unlock_irqrestore(&ei->i_completed_io_lock, flags);
mutex_unlock(&inode->i_mutex);
+free:
ext4_free_io_end(io);
}
--
1.7.4.1.22.gec8e1.dirty
^ permalink raw reply related
* [PATCH 3/3] ext4: optimize locking for end_io extent conversion
From: Theodore Ts'o @ 2011-10-31 15:02 UTC (permalink / raw)
To: Ext4 Developers List; +Cc: Theodore Ts'o
In-Reply-To: <1320073367-28916-1-git-send-email-tytso@mit.edu>
Now that we are doing the locking correctly, we need to grab the
i_completed_io_lock() twice per end_io. We can clean this up by
removing the structure from the i_complted_io_list, and use this as
the locking mechanism to prevent ext4_flush_completed_IO() racing
against ext4_end_io_work(), instead of clearing the
EXT4_IO_END_UNWRITTEN in io->flag.
In addition, if the ext4_convert_unwritten_extents() returns an error,
we no longer keep the end_io structure on the linked list. This
doesn't help, because it tends to lock up the file system and wedges
the system. That's one way to call attention to the problem, but it
doesn't help the overall robustness of the system.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
---
fs/ext4/fsync.c | 5 ++---
fs/ext4/page-io.c | 37 +++++++++++--------------------------
2 files changed, 13 insertions(+), 29 deletions(-)
diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c
index 851ac5b..00a2cb7 100644
--- a/fs/ext4/fsync.c
+++ b/fs/ext4/fsync.c
@@ -88,6 +88,7 @@ int ext4_flush_completed_IO(struct inode *inode)
while (!list_empty(&ei->i_completed_io_list)){
io = list_entry(ei->i_completed_io_list.next,
ext4_io_end_t, list);
+ list_del_init(&io->list);
/*
* Calling ext4_end_io_nolock() to convert completed
* IO to written.
@@ -104,11 +105,9 @@ int ext4_flush_completed_IO(struct inode *inode)
*/
spin_unlock_irqrestore(&ei->i_completed_io_lock, flags);
ret = ext4_end_io_nolock(io);
- spin_lock_irqsave(&ei->i_completed_io_lock, flags);
if (ret < 0)
ret2 = ret;
- else
- list_del_init(&io->list);
+ spin_lock_irqsave(&ei->i_completed_io_lock, flags);
}
spin_unlock_irqrestore(&ei->i_completed_io_lock, flags);
return (ret2 < 0) ? ret2 : 0;
diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c
index 4fa1d70..7bacd27 100644
--- a/fs/ext4/page-io.c
+++ b/fs/ext4/page-io.c
@@ -99,28 +99,21 @@ int ext4_end_io_nolock(ext4_io_end_t *io)
"list->prev 0x%p\n",
io, inode->i_ino, io->list.next, io->list.prev);
- if (!(io->flag & EXT4_IO_END_UNWRITTEN))
- return ret;
-
ret = ext4_convert_unwritten_extents(inode, offset, size);
if (ret < 0) {
- printk(KERN_EMERG "%s: failed to convert unwritten "
- "extents to written extents, error is %d "
- "io is still on inode %lu aio dio list\n",
- __func__, ret, inode->i_ino);
- return ret;
+ ext4_msg(inode->i_sb, KERN_EMERG,
+ "failed to convert unwritten extents to written "
+ "extents -- potential data loss! "
+ "(inode %lu, offset %llu, size %d, error %d)",
+ inode->i_ino, offset, size, ret);
}
if (io->iocb)
aio_complete(io->iocb, io->result, 0);
- /* clear the DIO AIO unwritten flag */
- if (io->flag & EXT4_IO_END_UNWRITTEN) {
- io->flag &= ~EXT4_IO_END_UNWRITTEN;
- /* Wake up anyone waiting on unwritten extent conversion */
- if (atomic_dec_and_test(&EXT4_I(inode)->i_aiodio_unwritten))
- wake_up_all(ext4_ioend_wq(io->inode));
- }
+ /* Wake up anyone waiting on unwritten extent conversion */
+ if (atomic_dec_and_test(&EXT4_I(inode)->i_aiodio_unwritten))
+ wake_up_all(ext4_ioend_wq(io->inode));
return ret;
}
@@ -133,16 +126,15 @@ static void ext4_end_io_work(struct work_struct *work)
struct inode *inode = io->inode;
struct ext4_inode_info *ei = EXT4_I(inode);
unsigned long flags;
- int ret;
spin_lock_irqsave(&ei->i_completed_io_lock, flags);
if (list_empty(&io->list)) {
spin_unlock_irqrestore(&ei->i_completed_io_lock, flags);
goto free;
}
- spin_unlock_irqrestore(&ei->i_completed_io_lock, flags);
if (!mutex_trylock(&inode->i_mutex)) {
+ spin_unlock_irqrestore(&ei->i_completed_io_lock, flags);
/*
* Requeue the work instead of waiting so that the work
* items queued after this can be processed.
@@ -159,16 +151,9 @@ static void ext4_end_io_work(struct work_struct *work)
io->flag |= EXT4_IO_END_QUEUED;
return;
}
- ret = ext4_end_io_nolock(io);
- if (ret < 0) {
- mutex_unlock(&inode->i_mutex);
- return;
- }
^ permalink raw reply related
* Re: [PATCH] ext4: Check io list state and avoid an unnecessary mutex_lock in ext4_end_io_work.
From: Ted Ts'o @ 2011-10-31 15:02 UTC (permalink / raw)
To: Tao Ma; +Cc: linux-ext4
In-Reply-To: <4EAD01C1.1060002@tao.ma>
On Sun, Oct 30, 2011 at 03:50:25PM +0800, Tao Ma wrote:
> sorry, but I thought I had considered this case.
> There are 2 callers. One is ext4_end_io_work(which has the bug I pointed
> out), the other is ext4_flush_complete_IO which has already done the
> check before calling ext4_end_io_nolock. And that's the reason why I
> move the check from ext4_end_io_nolock to ext4_end_io_work. So for the
> ext4_flush_complete_IO case, your new patch will spin_lock twice for the
> checking. Do I miss something here?
Ah, you're right; my mistake. When I looked closely, though, I found
that ext4_flush_completed_IO() had a call to list_empty() without
taking the spinlock, which would also be problematic. When I looked
more closely, I found more ways to optimize things, which also close
up a few potential (I think theoretical) race conditions.
Let me know what you think....
- Ted
^ permalink raw reply
* [PATCH] xfstests: add test 264 for testing xfsdump -D
From: Bill Kendall @ 2011-10-31 15:02 UTC (permalink / raw)
To: xfs
Add a test for xfsdump -D, which skips unchanged directories during
an incremental backup. After doing an initial backup, a new file is
added to one directory (to verify that changed directories are
backed up) and several files are appended to. Then an incremental
backup is done with -D set. The test verifies the original and
restored filesystems match after applying the base and incremental
backups, and that the incremental restore output indicates that only
the one changed directory was backed up.
Signed-off-by: Bill Kendall <wkendall@sgi.com>
---
264 | 74 +++++++++++++++++++++++++++++++++
264.out | 133 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
common.dump | 7 +--
group | 1 +
4 files changed, 210 insertions(+), 5 deletions(-)
create mode 100755 264
create mode 100644 264.out
diff --git a/264 b/264
new file mode 100755
index 0000000..9544a58
--- /dev/null
+++ b/264
@@ -0,0 +1,74 @@
+#! /bin/bash
+# FS QA Test No. 264
+#
+# Test incremental dumps with -D (skip unchanged dirs)
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2011 SGI. All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#-----------------------------------------------------------------------
+#
+# creator
+owner=wkendall@sgi.com
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=0 # success is the default!
+trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15
+
+#
+# Add a new file and append a subset of the fill'ed files
+# So we can see if just these get dumped on an incremental
+#
+_add_and_append_dumpdir_fill()
+{
+ cd $dump_dir
+ echo 'New file' >> newfile
+ _append_dumpdir_fill
+}
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.dump
+
+# real QA test starts here
+_supported_fs xfs
+_supported_os Linux
+
+$XFSDUMP_PROG -h 2>&1 | grep -q -e -D
+if [ $? -ne 0 ]; then
+ _notrun "requires xfsdump -D"
+fi
+
+_create_dumpdir_fill
+# ensure file/dir timestamps precede dump timestamp
+sleep 2
+dump_file=$tmp.df.0
+_do_dump_file
+_add_and_append_dumpdir_fill
+dump_file=$tmp.df.1
+_do_dump_file -l 1 -D
+dump_file=$tmp.df.0
+_do_restore_file_cum -l 0
+dump_file=$tmp.df.1
+_do_restore_file_cum -l 1
+_ls_compare_sub
+_diff_compare
+
+# success, all done
+exit
diff --git a/264.out b/264.out
new file mode 100644
index 0000000..b2c3c09
--- /dev/null
+++ b/264.out
@@ -0,0 +1,133 @@
+QA output created by 264
+Creating directory system to dump using src/fill.
+Setup ....................................
+Dumping to file...
+xfsdump -f DUMP_FILE -M stress_tape_media -L stress_264 SCRATCH_MNT
+xfsdump: using file dump (drive_simple) strategy
+xfsdump: level 0 dump of HOSTNAME:SCRATCH_MNT
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "stress_264"
+xfsdump: ino map <PHASES>
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: /var/xfsdump/inventory created
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dump size (non-dir files) : NUM bytes
+xfsdump: dump complete: SECS seconds elapsed
+xfsdump: Dump Status: SUCCESS
+Dumping to file...
+xfsdump -l1 -D -f DUMP_FILE -M stress_tape_media -L stress_264 SCRATCH_MNT
+xfsdump: using file dump (drive_simple) strategy
+xfsdump: level 1 incremental dump of HOSTNAME:SCRATCH_MNT based on level 0 dump begun DATE
+xfsdump: dump date: DATE
+xfsdump: session id: ID
+xfsdump: session label: "stress_264"
+xfsdump: ino map <PHASES>
+xfsdump: ino map construction complete
+xfsdump: estimated dump size: NUM bytes
+xfsdump: creating dump session media file 0 (media 0, file 0)
+xfsdump: dumping ino map
+xfsdump: dumping directories
+xfsdump: dumping non-directory files
+xfsdump: ending media file
+xfsdump: media file size NUM bytes
+xfsdump: dump size (non-dir files) : NUM bytes
+xfsdump: dump complete: SECS seconds elapsed
+xfsdump: Dump Status: SUCCESS
+Restoring cumumlative from file...
+xfsrestore -f DUMP_FILE -r RESTORE_DIR
+xfsrestore: using file dump (drive_simple) strategy
+xfsrestore: searching media for dump
+xfsrestore: examining media file 0
+xfsrestore: dump description:
+xfsrestore: hostname: HOSTNAME
+xfsrestore: mount point: SCRATCH_MNT
+xfsrestore: volume: SCRATCH_DEV
+xfsrestore: session time: TIME
+xfsrestore: level: 0
+xfsrestore: session label: "stress_264"
+xfsrestore: media label: "stress_tape_media"
+xfsrestore: file system ID: ID
+xfsrestore: session id: ID
+xfsrestore: media ID: ID
+xfsrestore: using online session inventory
+xfsrestore: searching media for directory dump
+xfsrestore: reading directories
+xfsrestore: 3 directories and 38 entries processed
+xfsrestore: directory post-processing
+xfsrestore: restoring non-directory files
+xfsrestore: restore complete: SECS seconds elapsed
+xfsrestore: Restore Status: SUCCESS
+Restoring cumumlative from file...
+xfsrestore -f DUMP_FILE -r RESTORE_DIR
+xfsrestore: using file dump (drive_simple) strategy
+xfsrestore: searching media for dump
+xfsrestore: examining media file 0
+xfsrestore: dump description:
+xfsrestore: hostname: HOSTNAME
+xfsrestore: mount point: SCRATCH_MNT
+xfsrestore: volume: SCRATCH_DEV
+xfsrestore: session time: TIME
+xfsrestore: level: 1
+xfsrestore: session label: "stress_264"
+xfsrestore: media label: "stress_tape_media"
+xfsrestore: file system ID: ID
+xfsrestore: session id: ID
+xfsrestore: media ID: ID
+xfsrestore: using online session inventory
+xfsrestore: searching media for directory dump
+xfsrestore: reading directories
+xfsrestore: NOTE: dump is not self-contained, orphaned files expected if base dump(s) was not applied
+xfsrestore: 1 directories and 4 entries processed
+xfsrestore: directory post-processing
+xfsrestore: restoring non-directory files
+xfsrestore: restore complete: SECS seconds elapsed
+xfsrestore: Restore Status: SUCCESS
+Comparing listing of dump directory with restore directory
+Files TMP.dump_dir and TMP.restore_dir are identical
+Comparing dump directory with restore directory
+Files DUMP_DIR/big and RESTORE_DIR/DUMP_SUBDIR/big are identical
+Files DUMP_DIR/newfile and RESTORE_DIR/DUMP_SUBDIR/newfile are identical
+Files DUMP_DIR/small and RESTORE_DIR/DUMP_SUBDIR/small are identical
+Files DUMP_DIR/sub/a and RESTORE_DIR/DUMP_SUBDIR/sub/a are identical
+Files DUMP_DIR/sub/a00 and RESTORE_DIR/DUMP_SUBDIR/sub/a00 are identical
+Files DUMP_DIR/sub/a000 and RESTORE_DIR/DUMP_SUBDIR/sub/a000 are identical
+Files DUMP_DIR/sub/b and RESTORE_DIR/DUMP_SUBDIR/sub/b are identical
+Files DUMP_DIR/sub/b00 and RESTORE_DIR/DUMP_SUBDIR/sub/b00 are identical
+Files DUMP_DIR/sub/big and RESTORE_DIR/DUMP_SUBDIR/sub/big are identical
+Files DUMP_DIR/sub/c and RESTORE_DIR/DUMP_SUBDIR/sub/c are identical
+Files DUMP_DIR/sub/c00 and RESTORE_DIR/DUMP_SUBDIR/sub/c00 are identical
+Files DUMP_DIR/sub/d and RESTORE_DIR/DUMP_SUBDIR/sub/d are identical
+Files DUMP_DIR/sub/d00 and RESTORE_DIR/DUMP_SUBDIR/sub/d00 are identical
+Files DUMP_DIR/sub/e and RESTORE_DIR/DUMP_SUBDIR/sub/e are identical
+Files DUMP_DIR/sub/e00 and RESTORE_DIR/DUMP_SUBDIR/sub/e00 are identical
+Files DUMP_DIR/sub/e000 and RESTORE_DIR/DUMP_SUBDIR/sub/e000 are identical
+Files DUMP_DIR/sub/f and RESTORE_DIR/DUMP_SUBDIR/sub/f are identical
+Files DUMP_DIR/sub/f00 and RESTORE_DIR/DUMP_SUBDIR/sub/f00 are identical
+Files DUMP_DIR/sub/g and RESTORE_DIR/DUMP_SUBDIR/sub/g are identical
+Files DUMP_DIR/sub/g00 and RESTORE_DIR/DUMP_SUBDIR/sub/g00 are identical
+Files DUMP_DIR/sub/h and RESTORE_DIR/DUMP_SUBDIR/sub/h are identical
+Files DUMP_DIR/sub/h00 and RESTORE_DIR/DUMP_SUBDIR/sub/h00 are identical
+Files DUMP_DIR/sub/h000 and RESTORE_DIR/DUMP_SUBDIR/sub/h000 are identical
+Files DUMP_DIR/sub/i and RESTORE_DIR/DUMP_SUBDIR/sub/i are identical
+Files DUMP_DIR/sub/i00 and RESTORE_DIR/DUMP_SUBDIR/sub/i00 are identical
+Files DUMP_DIR/sub/j and RESTORE_DIR/DUMP_SUBDIR/sub/j are identical
+Files DUMP_DIR/sub/j00 and RESTORE_DIR/DUMP_SUBDIR/sub/j00 are identical
+Files DUMP_DIR/sub/k and RESTORE_DIR/DUMP_SUBDIR/sub/k are identical
+Files DUMP_DIR/sub/k00 and RESTORE_DIR/DUMP_SUBDIR/sub/k00 are identical
+Files DUMP_DIR/sub/k000 and RESTORE_DIR/DUMP_SUBDIR/sub/k000 are identical
+Files DUMP_DIR/sub/l and RESTORE_DIR/DUMP_SUBDIR/sub/l are identical
+Files DUMP_DIR/sub/l00 and RESTORE_DIR/DUMP_SUBDIR/sub/l00 are identical
+Files DUMP_DIR/sub/m and RESTORE_DIR/DUMP_SUBDIR/sub/m are identical
+Files DUMP_DIR/sub/m00 and RESTORE_DIR/DUMP_SUBDIR/sub/m00 are identical
+Files DUMP_DIR/sub/n and RESTORE_DIR/DUMP_SUBDIR/sub/n are identical
+Files DUMP_DIR/sub/n00 and RESTORE_DIR/DUMP_SUBDIR/sub/n00 are identical
+Files DUMP_DIR/sub/small and RESTORE_DIR/DUMP_SUBDIR/sub/small are identical
+Only in SCRATCH_MNT: RESTORE_SUBDIR
+Only in RESTORE_DIR: xfsrestorehousekeepingdir
diff --git a/common.dump b/common.dump
index c1eb675..d9e6565 100644
--- a/common.dump
+++ b/common.dump
@@ -896,11 +896,8 @@ _parse_args()
session_label=$2
shift
;;
- -o)
- dump_args="$dump_args -o"
- ;;
- -F)
- dump_args="$dump_args -F"
+ -o|-D|-F)
+ dump_args="$dump_args $1"
;;
--multi)
multi=$2
diff --git a/group b/group
index 2a8970c..70ea462 100644
--- a/group
+++ b/group
@@ -377,3 +377,4 @@ deprecated
261 auto quick quota
262 auto quick quota
263 rw auto quick
+264 dump ioctl auto quick
--
1.7.0.4
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply related
* Re: RFC: Radeon multi ring support branch
From: Jerome Glisse @ 2011-10-31 15:05 UTC (permalink / raw)
To: Christian König; +Cc: dri-devel
In-Reply-To: <4EABF8EC.3020701@vodafone.de>
On Sat, Oct 29, 2011 at 03:00:28PM +0200, Christian König wrote:
> Hello everybody,
>
> to support multiple compute rings, async DMA engines and UVD we need
> to teach the radeon kernel module how to sync buffers between
> different rings and make some changes to the command submission
> ioctls.
>
> Since we can't release any documentation about async DMA or UVD
> (yet), my current branch concentrates on getting the additional
> compute rings on cayman running. Unfortunately those rings have
> hardware bugs that can't be worked around, so they are actually not
> very useful in a production environment, but they should do quite
> well for this testing purpose.
>
> The branch can be found here:
> http://cgit.freedesktop.org/~deathsimple/linux/log/
>
> Since some of the patches are quite intrusive, constantly rebaseing
> them could get a bit painful. So I would like to see most of the
> stuff included into drm-next, even if we don't make use of the new
> functionality right now.
>
> Comments welcome,
> Christian.
So for all patches except the interface change see below
Reviewed-by: Jerome Glisse <jglisse@redhat.com>
For the interface change, as discussed previously, i believe prio
should be a userspace argument, kernel could override it.
Cheers,
Jerome
^ permalink raw reply
* [U-Boot] [PATCH v6 4/4] usb: add USB support for Efika
From: Jana Rapava @ 2011-10-31 14:58 UTC (permalink / raw)
To: u-boot
In-Reply-To: <4EAE66C9.7020902@denx.de>
2011/10/31 Stefano Babic <sbabic@denx.de>
> > There are some issues with: [PATCH 3/4] EHCI: adjust for mx5
> > If you have already applied it
>
> Jana, can you answer / fix this point ?
>
>
I really don't know what happens there. Code file looks aligned, but when I
generate a patch with git-format-patch, aligning is messed up. So I fix it
in git-send-email, but after sending whitespace characters are messed up
again.
I wasn't able to find a way to fix it yet.
Regards,
Jana Rapava
^ permalink raw reply
* [U-Boot] [PATCH V2 0/4] add mmc support for pantheon platform
From: Lei Wen @ 2011-10-31 14:57 UTC (permalink / raw)
To: u-boot
In-Reply-To: <4EA65674.1070401@aribaud.net>
Hi Albert,
On Tue, Oct 25, 2011 at 2:25 PM, Albert ARIBAUD
<albert.u.boot@aribaud.net> wrote:
> Le 25/10/2011 08:15, Albert ARIBAUD a ?crit :
>>
>> Hi Lei Wen,
>>
>> Le 25/10/2011 03:21, Lei Wen a ?crit :
>>>
>>> Hi Albert,
>>>
>>> On Tue, Oct 25, 2011 at 1:20 AM, Albert ARIBAUD
>>> <albert.u.boot@aribaud.net> ? wrote:
>>>>
>>>> Hi Lei Wen,
>>>>
>>>> Le 04/10/2011 08:33, Lei Wen a ?crit :
>>>>>
>>>>> This patch seris add the mmc support for the pantheon platform.
>>>>> Also give platform like dkb and aspenite a workaround when enabling
>>>>> the 8bit mode for accessing the mmc.
>>>>>
>>>>> Changelog:
>>>>> V2: remove magic number, and replace it by macro definition and
>>>>> structure
>>>>> ? ? ? ?respectively.
>>>>> ? ? ? remove enable mmc function into seperated patch
>>>>>
>>>>> Lei Wen (4):
>>>>> ? ? ARM: pantheon: add mmc definition
>>>>> ? ? Marvell: dkb: add mmc support
>>>>> ? ? dkb: make mmc command as default enabled
>>>>> ? ? mmc: mv_sdhci: fix 8bus width access for 88SV331xV5
>>>>
>>>> This causes a lot of build errors on dkb with ELDK42:
>>>>
>>>> Configuring for dkb board...
>>>> In file included from mv_sdhci.c:3:
>>>> /home/uboot/src/u-boot-arm/include/sdhci.h:224: warning: 'struct
>>>> sdhci_host' declared inside parameter list
>>>> /home/uboot/src/u-boot-arm/include/sdhci.h:224: warning: its scope is
>>>> only this definition or declaration, which is probably not what you want
>>>> /home/uboot/src/u-boot-arm/include/sdhci.h:225: warning: 'struct
>>>> sdhci_host' declared inside parameter list
>>>> /home/uboot/src/u-boot-arm/include/sdhci.h:226: warning: 'struct
>>>> sdhci_host' declared inside parameter list
>>>> /home/uboot/src/u-boot-arm/include/sdhci.h:227: warning: 'struct
>>>> sdhci_host' declared inside parameter list
>>>> /home/uboot/src/u-boot-arm/include/sdhci.h:228: warning: 'struct
>>>> sdhci_host' declared inside parameter list
>>>> /home/uboot/src/u-boot-arm/include/sdhci.h:229: warning: 'struct
>>>> sdhci_host' declared inside parameter list
>>>> /home/uboot/src/u-boot-arm/include/sdhci.h: In function 'sdhci_writel':
>>>> /home/uboot/src/u-boot-arm/include/sdhci.h:247: warning: passing
>>>> argument 1 of 'host->ops->write_l' from incompatible pointer type
>>>> /home/uboot/src/u-boot-arm/include/sdhci.h: In function 'sdhci_writew':
>>>> /home/uboot/src/u-boot-arm/include/sdhci.h:255: warning: passing
>>>> argument 1 of 'host->ops->write_w' from incompatible pointer type
>>>> /home/uboot/src/u-boot-arm/include/sdhci.h: In function 'sdhci_writeb':
>>>> /home/uboot/src/u-boot-arm/include/sdhci.h:263: warning: passing
>>>> argument 1 of 'host->ops->write_b' from incompatible pointer type
>>>> /home/uboot/src/u-boot-arm/include/sdhci.h: In function 'sdhci_readl':
>>>> /home/uboot/src/u-boot-arm/include/sdhci.h:271: warning: passing
>>>> argument 1 of 'host->ops->read_l' from incompatible pointer type
>>>> /home/uboot/src/u-boot-arm/include/sdhci.h: In function 'sdhci_readw':
>>>> /home/uboot/src/u-boot-arm/include/sdhci.h:279: warning: passing
>>>> argument 1 of 'host->ops->read_w' from incompatible pointer type
>>>> /home/uboot/src/u-boot-arm/include/sdhci.h: In function 'sdhci_readb':
>>>> /home/uboot/src/u-boot-arm/include/sdhci.h:287: warning: passing
>>>> argument 1 of 'host->ops->read_b' from incompatible pointer type
>>>> mv_sdhci.c: In function 'mv_sdhci_writeb':
>>>> mv_sdhci.c:14: error: 'struct sdhci_host' has no member named 'mmc'
>>>> mv_sdhci.c:17: warning: implicit declaration of function 'IS_SD'
>>>> mv_sdhci.c:18: error: dereferencing pointer to incomplete type
>>>> mv_sdhci.c: In function 'mv_sdh_init':
>>>> mv_sdhci.c:48: warning: assignment from incompatible pointer type
>>>>
>>>
>>> Actually, I have post another fixing series before this, so if it got
>>> be applied before this merged,
>>> the warning would be disappeared.
>>>
>>> You could refer to:
>>> http://permalink.gmane.org/gmane.comp.boot-loaders.u-boot/111621
>>
>> Thanks for the pointer -- please next time indicate the dependency on
>> any patch set not yet applied at the time.
>
> I've tried applying the patches in the link you refer to, then the patch
> series given here, but the latter does not apply properly above the former
> on top of u-boot-arm/master. Can you check this?
>
>>> Best regards,
>>> Lei
>
>
I try to rebase the V4 of sdhci fixing patch over latest
u-boot-arm.git, and find
there is no problem... Could you help check again?
Thanks,
Lei
^ permalink raw reply
* [PATCH 01/51] ARM: reset: introduce arm_arch_reset function pointer
From: Russell King - ARM Linux @ 2011-10-31 14:56 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <CAH+eYFD_XPgbvp828q7508TOPNdP4TK7wiej2aBhPb18WbQ+Eg@mail.gmail.com>
On Mon, Oct 31, 2011 at 08:14:14PM +0530, Rabin Vincent wrote:
> On Mon, Oct 31, 2011 at 20:09, Russell King - ARM Linux
> <linux@arm.linux.org.uk> wrote:
> > On Mon, Oct 31, 2011 at 08:03:26PM +0530, Rabin Vincent wrote:
> >> The above patch will apply with gnu patch if you use -p0.
> >
> > $ patch -p0 -i arch_reset-1.diff --dry-run
> > patch: **** rejecting absolute target file name: /tmp/cocci-output-380-f841cc-system.h
>
> Works for me, maybe a version difference?
Same version. Some versions have become anal about security - and the
one in Fedora seems to be that.
^ permalink raw reply
* Re: [PATCH] echo: fix octal escaping with \1...\7
From: Stephane CHAZELAS @ 2011-10-31 14:56 UTC (permalink / raw)
To: dash
In-Reply-To: <ACAAFE20-00AB-46BC-BEE4-3BFAA1F0141A@aim.com>
2011-10-31, 07:35(-06), Paul Gilmartin:
> On Oct 31, 2011, at 07:12, Eric Blake wrote:
>
>> [adding bug-libtool]
>>
> [removing, because I'm not registered.]
>
>> On 10/30/2011 10:23 PM, Mike Frysinger wrote:
>>> On Sunday 30 October 2011 23:41:58 Herbert Xu wrote:
>>>> Mike Frysinger wrote:
>>>>> POSIX states that octal escape sequences should take the form \0num
>>>>> when using echo. dash however additionally treats \num as an octal
>>>>> sequence. This breaks some packages (like libtool) who attempt to
>>>>> use strings with these escape sequences via variables to execute sed
>>>>> (since sed ends up getting passed a byte instead of a literal \1).
>>
>> That's a bug in libtool for using "echo '\1'" and expecting sane behavior. Can you provide more details on this libtool bug, so we can get it fixed in libtool? Or perhaps it has already been fixed in modern libtool, and you are just encountering it in an older version?
>>
> Yes, there's value in coding defensively. However:
>
> I used to know a statement in POSIX that builtins should behave
> identically to the executables in /bin (or perhaps /usr/bin)
> except for performance. So, testing with dash on Ubuntu:
[...]
This can only reasonably be done on systems where the shell and
utilities are maintained by the same persons. On my system,
/bin/echo '\FS' starts a flight simulator. Should I ask dash to
implement that same flight simulator?
See also GNU test that doesn't behave the same as GNU bash's
"test" (test a \< b for instance).
--
Stephane
^ permalink raw reply
* [PATCH 3/3] Add picosam9g45 board to Makefile
From: Nicu Pavel @ 2011-10-31 14:56 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1320073010-19549-1-git-send-email-npavel@mini-box.com>
Signed-off-by: Nicu Pavel <npavel@mini-box.com>
---
arch/arm/mach-at91/Makefile | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile
index bf57e8b..ad1950d 100644
--- a/arch/arm/mach-at91/Makefile
+++ b/arch/arm/mach-at91/Makefile
@@ -72,6 +72,7 @@ obj-$(CONFIG_MACH_GSIA18S) += board-gsia18s.o board-stamp9g20.o
obj-$(CONFIG_MACH_SNAPPER_9260) += board-snapper9260.o
# AT91SAM9G45 board-specific support
+obj-$(CONFIG_MACH_MINIBOXPICOSAM9G45) += board-picosam9g45.o
obj-$(CONFIG_MACH_AT91SAM9M10G45EK) += board-sam9m10g45ek.o
# AT91CAP9 board-specific support
--
1.7.1
^ permalink raw reply related
* [PATCH 2/3] Add kernel configuration option for picosam9g45 board
From: Nicu Pavel @ 2011-10-31 14:56 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1320073010-19549-1-git-send-email-npavel@mini-box.com>
Signed-off-by: Nicu Pavel <npavel@mini-box.com>
---
arch/arm/mach-at91/Kconfig | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig
index 2248467..419295a 100644
--- a/arch/arm/mach-at91/Kconfig
+++ b/arch/arm/mach-at91/Kconfig
@@ -400,6 +400,12 @@ if ARCH_AT91SAM9G45
comment "AT91SAM9G45 Board Type"
+config MACH_MINIBOXPICOSAM9G45
+ bool "Mini-Box.com picoSAM9G45 board"
+ help
+ Select this if you are using Mini-Box.com picoSAM9G45 Board
+ <http://arm.mini-box.com>
+
config MACH_AT91SAM9M10G45EK
bool "Atmel AT91SAM9M10G45-EK Evaluation Kits"
help
--
1.7.1
^ permalink raw reply related
* [PATCH 1/3] Add support for mini-box.com picoSAM9G45 board
From: Nicu Pavel @ 2011-10-31 14:56 UTC (permalink / raw)
To: linux-arm-kernel
This patch adds support for picoSAM9G45 board from mini-box.com. This board is
based on Atmel G45 SOC. More details can be found at http://arm.mini-box.com
Signed-off-by: Nicu Pavel <npavel@mini-box.com>
---
arch/arm/mach-at91/board-picosam9g45.c | 436 ++++++++++++++++++++++++++++++++
1 files changed, 436 insertions(+), 0 deletions(-)
create mode 100644 arch/arm/mach-at91/board-picosam9g45.c
diff --git a/arch/arm/mach-at91/board-picosam9g45.c b/arch/arm/mach-at91/board-picosam9g45.c
new file mode 100644
index 0000000..84d9dff
--- /dev/null
+++ b/arch/arm/mach-at91/board-picosam9g45.c
@@ -0,0 +1,436 @@
+/*
+ * Board-specific setup code for the picoSAM9G45 board
+ *
+ * http://www.mini-box.com/pico-SAM9G45-X
+ *
+ * Copyright (C) 2011 Nicu Pavel <npavel@mini-box.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ */
+
+#include <linux/types.h>
+#include <linux/init.h>
+#include <linux/mm.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/spi/spi.h>
+#include <linux/fb.h>
+#include <linux/gpio_keys.h>
+#include <linux/input.h>
+#include <linux/leds.h>
+#include <linux/clk.h>
+#include <linux/atmel-mci.h>
+
+#include <mach/hardware.h>
+#include <video/atmel_lcdc.h>
+
+#include <asm/setup.h>
+#include <asm/mach-types.h>
+#include <asm/irq.h>
+
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+#include <asm/mach/irq.h>
+
+#include <mach/board.h>
+#include <mach/gpio.h>
+#include <mach/at91sam9_smc.h>
+#include <mach/at91_shdwc.h>
+#include <mach/system_rev.h>
+
+#include "sam9_smc.h"
+#include "generic.h"
+
+
+static void __init picosam9g45_init_early(void)
+{
+ /* Initialize processor: 12.000 MHz crystal */
+ at91_initialize(12000000);
+
+ /* DGBU on ttyS0. (Rx & Tx only) */
+ at91_register_uart(0, 0, 0);
+
+ /* USART1 on ttyS1. (Rx, Tx, RTS, CTS) */
+ at91_register_uart(AT91SAM9G45_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS);
+ /* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */
+ at91_register_uart(AT91SAM9G45_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS);
+
+ /* set serial console to ttyS0 (ie, DBGU) */
+ at91_set_serial_console(0);
+}
+
+/*
+ * USB HS Host port (common to OHCI & EHCI)
+ */
+static struct at91_usbh_data __initdata picosam9g45_usbh_hs_data = {
+ .ports = 2,
+ .vbus_pin = {AT91_PIN_PD1, AT91_PIN_PD3},
+};
+
+
+/*
+ * USB HS Device port
+ */
+static struct usba_platform_data __initdata picosam9g45_usba_udc_data = {
+ .vbus_pin = AT91_PIN_PB19,
+};
+
+
+/*
+ * SPI devices.
+ */
+static struct spi_board_info picosam9g45_spi_devices[] = {
+ [0] = {/* SPI0 CS0 on right side connector J7*/
+ .modalias= "spidev",
+ .max_speed_hz= 15 * 1000 * 1000,
+ .bus_num= 0,
+ .chip_select= 0,
+ },
+ [1] = {/* SPI1 CS0 on left side connector J9*/
+ .modalias= "spidev",
+ .max_speed_hz= 15 * 1000 * 1000,
+ .bus_num= 1,
+ .chip_select= 0,
+ },
+};
+
+
+/*
+ * MCI (SD/MMC)
+ */
+static struct mci_platform_data __initdata mci0_data = {
+ .slot[0] = {
+ .bus_width = 4,
+ .detect_pin = AT91_PIN_PD10,
+ },
+};
+
+static struct mci_platform_data __initdata mci1_data = {
+ .slot[0] = {
+ .bus_width = 4,
+ .detect_pin = AT91_PIN_PD11,
+ .wp_pin = AT91_PIN_PD29,
+ },
+};
+
+
+/*
+ * MACB Ethernet device
+ */
+static struct at91_eth_data __initdata picosam9g45_macb_data = {
+ .phy_irq_pin = AT91_PIN_PD5,
+ .is_rmii = 1,
+};
+
+
+/*
+ * NAND flash
+ */
+static struct mtd_partition __initdata picosam9g45_nand_partition[] = {
+ {
+ .name = "Bootstrap",
+ .offset = 0,
+ .size = SZ_4M
+ },
+ {
+ .name= "RootFS",
+ .offset= MTDPART_OFS_NXTBLK,
+ .size= 60 * SZ_1M,
+ },
+ {
+ .name= "Space",
+ .offset= MTDPART_OFS_NXTBLK,
+ .size= MTDPART_SIZ_FULL,
+ },
+};
+
+static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
+{
+ *num_partitions = ARRAY_SIZE(picosam9g45_nand_partition);
+ return picosam9g45_nand_partition;
+}
+
+/* det_pin is not connected */
+static struct atmel_nand_data __initdata picosam9g45_nand_data = {
+ .ale = 21,
+ .cle = 22,
+ .rdy_pin = AT91_PIN_PC8,
+ .enable_pin = AT91_PIN_PC14,
+ .partition_info = nand_partitions,
+};
+
+static struct sam9_smc_config __initdata picosam9g45_nand_smc_config = {
+ .ncs_read_setup = 0,
+ .nrd_setup = 2,
+ .ncs_write_setup = 0,
+ .nwe_setup = 2,
+
+ .ncs_read_pulse = 4,
+ .nrd_pulse = 4,
+ .ncs_write_pulse = 4,
+ .nwe_pulse = 4,
+
+ .read_cycle = 7,
+ .write_cycle = 7,
+
+ .mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE,
+ .tdf_cycles = 3,
+};
+
+static void __init picosam9g45_add_device_nand(void)
+{
+ picosam9g45_nand_data.bus_width_16 = board_have_nand_16bit();
+ /* setup bus-width (8 or 16) */
+ if (picosam9g45_nand_data.bus_width_16)
+ picosam9g45_nand_smc_config.mode |= AT91_SMC_DBW_16;
+ else
+ picosam9g45_nand_smc_config.mode |= AT91_SMC_DBW_8;
+
+ /* configure chip-select 3 (NAND) */
+ sam9_smc_configure(3, &picosam9g45_nand_smc_config);
+
+ at91_add_device_nand(&picosam9g45_nand_data);
+}
+
+
+/*
+ * LCD Controller
+ */
+#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
+static struct fb_videomode at91_tft_vga_modes[] = {
+ {
+ .name = "HannStar",
+ .refresh = 60,
+ .xres = 480, .yres = 272,
+ .pixclock = KHZ2PICOS(9000),
+
+ .left_margin = 2, .right_margin = 2,
+ .upper_margin = 2, .lower_margin = 2,
+ .hsync_len = 41, .vsync_len = 10,
+
+ .sync = 0,
+ .vmode = FB_VMODE_NONINTERLACED,
+ },
+};
+
+static struct fb_monspecs at91fb_default_monspecs = {
+ .manufacturer = "HNS",
+ .monitor = "HSD043I9W1",
+
+ .modedb = at91_tft_vga_modes,
+ .modedb_len = ARRAY_SIZE(at91_tft_vga_modes),
+ .hfmin = 15000,
+ .hfmax = 17640,
+ .vfmin = 57,
+ .vfmax = 67,
+};
+
+#define AT91SAM9G45_DEFAULT_LCDCON2 (ATMEL_LCDC_MEMOR_LITTLE \
+ | ATMEL_LCDC_DISTYPE_TFT \
+ | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE)
+
+/* Driver datas */
+static struct atmel_lcdfb_info __initdata picosam9g45_lcdc_data = {
+ .lcdcon_is_backlight = true,
+ .default_bpp = 16,
+ .default_dmacon = ATMEL_LCDC_DMAEN,
+ .default_lcdcon2 = AT91SAM9G45_DEFAULT_LCDCON2,
+ .default_monspecs = &at91fb_default_monspecs,
+ .guard_time = 9,
+ .lcd_wiring_mode = ATMEL_LCDC_WIRING_RGB,
+};
+
+#else
+static struct atmel_lcdfb_info __initdata picosam9g45_lcdc_data;
+#endif
+
+
+/*
+ * Touchscreen
+ */
+static struct at91_tsadcc_data picosam9g45_tsadcc_data = {
+ .adc_clock = 300000,
+ .pendet_debounce = 0x0d,
+ .ts_sample_hold_time = 0x0a,
+};
+
+
+/*
+ * GPIO Buttons
+ */
+#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
+static struct gpio_keys_button picosam9g45_buttons[] = {
+ { /* J9 pin 5 gnd + pin 11 */
+ .code = KEY_BACK,
+ .gpio = AT91_PIN_PB6,
+ .active_low = 1,
+ .desc = "Back",
+ .wakeup = 1,
+ },
+ { /* J9 pin 5 gnd + pin 13*/
+ .code = KEY_MENU,
+ .gpio = AT91_PIN_PB7,
+ .active_low = 1,
+ .desc = "Menu",
+ .wakeup = 1,
+ },
+ { /* J9 pin 5 gnd + pin 12 */
+ .code = KEY_HOME,
+ .gpio = AT91_PIN_PB16,
+ .active_low = 1,
+ .desc = "Home",
+ },
+
+};
+
+static struct gpio_keys_platform_data picosam9g45_button_data = {
+ .buttons = picosam9g45_buttons,
+ .nbuttons = ARRAY_SIZE(picosam9g45_buttons),
+};
+
+static struct platform_device picosam9g45_button_device = {
+ .name = "gpio-keys",
+ .id = -1,
+ .num_resources = 0,
+ .dev = {
+ .platform_data = &picosam9g45_button_data,
+ }
+};
+
+static void __init picosam9g45_add_device_buttons(void)
+{
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(picosam9g45_buttons); i++) {
+ at91_set_GPIO_periph(picosam9g45_buttons[i].gpio, 1);
+ at91_set_deglitch(picosam9g45_buttons[i].gpio, 1);
+ }
+
+ platform_device_register(&picosam9g45_button_device);
+}
+#else
+static void __init picosam9g45_add_device_buttons(void) {}
+#endif
+
+
+/*
+ * LEDs ... these could all be PWM-driven, for variable brightness
+ */
+static struct gpio_led picosam9g45_leds[] = {
+ { /* "pwr" led */
+ .name = "pwr",
+ .gpio = AT91_PIN_PD30,
+ .default_trigger = "heartbeat",
+ },
+ { /* "u1" led */
+ .name = "u1",
+ .gpio = AT91_PIN_PD0,
+ .active_low = 1,
+ .default_trigger = "mmc0",
+ },
+#if !(defined(CONFIG_LEDS_ATMEL_PWM) || defined(CONFIG_LEDS_ATMEL_PWM_MODULE))
+ { /* "u2" led */
+ .name = "u2",
+ .gpio = AT91_PIN_PD31,
+ .active_low = 1,
+ .default_trigger = "none",
+ },
+#endif
+};
+
+
+/*
+ * PWM Leds
+ */
+static struct gpio_led picosam9g45_pwm_led[] = {
+#if defined(CONFIG_LEDS_ATMEL_PWM) || defined(CONFIG_LEDS_ATMEL_PWM_MODULE)
+ { /* "right" led, green, userled1, pwm1 */
+ .name = "d7",
+ .gpio = 1, /* is PWM channel number */
+ .active_low = 1,
+ .default_trigger = "none",
+ },
+ { /* picopc buzzer */
+ .name= "buzzer",
+ .gpio= 2, /* is PWM channel number */
+ .active_low= 1,
+ .default_trigger= "none",
+ },
+#endif
+};
+
+
+/*
+ * PWM buzzer
+ */
+static void picosam9g45_setup_device_buzzer(void)
+{
+ at91_set_A_periph(AT91_PIN_PE31, 1);
+}
+
+/*
+ * Capacitive touchscreen
+ */
+#define PICOSAM9G45_CAPTS_IRQ AT91_PIN_PA27
+static struct i2c_board_info __initdata picosam9g45_i2c1_devices[] = {
+ {
+ I2C_BOARD_INFO("ms-msg20xx", 0x60),
+ .irq = PICOSAM9G45_CAPTS_IRQ,
+ },
+};
+
+static void picosam9g45_setup_device_capts(void)
+{
+ at91_set_gpio_input(PICOSAM9G45_CAPTS_IRQ, 0);
+ at91_set_deglitch(PICOSAM9G45_CAPTS_IRQ, 1);
+}
+
+
+static void __init picosam9g45_board_init(void)
+{
+ /* Buzzer PWM pin */
+ picosam9g45_setup_device_buzzer();
+ /* Capacitive Touch Screen IRQ */
+ picosam9g45_setup_device_capts();
+ /* Serial */
+ at91_add_device_serial();
+ /* USB HS Host */
+ at91_add_device_usbh_ohci(&picosam9g45_usbh_hs_data);
+ at91_add_device_usbh_ehci(&picosam9g45_usbh_hs_data);
+ /* USB HS Device */
+ at91_add_device_usba(&picosam9g45_usba_udc_data);
+ /* SPI */
+ at91_add_device_spi(picosam9g45_spi_devices, ARRAY_SIZE(picosam9g45_spi_devices));
+ /* MMC */
+ at91_add_device_mci(0, &mci0_data);
+ at91_add_device_mci(1, &mci1_data);
+ /* Ethernet */
+ at91_add_device_eth(&picosam9g45_macb_data);
+ /* NAND */
+ picosam9g45_add_device_nand();
+ /* I2C */
+ at91_add_device_i2c(0, NULL, 0);
+ at91_add_device_i2c(1, picosam9g45_i2c1_devices, ARRAY_SIZE(picosam9g45_i2c1_devices));
+ /* LCD Controller */
+ at91_add_device_lcdc(&picosam9g45_lcdc_data);
+ /* Resistive Touch Screen */
+ at91_add_device_tsadcc(&picosam9g45_tsadcc_data);
+ /* Push Buttons */
+ picosam9g45_add_device_buttons();
+ /* LEDs */
+ at91_gpio_leds(picosam9g45_leds, ARRAY_SIZE(picosam9g45_leds));
+ at91_pwm_leds(picosam9g45_pwm_led, ARRAY_SIZE(picosam9g45_pwm_led));
+}
+
+MACHINE_START(MINIBOXPICOSAM9G45, "Mini Box picoSAM9 G45 Board")
+ /* Maintainer: Nicu Pavel */
+ .timer = &at91sam926x_timer,
+ .map_io = at91_map_io,
+ .init_early = picosam9g45_init_early,
+ .init_irq = at91_init_irq_default,
+ .init_machine = picosam9g45_board_init,
+MACHINE_END
--
1.7.1
^ permalink raw reply related
* Re: [PATCH 1/2] cdma-netreg: Add various cdma-netreg watches
From: Guillaume Zajac @ 2011-10-31 14:55 UTC (permalink / raw)
To: ofono
In-Reply-To: <4EACFA2D.70902@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 645 bytes --]
Hi Denis,
On 30/10/2011 08:18, Denis Kenzior wrote:
> Hi Guillaume,
>
> On 10/20/2011 10:41 AM, Guillaume Zajac wrote:
>> ---
>> include/cdma-netreg.h | 1 +
>> src/cdma-netreg.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++
>> src/ofono.h | 13 +++++++++++
>> 3 files changed, 72 insertions(+), 0 deletions(-)
>>
> Please follow patch submission guidelines outlined in HACKING. Namely
> the include/ changes should be in a separate patch.
Ok sorry for that.
> I cherry picked the chunks dealing with ofono_cdma_netreg_get_status and
> pushed them upstream.
Kind regards,
Guillaume
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.