openwrt/staging/blogic.git
16 years agoDaVinci: MMC: MMC/SD controller driver for DaVinci family
Vipin Bhandari [Tue, 15 Dec 2009 02:01:21 +0000 (18:01 -0800)]
DaVinci: MMC: MMC/SD controller driver for DaVinci family

Add support for MMC/SD controller driver for all DaVinci family SoC.  This
patch supports davinci family SoC's DM6446, DM355, DM365 and
DA830/OMAPL137.

The patch has been tested on DM355 EVM.

The MMCSD controller specifications for DM355 can be found at
http://focus.ti.com/general/docs/litabsmultiplefilelist.tsp?literatureNumber=spruee2c

Signed-off-by: Vipin Bhandari <[email protected]>
Signed-off-by: Purshotam Kumar <[email protected]>
Acked-by: David Brownell <[email protected]>
Cc: <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agodrivers/mmc: Move dereference after NULL test
Julia Lawall [Tue, 15 Dec 2009 02:01:20 +0000 (18:01 -0800)]
drivers/mmc: Move dereference after NULL test

If the NULL test on mrq is needed, then the derefernce should be after the
NULL test.

A simplified version of the semantic match that detects this problem is as
follows (http://coccinelle.lip6.fr/):

// <smpl>
@match exists@
expression x, E;
identifier fld;
@@

* x->fld
  ... when != \(x = E\|&x\)
* x == NULL
// </smpl>

Signed-off-by: Julia Lawall <[email protected]>
Cc: <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agosdio: rework cis tuple parsing
Albert Herranz [Tue, 15 Dec 2009 02:01:19 +0000 (18:01 -0800)]
sdio: rework cis tuple parsing

Rework the current CIS tuple parsing code, reusing the existing
infrastructure and providing an easy way to add new CISTPL_FUNCE parsers
by TPLFE_TYPE.

Valid known CIS tuples are now silently queued for the SDIO function
driver when not parsed/processed (-EILSEQ) by the SDIO core.  Unknown CIS
tuples (-ENOENT) are queued too for the SDIO function driver without
aborting the initialization, but emit a warning in the kernel log.

CISTPL_FUNCE tuples can be "whitelisted" now by adding a matching entry to
the cis_tpl_funce_list table.

Signed-off-by: Albert Herranz <[email protected]>
Acked-by: Pierre Ossman <[email protected]>
Cc: <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agomxcmmc: fix error path in mxcmci_probe
Uwe Kleine-König [Tue, 15 Dec 2009 02:01:17 +0000 (18:01 -0800)]
mxcmmc: fix error path in mxcmci_probe

After a failing allocation of mmc or a failed ioremap in mxcmci_probe host was
used uninitialized.

Signed-off-by: Uwe Kleine-König <[email protected]>
Acked-by: Sascha Hauer <[email protected]>
Cc: Pierre Ossman <[email protected]>
Cc: Martin Fuzzey <[email protected]>
Cc: Pierre Ossman <[email protected]>
Cc: <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agofirmware: only allow EDD on x86
Mike Frysinger [Tue, 15 Dec 2009 02:01:16 +0000 (18:01 -0800)]
firmware: only allow EDD on x86

Rather than have the EDD depend on !ia64 (and assuming that only ia64,
x86, x86_64 will be including this Kconfig), have EDD depend on the only
arches which can support this code.  This should allow all other arches to
cleanly include the firmware Kconfig.

Also simplify the x86 string used by FIRMWARE_MEMMAP to match EDD.

Signed-off-by: Mike Frysinger <[email protected]>
Acked-by: Matt Domsch <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoSubject: Re: [PATCH] strstrip incorrectly marked __must_check
KOSAKI Motohiro [Tue, 15 Dec 2009 02:01:15 +0000 (18:01 -0800)]
Subject: Re: [PATCH] strstrip incorrectly marked __must_check

Recently, We marked strstrip() as must_check.  because it was frequently
misused and it should be checked.  However, we found one exception.
scsi/ipr.c intentionally ignore return value of strstrip.  Because it
wishes to keep the whitespace at the beginning.

Thus we need to keep with and without checked whitespace trim function.
This patch adds a new strim() and changes ipr.c to use it.

[[email protected]: coding-style fixes]
Suggested-by: Alan Cox <[email protected]>
Signed-off-by: KOSAKI Motohiro <[email protected]>
Cc: James Bottomley <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoefi.h: use %pUl to print UUIDs
Joe Perches [Tue, 15 Dec 2009 02:01:14 +0000 (18:01 -0800)]
efi.h: use %pUl to print UUIDs

Shrinks vmlinux

without:
$ size vmlinux
   text    data     bss     dec     hex filename
6975863  679652 1359668 9015183  898f8f vmlinux

with:
$ size vmlinux
   text    data     bss     dec     hex filename
6975639 679652 1359668 9014959 898eaf vmlinux

Signed-off-by: Joe Perches <[email protected]>
Cc: Jeff Garzik <[email protected]>
Cc: Tejun Heo <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agofs/ubifs: use %pUB to print UUIDs
Joe Perches [Tue, 15 Dec 2009 02:01:13 +0000 (18:01 -0800)]
fs/ubifs: use %pUB to print UUIDs

Signed-off-by: Joe Perches <[email protected]>
Cc: Artem Bityutskiy <[email protected]>
Cc: Adrian Hunter <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agofs/gfs2/sys.c: use %pUB to print UUIDs
Joe Perches [Tue, 15 Dec 2009 02:01:13 +0000 (18:01 -0800)]
fs/gfs2/sys.c: use %pUB to print UUIDs

Signed-off-by: Joe Perches <[email protected]>
Cc: Steven Whitehouse <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agodrivers/md/md.c: use %pU to print UUIDs
Joe Perches [Tue, 15 Dec 2009 02:01:12 +0000 (18:01 -0800)]
drivers/md/md.c: use %pU to print UUIDs

Signed-off-by: Joe Perches <[email protected]>
Cc: Neil Brown <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agodrivers/firmware/dmi_scan.c: use %pUB to print UUIDs
Joe Perches [Tue, 15 Dec 2009 02:01:11 +0000 (18:01 -0800)]
drivers/firmware/dmi_scan.c: use %pUB to print UUIDs

Signed-off-by: Joe Perches <[email protected]>
Cc: Jeff Garzik <[email protected]>
Cc: Tejun Heo <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agorandom.c: use %pU to print UUIDs
Joe Perches [Tue, 15 Dec 2009 02:01:11 +0000 (18:01 -0800)]
random.c: use %pU to print UUIDs

Signed-off-by: Joe Perches <[email protected]>
Acked-by: Matt Mackall <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agofs/xfs/xfs_log_recover.c: use %pU to print UUIDs
Joe Perches [Tue, 15 Dec 2009 02:01:10 +0000 (18:01 -0800)]
fs/xfs/xfs_log_recover.c: use %pU to print UUIDs

Signed-off-by: Joe Perches <[email protected]>
Acked-by: Alex Elder <[email protected]>
Cc: Christoph Hellwig <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agolib/vsprintf.c: add %pU to print UUID/GUIDs
Joe Perches [Tue, 15 Dec 2009 02:01:09 +0000 (18:01 -0800)]
lib/vsprintf.c: add %pU to print UUID/GUIDs

UUID/GUIDs are somewhat common in kernel source.

Standardize the printed style of UUID/GUIDs by using
another extension to %p.

%pUb:   01020304-0506-0708-090a-0b0c0d0e0f10
%pUB:   01020304-0506-0708-090A-0B0C0D0E0F10 (upper case)
%pUl:   04030201-0605-0807-090a-0b0c0d0e0f10
%pUL:   04030201-0605-0807-090A-0B0C0D0E0F10 (upper case)

%pU defaults to %pUb

Signed-off-by: Joe Perches <[email protected]>
Cc: Jeff Garzik <[email protected]>
Cc: Tejun Heo <[email protected]>
Cc: Alex Elder <[email protected]>
Cc: Christoph Hellwig <[email protected]>
Cc: Artem Bityutskiy <[email protected]>
Cc: Adrian Hunter <[email protected]>
Cc: Steven Whitehouse <[email protected]>
Cc: Mauro Carvalho Chehab <[email protected]>
Cc: Matt Mackall <[email protected]>
Cc: Neil Brown <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoparser: remove unnecessary strlen()
André Goddard Rosa [Tue, 15 Dec 2009 02:01:08 +0000 (18:01 -0800)]
parser: remove unnecessary strlen()

No functional change.  Cache strlen() result to avoid recalculating it up
to 3 times on the worst case.

Reduces code size a little by 32 bytes:
   text    data     bss     dec     hex filename
   1385       0       0    1385     569 lib/parser.o-BEFORE
   1353       0       0    1353     549 lib/parser.o-AFTER

Signed-off-by: André Goddard Rosa <[email protected]>
Cc: Randy Dunlap <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agotree-wide: convert open calls to remove spaces to skip_spaces() lib function
André Goddard Rosa [Tue, 15 Dec 2009 02:01:06 +0000 (18:01 -0800)]
tree-wide: convert open calls to remove spaces to skip_spaces() lib function

Makes use of skip_spaces() defined in lib/string.c for removing leading
spaces from strings all over the tree.

It decreases lib.a code size by 47 bytes and reuses the function tree-wide:
   text    data     bss     dec     hex filename
  64688     584     592   65864   10148 (TOTALS-BEFORE)
  64641     584     592   65817   10119 (TOTALS-AFTER)

Also, while at it, if we see (*str && isspace(*str)), we can be sure to
remove the first condition (*str) as the second one (isspace(*str)) also
evaluates to 0 whenever *str == 0, making it redundant. In other words,
"a char equals zero is never a space".

Julia Lawall tried the semantic patch (http://coccinelle.lip6.fr) below,
and found occurrences of this pattern on 3 more files:
    drivers/leds/led-class.c
    drivers/leds/ledtrig-timer.c
    drivers/video/output.c

@@
expression str;
@@

( // ignore skip_spaces cases
while (*str &&  isspace(*str)) { \(str++;\|++str;\) }
|
- *str &&
isspace(*str)
)

Signed-off-by: André Goddard Rosa <[email protected]>
Cc: Julia Lawall <[email protected]>
Cc: Martin Schwidefsky <[email protected]>
Cc: Jeff Dike <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: "H. Peter Anvin" <[email protected]>
Cc: Richard Purdie <[email protected]>
Cc: Neil Brown <[email protected]>
Cc: Kyle McMartin <[email protected]>
Cc: Henrique de Moraes Holschuh <[email protected]>
Cc: David Howells <[email protected]>
Cc: <[email protected]>
Cc: Samuel Ortiz <[email protected]>
Cc: Patrick McHardy <[email protected]>
Cc: Takashi Iwai <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agostring: on strstrip(), first remove leading spaces before running over str
André Goddard Rosa [Tue, 15 Dec 2009 02:01:04 +0000 (18:01 -0800)]
string: on strstrip(), first remove leading spaces before running over str

... so that strlen() iterates over a smaller string comprising of the
remaining characters only.

Signed-off-by: André Goddard Rosa <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agostring: factorize skip_spaces and export it to be generally available
André Goddard Rosa [Tue, 15 Dec 2009 02:01:04 +0000 (18:01 -0800)]
string: factorize skip_spaces and export it to be generally available

On the following sentence:
    while (*s && isspace(*s))
        s++;

If *s == 0, isspace() evaluates to ((_ctype[*s] & 0x20) != 0), which
evaluates to ((0x08 & 0x20) != 0) which equals to 0 as well.
If *s == 1, we depend on isspace() result anyway. In other words,
"a char equals zero is never a space", so remove this check.

Also, *s != 0 is most common case (non-null string).

Fixed const return as noticed by Jan Engelhardt and James Bottomley.
Fixed unnecessary extra cast on strstrip() as noticed by Jan Engelhardt.

Signed-off-by: André Goddard Rosa <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agodrivers/scsi/sym53c8xx_2/sym_glue.c: rename skip_spaces() to sym_skip_spaces()
Andrew Morton [Tue, 15 Dec 2009 02:01:02 +0000 (18:01 -0800)]
drivers/scsi/sym53c8xx_2/sym_glue.c: rename skip_spaces() to sym_skip_spaces()

To avoid a collision with the newly-added kernel-wide skip_spaces().

Signed-off-by: André Goddard Rosa <[email protected]>
Cc: James Bottomley <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoctype: constify read-only _ctype string
André Goddard Rosa [Tue, 15 Dec 2009 02:01:02 +0000 (18:01 -0800)]
ctype: constify read-only _ctype string

While at it, use tabs to indent the comments.

Signed-off-by: André Goddard Rosa <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agovsprintf: reuse almost identical simple_strtoulX() functions
André Goddard Rosa [Tue, 15 Dec 2009 02:01:01 +0000 (18:01 -0800)]
vsprintf: reuse almost identical simple_strtoulX() functions

The difference between simple_strtoul() and simple_strtoull() is just
the size of the variable used to keep track of the sum of characters
converted to numbers:

unsigned long simple_strtoul() {...}
unsigned long long simple_strtoull(){...}

Both are same size on my Core 2/gcc 4.4.1.
Overflow condition is not checked on both functions, so an extremely large
string can break these functions so that they don't even notice it.

As we do not care for overflowing on these functions, always keep the sum
using the larger variable around (unsigned long long) on simple_strtoull()
and cast it to (unsigned long) on simple_strtoul(), which then becomes
just a wrapper around simple_strtoull().

Code size decreases by 304 bytes:
   text    data     bss     dec     hex filename
  15534       0       8   15542    3cb6 vsprintf.o (ex lib/lib.a-BEFORE)
  15230       0       8   15238    3b86 vsprintf.o (ex lib/lib.a-AFTER)

Signed-off-by: André Goddard Rosa <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agovsprintf: factor out skip_space code in a separate function
André Goddard Rosa [Tue, 15 Dec 2009 02:01:00 +0000 (18:01 -0800)]
vsprintf: factor out skip_space code in a separate function

When converting more caller sites, the inline decision will be left up to gcc.

It decreases code size:
 text    data     bss     dec     hex filename
15710       0       8   15718    3d66 vsprintf.o (ex lib/lib.a-BEFORE)
15534       0       8   15542    3cb6 vsprintf.o (ex lib/lib.a-AFTER)

Signed-off-by: André Goddard Rosa <[email protected]>
Acked-by: Frederic Weisbecker <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agovsprintf: move local vars to block local vars and remove unneeded ones
André Goddard Rosa [Tue, 15 Dec 2009 02:00:59 +0000 (18:00 -0800)]
vsprintf: move local vars to block local vars and remove unneeded ones

Cleanup by moving variables closer to the scope where they're used in fact.
Also, remove unneeded ones.

Signed-off-by: André Goddard Rosa <[email protected]>
Acked-by: Frederic Weisbecker <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agovsprintf: reduce code size by avoiding extra check
André Goddard Rosa [Tue, 15 Dec 2009 02:00:59 +0000 (18:00 -0800)]
vsprintf: reduce code size by avoiding extra check

No functional change, just refactor the code so that it avoid checking
"if (hi)" two times in a sequence, taking advantage of previous check made.

It also reduces code size:
   text    data     bss     dec     hex filename
  15726       0       8   15734    3d76 vsprintf.o (ex lib/lib.a-BEFORE)
  15710       0       8   15718    3d66 vsprintf.o (ex lib/lib.a-AFTER)

Signed-off-by: André Goddard Rosa <[email protected]>
Acked-by: Frederic Weisbecker <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agovsprintf: use TOLOWER whenever possible
André Goddard Rosa [Tue, 15 Dec 2009 02:00:58 +0000 (18:00 -0800)]
vsprintf: use TOLOWER whenever possible

It decreases code size as well:
 text    data     bss     dec     hex filename
15758       0       8   15766    3d96 vsprintf.o (ex lib/lib.a-BEFORE)
15726       0       8   15734    3d76 vsprintf.o (ex lib/lib.a-TOLOWER)

Signed-off-by: André Goddard Rosa <[email protected]>
Acked-by: Frederic Weisbecker <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agovsprintf: give it some care to please checkpatch.pl
André Goddard Rosa [Tue, 15 Dec 2009 02:00:57 +0000 (18:00 -0800)]
vsprintf: give it some care to please checkpatch.pl

Most relevant complaints were addressed.

Signed-off-by: André Goddard Rosa <[email protected]>
Acked-by: Frederic Weisbecker <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agovsprintf: pre-calculate final string length for later use
André Goddard Rosa [Tue, 15 Dec 2009 02:00:56 +0000 (18:00 -0800)]
vsprintf: pre-calculate final string length for later use

Signed-off-by: André Goddard Rosa <[email protected]>
Acked-by: Frederic Weisbecker <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agovsprintf: factorize "(null)" string
André Goddard Rosa [Tue, 15 Dec 2009 02:00:55 +0000 (18:00 -0800)]
vsprintf: factorize "(null)" string

This patchset reduces lib/lib.a code size by 482 bytes on my Core 2 with
gcc 4.4.1 even considering that it exports a newly defined function
skip_spaces() to drivers:

   text    data     bss     dec     hex filename
  64867     840     592   66299   102fb (TOTALS-lib.a-BEFORE)
  64641     584     592   65817   10119 (TOTALS-lib.a-AFTER)
and implements some code tidy up.

Besides reducing lib.a size, it converts many in-tree drivers to use the
newly defined function, which makes another small reduction on kernel size
overall when those drivers are used.

This patch:

Change "<NULL>" to "(null)", unifying 3 equal strings.
glibc also uses "(null)" for the same purpose.

It decreases code size by 7 bytes:
 text    data     bss     dec     hex filename
15765       0       8   15773    3d9d vsprintf.o (ex lib/lib.a-BEFORE)
15758       0       8   15766    3d96 vsprintf.o (ex lib/lib.a-AFTER)

Signed-off-by: André Goddard Rosa <[email protected]>
Acked-by: Frederic Weisbecker <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoMAINTAINERS: Update file patterns for WOLFSON MICROELECTRONICS PMIC DRIVERS
Joe Perches [Tue, 15 Dec 2009 02:00:54 +0000 (18:00 -0800)]
MAINTAINERS: Update file patterns for WOLFSON MICROELECTRONICS PMIC DRIVERS

One of the includes pointed to a non-existent directory
Add Documentation/hwmon/wm83??
Add sound/soc/codecs/wm(8350|8400).h files

Signed-off-by: Joe Perches <[email protected]>
Acked-by: Mark Brown <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoMAINTAINERS: remove file pattern from KERNEL VIRTUAL MACHINE (KVM) FOR AMD-V
Joe Perches [Tue, 15 Dec 2009 02:00:53 +0000 (18:00 -0800)]
MAINTAINERS: remove file pattern from KERNEL VIRTUAL MACHINE (KVM) FOR AMD-V

Commit 6c8166a77c98f473eb91e96a61c3cf78ac617278 ("KVM: SVM: Fold kvm_svm.h
info svm.c") folded this file away.

Signed-off-by: Joe Perches <[email protected]>
Cc: Avi Kivity <[email protected]>
Cc: Joerg Roedel <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoMAINTAINERS: rename PALM TREO section and file patterns
Joe Perches [Tue, 15 Dec 2009 02:00:52 +0000 (18:00 -0800)]
MAINTAINERS: rename PALM TREO section and file patterns

Signed-off-by: Joe Perches <[email protected]>
Cc: Tomas Cech <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoMAINTAINERS: mark cifs mailing list as "moderated for non-subscribers"
KOSAKI Motohiro [Tue, 15 Dec 2009 02:00:52 +0000 (18:00 -0800)]
MAINTAINERS: mark cifs mailing list as "moderated for non-subscribers"

If non-subscribers post bug report to CIFS mailing list, they will get
following messages.

Your mail to 'linux-cifs-client' with the subject

    [PATCH x/x] cifs: xxxxxxxxxxxxx

Is being held until the list moderator can review it for approval.

The reason it is being held:

    Post by non-member to a members-only list

Either the message will get posted to the list, or you will receive
notification of the moderator's decision.  If you would like to cancel
this posting, please visit the following URL:

members-only list should be written as so in MAINTAINERS file.

Signed-off-by: KOSAKI Motohiro <[email protected]>
Cc: Steve French <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoscripts/get_maintainer.pl: support multiple VCSs - add mercurial
Joe Perches [Tue, 15 Dec 2009 02:00:50 +0000 (18:00 -0800)]
scripts/get_maintainer.pl: support multiple VCSs - add mercurial

Restructure a bit for multiple version control systems support.

Use a hash for each supported VCS that contains the commands
and patterns used to find commits, logs, and signers.

--git command line options are still used for hg except for
--git-since.  Use --hg-since instead.

The number of commits can differ for git and hg, so --rolestats
might be different.

Style changes: Use common push style push(@foo...), simplify a return

Bumped version to 0.23.

Signed-off-by: Joe Perches <[email protected]>
Cc: Marti Raudsepp <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoscripts/get_maintainer.pl: fix --non with --git-blame and cleanups
Joe Perches [Tue, 15 Dec 2009 02:00:49 +0000 (18:00 -0800)]
scripts/get_maintainer.pl: fix --non with --git-blame and cleanups

Fix email matching without name --n and --git-blame
   Using --non and --git-blame caused maintainer signature
   matching to fail.  Fixed that by adding 3rd argument to
   sub format_email to control show/hide name portion of address
Slurp -f file instead of reading line-by-line for K: pattern matching.
   Suggested by Wolfram Sang as more efficient
Refactor git command execution
   Break into 2 functions, execute/analyze
   Share code between --git and --git-blame
   Don't warn multiple times when git isn't installed
Improve stats reporting
   --git-min-percent and -- rolestats now count the total number of commits
   for either the period of --git-since or if using --git-blame the commits
   used by the current file and calculate commit % as
      # of commits signed / total commits * 100
Code style cleaning
   Use consistent sub foo { my (args...) = @_;

Signed-off-by: Joe Perches <[email protected]>
Cc: Ben Hutchings <[email protected]>
Cc: Greg KH <[email protected]>
Cc: Pavel Machek <[email protected]>
Cc: Wolfram Sang <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoscripts/get_maintainer.pl: add --roles and --rolestats
Joe Perches [Tue, 15 Dec 2009 02:00:46 +0000 (18:00 -0800)]
scripts/get_maintainer.pl: add --roles and --rolestats

--roles shows the role of each email address, i.e. why it was selected.
--rolestats selects --roles and adds git log/blame signers #'s and %

Multiple roles are possible (supporter, maintainer, git-signer...)

--roles or --rolestats is meant to help identify appropriate maintainers
to notify and should not be used with "git send-email --cc-cmd"

Example output:

Existing:

$ ./scripts/get_maintainer.pl -f arch/x86/kernel/acpi/boot.c
Corentin Chary <[email protected]>
Karol Kozimor <[email protected]>
Len Brown <[email protected]>
Pavel Machek <[email protected]>
Rafael J. Wysocki <[email protected]>
Thomas Gleixner <[email protected]>
Ingo Molnar <[email protected]>
H. Peter Anvin <[email protected]>
[email protected]
Yinghai Lu <[email protected]>
Jeremy Fitzhardinge <[email protected]>
[email protected]
[email protected]
[email protected]

With --roles

$ ./scripts/get_maintainer.pl --roles -f arch/x86/kernel/acpi/boot.c
Corentin Chary <[email protected]> (maintainer:ASUS ACPI EXTRAS...)
Karol Kozimor <[email protected]> (maintainer:ASUS ACPI EXTRAS...)
Len Brown <[email protected]> (supporter:SUSPEND TO RAM,git-signer)
Pavel Machek <[email protected]> (supporter:SUSPEND TO RAM)
Rafael J. Wysocki <[email protected]> (supporter:SUSPEND TO RAM)
Thomas Gleixner <[email protected]> (maintainer:X86 ARCHITECTURE...)
Ingo Molnar <[email protected]> (maintainer:X86 ARCHITECTURE...,git-signer)
H. Peter Anvin <[email protected]> (maintainer:X86 ARCHITECTURE...)
[email protected] (maintainer:X86 ARCHITECTURE...)
Yinghai Lu <[email protected]> (git-signer)
Jeremy Fitzhardinge <[email protected]> (git-signer)
[email protected] (open list:ASUS ACPI EXTRAS...)
[email protected] (open list:SUSPEND TO RAM)
[email protected] (open list)

With --rolestats

$ ./scripts/get_maintainer.pl --rolestats -f arch/x86/kernel/acpi/boot.c
Corentin Chary <[email protected]> (maintainer:ASUS ACPI EXTRAS...)
Karol Kozimor <[email protected]> (maintainer:ASUS ACPI EXTRAS...)
Len Brown <[email protected]> (supporter:SUSPEND TO RAM,git-signer:16/79=20%)
Pavel Machek <[email protected]> (supporter:SUSPEND TO RAM)
Rafael J. Wysocki <[email protected]> (supporter:SUSPEND TO RAM)
Thomas Gleixner <[email protected]> (maintainer:X86 ARCHITECTURE...)
Ingo Molnar <[email protected]> (maintainer:X86 ARCHITECTURE...,git-signer:29/79=37%)
H. Peter Anvin <[email protected]> (maintainer:X86 ARCHITECTURE...)
[email protected] (maintainer:X86 ARCHITECTURE...)
Yinghai Lu <[email protected]> (git-signer:12/79=15%)
Jeremy Fitzhardinge <[email protected]> (git-signer:6/79=8%)
[email protected] (open list:ASUS ACPI EXTRAS...)
[email protected] (open list:SUSPEND TO RAM)
[email protected] (open list)

With --rolestats and --git-blame

$ ./scripts/get_maintainer.pl --rolestats --git-blame -f arch/x86/kernel/acpi/boot.c
Corentin Chary <[email protected]> (maintainer:ASUS ACPI EXTRAS...)
Karol Kozimor <[email protected]> (maintainer:ASUS ACPI EXTRAS...)
Len Brown <[email protected]> (supporter:SUSPEND TO RAM,git-signer:16/79=20%,commits:22/154=14%)
Pavel Machek <[email protected]> (supporter:SUSPEND TO RAM)
Rafael J. Wysocki <[email protected]> (supporter:SUSPEND TO RAM)
Thomas Gleixner <[email protected]> (maintainer:X86 ARCHITECTURE...)
Ingo Molnar <[email protected]> (maintainer:X86 ARCHITECTURE...,git-signer:29/79=37%,commits:36/154=23%)
H. Peter Anvin <[email protected]> (maintainer:X86 ARCHITECTURE...)
[email protected] (maintainer:X86 ARCHITECTURE...)
Yinghai Lu <[email protected]> (git-signer:12/79=15%,commits:9/154=6%)
Jeremy Fitzhardinge <[email protected]> (git-signer:6/79=8%)
Andi Kleen <[email protected]> (commits:11/154=7%)
Andrew Morton <[email protected]> (commits:10/154=6%)
[email protected] (open list:ASUS ACPI EXTRAS...)
[email protected] (open list:SUSPEND TO RAM)
[email protected] (open list)

Other changes:

Format git-signers email addresses a bit to reduce bad signatures
Command line bad arguments emitted a verbose usage(), just show --help
Version number bumped to .22

Ben Hutchings had the idea and created a good deal of this implementation.

Signed-off-by: Joe Perches <[email protected]>
Signed-off-by: Ben Hutchings <[email protected]>
Cc: Greg KH <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agovt: introduce and use vt_kmsg_redirect() function
Bernhard Walle [Tue, 15 Dec 2009 02:00:43 +0000 (18:00 -0800)]
vt: introduce and use vt_kmsg_redirect() function

The kernel offers with TIOCL_GETKMSGREDIRECT ioctl() the possibility to
redirect the kernel messages to a specific console.

However, since it's not possible to switch to the kernel message console
after a panic(), it would be nice if the kernel would print the panic
message on the current console.

This patch series adds a new interface to access the global kmsg_redirect
variable by a function to be able to use it in code where
CONFIG_VT_CONSOLE is not set (kernel/panic.c).

This patch:

Instead of using and exporting a global value kmsg_redirect, introduce a
function vt_kmsg_redirect() that both can set and return the console where
messages are printed.

Change all users of kmsg_redirect (the VT code itself and kernel/power.c)
to the new interface.

The main advantage is that vt_kmsg_redirect() can also be used when
CONFIG_VT_CONSOLE is not set.

Signed-off-by: Bernhard Walle <[email protected]>
Cc: Alan Cox <[email protected]>
Cc: Ingo Molnar <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agocs5535: drop the Geode-specific MFGPT/GPIO code
Andres Salomon [Tue, 15 Dec 2009 02:00:41 +0000 (18:00 -0800)]
cs5535: drop the Geode-specific MFGPT/GPIO code

With generic modular drivers handling all of this stuff, the
geode-specific code can go away.  The cs5535-gpio, cs5535-mfgpt, and
cs5535-clockevt drivers now handle this.

Signed-off-by: Andres Salomon <[email protected]>
Cc: Jordan Crouse <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: john stultz <[email protected]>
Cc: Chris Ball <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agocs5535: define lxfb/gxfb MSRs in linux/cs5535.h
Andres Salomon [Tue, 15 Dec 2009 02:00:40 +0000 (18:00 -0800)]
cs5535: define lxfb/gxfb MSRs in linux/cs5535.h

..and include them in the lxfb/gxfb drivers rather than asm/geode.h (where
possible).

Signed-off-by: Andres Salomon <[email protected]>
Cc: Jordan Crouse <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: john stultz <[email protected]>
Cc: Chris Ball <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agocs5535: move VSA2 checks into linux/cs5535.h
Andres Salomon [Tue, 15 Dec 2009 02:00:40 +0000 (18:00 -0800)]
cs5535: move VSA2 checks into linux/cs5535.h

Signed-off-by: Andres Salomon <[email protected]>
Cc: Jordan Crouse <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: john stultz <[email protected]>
Cc: Chris Ball <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agocs5535: move the DIVIL MSR definition into linux/cs5535.h
Andres Salomon [Tue, 15 Dec 2009 02:00:39 +0000 (18:00 -0800)]
cs5535: move the DIVIL MSR definition into linux/cs5535.h

The only thing that uses this is the reboot_fixups code.

Signed-off-by: Andres Salomon <[email protected]>
Cc: Jordan Crouse <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: john stultz <[email protected]>
Cc: Chris Ball <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agocs5535: add a generic clock event MFGPT driver
Andres Salomon [Tue, 15 Dec 2009 02:00:38 +0000 (18:00 -0800)]
cs5535: add a generic clock event MFGPT driver

This is based on the old code in arch/x86/kernel/mfgpt_32.c, but is
modular and not Geode-specific.  There's no reason why the clock event
device needs to be registered so early at boot; the clockevent code is
perfectly capable of dynamic switching.

[[email protected]: add linux/irq.h include]
Signed-off-by: Andres Salomon <[email protected]>
Cc: Jordan Crouse <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: john stultz <[email protected]>
Cc: Chris Ball <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agocs5535: add a generic MFGPT driver
Andres Salomon [Tue, 15 Dec 2009 02:00:37 +0000 (18:00 -0800)]
cs5535: add a generic MFGPT driver

This is based on the old code on arch/x86/kernel/mfgpt_32.c, except it's
not x86 specific, it's modular, and it makes use of a PCI BAR rather than
a random MSR.  Currently module unloading is not supported; it's uncertain
whether or not it can be made work with the hardware.

[[email protected]: add X86 dependency]
Signed-off-by: Andres Salomon <[email protected]>
Cc: Jordan Crouse <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: john stultz <[email protected]>
Cc: Chris Ball <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoALSA: cs5535audio: free OLPC quirks from reliance on MGEODE_LX cpu optimization
Andres Salomon [Tue, 15 Dec 2009 02:00:36 +0000 (18:00 -0800)]
ALSA: cs5535audio: free OLPC quirks from reliance on MGEODE_LX cpu optimization

Previously, OLPC support for the mic extensions was only enabled in the
ALSA driver if CONFIG_OLPC and CONFIG_MGEODE_LX were both set.  This was
because the old geode GPIO code was written in a manner that assumed
CONFIG_MGEODE_LX.  With the new cs553x-gpio driver, this is no longer the
case; as such, we can drop the requirement on CONFIG_MGEODE_LX and instead
include a requirement on GPIOLIB.

We use the generic GPIO API rather than the cs553x-specific API.

Signed-off-by: Andres Salomon <[email protected]>
Cc: Takashi Iwai <[email protected]>
Cc: Jordan Crouse <[email protected]>
Cc: David Brownell <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agocs5535-gpio: request function, mask & names added
Tobias Mueller [Tue, 15 Dec 2009 02:00:35 +0000 (18:00 -0800)]
cs5535-gpio: request function, mask & names added

Changed number of gpio pins to 32 (according to datasheet)

Added mask to disable some pins

Added gpio_request for checking mask and disabling special pin functions

Added pin names

[[email protected]: make printk usage consistent]
Signed-off-by: Tobias Mueller <[email protected]>
Signed-off-by: Andres Salomon <[email protected]>
Cc: Takashi Iwai <[email protected]>
Cc: Jordan Crouse <[email protected]>
Cc: David Brownell <[email protected]>
Cc: Alessandro Zummo <[email protected]>
Signed-off-by: Andres Salomon <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agocs5535-gpio: add AMD CS5535/CS5536 GPIO driver support
Andres Salomon [Tue, 15 Dec 2009 02:00:32 +0000 (18:00 -0800)]
cs5535-gpio: add AMD CS5535/CS5536 GPIO driver support

This creates a CS5535/CS5536 GPIO driver which uses a gpio_chip backend
(allowing GPIO users to use the generic GPIO API if desired) while also
allowing architecture-specific users directly (via the cs5535_gpio_*
functions).

Tested on an OLPC machine.  Some Leemotes also use CS5536 (with a mips
cpu), which is why this is in drivers/gpio rather than arch/x86.
Currently, it conflicts with older geode GPIO support; once MFGPT support
is reworked to also be more generic, the older geode code will be removed.

Signed-off-by: Andres Salomon <[email protected]>
Cc: Takashi Iwai <[email protected]>
Cc: Jordan Crouse <[email protected]>
Cc: David Brownell <[email protected]>
Reviewed-by: Alessandro Zummo <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agodrivers/char/misc.c: use bitmap/bitops functions for dynamic minor number allocation
Thadeu Lima de Souza Cascardo [Tue, 15 Dec 2009 02:00:31 +0000 (18:00 -0800)]
drivers/char/misc.c: use bitmap/bitops functions for dynamic minor number allocation

Use DECLARE_BITMAP(), find_first_zero_bit(), set_bit() and clear_bit()
instead of rewriting code to do it with the minor number dynamic
allocation bitmap.

We need to invert the bit position to keep the code behaviour of using the
last minor numbers first, since we don't have a find_last_zero_bit.

Signed-off-by: Thadeu Lima de Souza Cascardo <[email protected]>
Cc: "H. Peter Anvin" <[email protected]>
Cc: Alan Cox <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agodrivers/char/misc.c: clear allocation bit in minor bitmap when device register fails
Thadeu Lima de Souza Cascardo [Tue, 15 Dec 2009 02:00:30 +0000 (18:00 -0800)]
drivers/char/misc.c: clear allocation bit in minor bitmap when device register fails

If there's a failure creating the device (because there's already one with
the same name, for example), the current implementation does not clear the
bit for the allocated minor and that number is lost for future
allocations.

Second, the test currently in misc_deregister is broken, since it does not
test for the 0 minor.

Signed-off-by: Thadeu Lima de Souza Cascardo <[email protected]>
Cc: "H. Peter Anvin" <[email protected]>
Cc: Alan Cox <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoerr.h: add helper function to simplify pointer error checking
Phil Carmody [Tue, 15 Dec 2009 02:00:29 +0000 (18:00 -0800)]
err.h: add helper function to simplify pointer error checking

There are quite a few instances in the kernel of checks of pointers both
against NULL and against the errno range, handling both cases identically.
This additional helper function would simplify such code.

[[email protected]: build fix]
Signed-off-by: Phil Carmody <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoioc3/ioc4: fix error path on driver registration
Jean Delvare [Tue, 15 Dec 2009 02:00:28 +0000 (18:00 -0800)]
ioc3/ioc4: fix error path on driver registration

Two IOC3 and IOC4 drivers have broken error paths on registration.  Fix
them.

Signed-off-by: Jean Delvare <[email protected]>
Cc: Pat Gefre <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoioc3/ioc4: various section fixes
Jean Delvare [Tue, 15 Dec 2009 02:00:27 +0000 (18:00 -0800)]
ioc3/ioc4: various section fixes

Several IOC3 and IOC4 drivers misuse the __devinit and __devexit section
markers.  Use __init and __exit instead as appropriate, then add __devinit
and __devexit where they really belong for PCI drivers.

Also make ioc4_serial_init static.

Signed-off-by: Jean Delvare <[email protected]>
Cc: Pat Gefre <[email protected]>
Cc: Alan Cox <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agotask_struct: make journal_info conditional
Hiroshi Shimamoto [Tue, 15 Dec 2009 02:00:26 +0000 (18:00 -0800)]
task_struct: make journal_info conditional

journal_info in task_struct is used in journaling file system only.  So
introduce CONFIG_FS_JOURNAL_INFO and make it conditional.

Signed-off-by: Hiroshi Shimamoto <[email protected]>
Cc: Chris Mason <[email protected]>
Cc: "Theodore Ts'o" <[email protected]>
Cc: Steven Whitehouse <[email protected]>
Cc: KONISHI Ryusuke <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoMake DEBUG_BUGVERBOSE default to y
Alexey Dobriyan [Tue, 15 Dec 2009 02:00:25 +0000 (18:00 -0800)]
Make DEBUG_BUGVERBOSE default to y

It's easy to lose useful DEBUG_BUGVERBOSE by switching EMBEDDED left and right.

Signed-off-by: Alexey Dobriyan <[email protected]>
Cc: Sam Ravnborg <[email protected]>
Cc: Ingo Molnar <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agokernel.h: add printk_ratelimited and pr_<level>_rl
Joe Perches [Tue, 15 Dec 2009 02:00:25 +0000 (18:00 -0800)]
kernel.h: add printk_ratelimited and pr_<level>_rl

Add a printk_ratelimited statement expression macro that uses a per-call
ratelimit_state so that multiple subsystems output messages are not
suppressed by a global __ratelimit state.

[[email protected]: coding-style fixes]
[[email protected]: s/_rl/_ratelimited/g]
Signed-off-by: Joe Perches <[email protected]>
Cc: Naohiro Ooiwa <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Hiroshi Shimamoto <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agomisc: remove MAC pmu function declaration from misc device class
Thadeu Lima de Souza Cascardo [Tue, 15 Dec 2009 02:00:23 +0000 (18:00 -0800)]
misc: remove MAC pmu function declaration from misc device class

Commit 8c8709334cec803368a432a33e0f2e116d48fe07 has removed the
pmu_device_init call from misc_init, but unlike other similar commits,
has not removed its declaration.

Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agokernel/sys.c: fix "warning: do-while statement is not a compound statement" noise
H Hartley Sweeten [Tue, 15 Dec 2009 02:00:22 +0000 (18:00 -0800)]
kernel/sys.c: fix "warning: do-while statement is not a compound statement" noise

do_each_thread/while_each_thread wrap a block of code that is in this format:

for (...)
do
...
while

If curly braces do not surround the inner loop the following warning is
generated by sparse:

warning: do-while statement is not a compound statement

Fix the warning by adding the braces.

Signed-off-by: H Hartley Sweeten <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agokallsyms: remove deprecated print_fn_descriptor_symbol()
Amerigo Wang [Tue, 15 Dec 2009 02:00:22 +0000 (18:00 -0800)]
kallsyms: remove deprecated print_fn_descriptor_symbol()

According to feature-removal-schedule.txt, it is the time to remove
print_fn_descriptor_symbol().

And a quick grep shows that it no longer has any callers.

Signed-off-by: WANG Cong <[email protected]>
Cc: Bjorn Helgaas <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agorwsem: fix rwsem_is_locked() bugs
Amerigo Wang [Tue, 15 Dec 2009 02:00:21 +0000 (18:00 -0800)]
rwsem: fix rwsem_is_locked() bugs

rwsem_is_locked() tests ->activity without locks, so we should always keep
->activity consistent.  However, the code in __rwsem_do_wake() breaks this
rule, it updates ->activity after _all_ readers waken up, this may give
some reader a wrong ->activity value, thus cause rwsem_is_locked() behaves
wrong.

Quote from Andrew:

"
- we have one or more processes sleeping in down_read(), waiting for access.

- we wake one or more processes up without altering ->activity

- they start to run and they do rwsem_is_locked().  This incorrectly
  returns "false", because the waker process is still crunching away in
  __rwsem_do_wake().

- the waker now alters ->activity, but it was too late.
"

So we need get a spinlock to protect this.  And rwsem_is_locked() should
not block, thus we use spin_trylock_irqsave().

[[email protected]: simplify code]
Reported-by: Brian Behlendorf <[email protected]>
Cc: Ben Woodard <[email protected]>
Cc: David Howells <[email protected]>
Signed-off-by: WANG Cong <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agorwsem-spinlock: remove useless function exports
Amerigo Wang [Tue, 15 Dec 2009 02:00:20 +0000 (18:00 -0800)]
rwsem-spinlock: remove useless function exports

These functions need not to be exported, since no drivers should use them.

__init_rwsem() is an exception, because init_rwsem(), which is a macro,
is used.

Signed-off-by: WANG Cong <[email protected]>
Cc: David Howells <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agokernel.h: remove initialization of bool in printk_once
Joe Perches [Tue, 15 Dec 2009 02:00:19 +0000 (18:00 -0800)]
kernel.h: remove initialization of bool in printk_once

Don't initialize __print_once.  Invert the test to reduce initialized
data.

defconfig before: $size vmlinux
   text    data     bss     dec     hex filename
6976022  679572 1359668 9015262  898fde vmlinux

defconfig after: $size vmlinux
   text    data     bss     dec     hex filename
6976006  679508 1359700 9015214  898fae vmlinux

Signed-off-by: Joe Perches <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoinit/main.c: fix symbol shadows noise
H Hartley Sweeten [Tue, 15 Dec 2009 02:00:18 +0000 (18:00 -0800)]
init/main.c: fix symbol shadows noise

The symbol 'call' is a static symbol used for initcall_debug.  This same
symbol name is used locally by a couple functions and produces the
following sparse warnings:

warning: symbol 'call' shadows an earlier one

Fix this noise by renaming the local symbols.

Signed-off-by: H Hartley Sweeten <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agodrivers/misc: add driver for Texas Instruments DAC7512
Daniel Mack [Tue, 15 Dec 2009 02:00:17 +0000 (18:00 -0800)]
drivers/misc: add driver for Texas Instruments DAC7512

Signed-off-by: Daniel Mack <[email protected]>
Cc: "H Hartley Sweeten" <[email protected]>
Cc: David Brownell <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agogeneric-ipi: cleanup for generic_smp_call_function_interrupt()
Xiao Guangrong [Tue, 15 Dec 2009 02:00:16 +0000 (18:00 -0800)]
generic-ipi: cleanup for generic_smp_call_function_interrupt()

Use smp_processor_id() instead of get_cpu() and put_cpu() in
generic_smp_call_function_interrupt(), It's no need to disable preempt,
because we must call generic_smp_call_function_interrupt() with interrupts
disabled.

Signed-off-by: Xiao Guangrong <[email protected]>
Acked-by: Ingo Molnar <[email protected]>
Cc: Jens Axboe <[email protected]>
Cc: Nick Piggin <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Rusty Russell <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoad525x_dpot: new driver for AD525x digital potentiometers
Michael Hennerich [Tue, 15 Dec 2009 02:00:15 +0000 (18:00 -0800)]
ad525x_dpot: new driver for AD525x digital potentiometers

This driver supports the non-volatile digital potentiometers via I2C:
AD5258, AD5259, AD5251, AD5252, AD5253, AD5254, and AD5255

It provides a sysfs interface to each device for reading/writing which
is documented in Documentation/misc-devices/ad525x_dpot.txt.

Signed-off-by: Michael Hennerich <[email protected]>
Signed-off-by: Chris Verges <[email protected]>
Signed-off-by: Mike Frysinger <[email protected]>
Cc: Jean Delvare <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agodynamic_debug.h/kernel.h: Remove KBUILD_MODNAME from dynamic_pr_debug
Joe Perches [Tue, 15 Dec 2009 02:00:14 +0000 (18:00 -0800)]
dynamic_debug.h/kernel.h: Remove KBUILD_MODNAME from dynamic_pr_debug

If CONFIG_DYNAMIC_DEBUG is enabled and a source file has:

#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/kernel.h>

dynamic_debug.h will duplicate KBUILD_MODNAME
in the output string.

Remove the use of KBUILD_MODNAME from the
output format string generated by dynamic_debug.h

If CONFIG_DYNAMIC_DEBUG is not enabled, no compile-time
check is done to printk/dev_printk arguments.

Add it.

Signed-off-by: Joe Perches <[email protected]>
Cc: Jason Baron <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoWARN_ONCE(): use bool for boolean flag
Cesar Eduardo Barros [Tue, 15 Dec 2009 02:00:13 +0000 (18:00 -0800)]
WARN_ONCE(): use bool for boolean flag

Commit 70867453092297be9afb2249e712a1f960ec0a09 ("printk_once(): use bool
for boolean flag") changed printk_once() to use bool instead of int for
its guard variable.  Do the same change to WARN_ONCE() and WARN_ON_ONCE(),
for the same reasons.

This resulted in a reduction of 1462 bytes on a x86-64 defconfig:

   text    data     bss     dec     hex filename
8101271 1207116  992764 10301151         9d2edf vmlinux.before
8100553 1207148  991988 10299689         9d2929 vmlinux.after

Signed-off-by: Cesar Eduardo Barros <[email protected]>
Cc: Roland Dreier <[email protected]>
Cc: Daniel Walker <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agouml: convert to seq_file/proc_fops
Alexey Dobriyan [Tue, 15 Dec 2009 02:00:11 +0000 (18:00 -0800)]
uml: convert to seq_file/proc_fops

Convert code away from ->read_proc/->write_proc interfaces.  Switch to
proc_create()/proc_create_data() which make addition of proc entries
reliable wrt NULL ->proc_fops, NULL ->data and so on.

Problem with ->read_proc et al is described here commit
786d7e1612f0b0adb6046f19b906609e4fe8b1ba "Fix rmmod/read/write races in
/proc entries"

Signed-off-by: Alexey Dobriyan <[email protected]>
Cc: Jeff Dike <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agofloppy: Add an extra bound check on ioctl arguments
Arjan van de Ven [Tue, 15 Dec 2009 02:00:11 +0000 (18:00 -0800)]
floppy: Add an extra bound check on ioctl arguments

gcc is not convinced that the floppy.c ioctl has sufficient bound checks:

In function `copy_from_user',
    inlined from `fd_copyin' at drivers/block/floppy.c:3080,
    inlined from `fd_ioctl' at drivers/block/floppy.c:3503:
    arch/x86/include/asm/uaccess_32.h:211:
warning: call to `copy_from_user_overflow' declared with attribute
warning: copy_from_user buffer size is not provably correct

And frankly, as a human I have a hard time proving the same more or less
(the size comes from the ioctl argument.  humpf.  maybe.  the code isn't
very nice)

This patch adds an explicit check to make 100% sure it's safe, better than
finding out later that there indeed was a gap.

[[email protected]: add WARN_ON()]
Signed-off-by: Arjan van de Ven <[email protected]>
Acked-by: Ingo Molnar <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agodrivers/cpuidle: Move dereference after NULL test
Julia Lawall [Tue, 15 Dec 2009 02:00:09 +0000 (18:00 -0800)]
drivers/cpuidle: Move dereference after NULL test

It does not seem possible that ldev can be NULL, so drop the unnecessary
test.  If ldev can somehow be NULL, then the initialization of last_idx
should be moved below the test.

A simplified version of the semantic match that detects this problem is as
follows (http://coccinelle.lip6.fr/):

// <smpl>
@match exists@
expression x, E;
identifier fld;
@@

* x->fld
  ... when != \(x = E\|&x\)
* x == NULL
// </smpl>

Signed-off-by: Julia Lawall <[email protected]>
Acked-by: Arjan van de Ven <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Venkatesh Pallipadi <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoconst: constify remaining dev_pm_ops
Alexey Dobriyan [Tue, 15 Dec 2009 02:00:08 +0000 (18:00 -0800)]
const: constify remaining dev_pm_ops

Signed-off-by: Alexey Dobriyan <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoalpha: convert srm code to seq_file
Alexey Dobriyan [Tue, 15 Dec 2009 02:00:06 +0000 (18:00 -0800)]
alpha: convert srm code to seq_file

Convert code away from ->read_proc/->write_proc interfaces.  Switch to
proc_create()/proc_create_data() which make addition of proc entries
reliable wrt NULL ->proc_fops, NULL ->data and so on.

Problem with ->read_proc et al is described here commit
786d7e1612f0b0adb6046f19b906609e4fe8b1ba "Fix rmmod/read/write races in
/proc entries"

Signed-off-by: Alexey Dobriyan <[email protected]>
Cc: Richard Henderson <[email protected]>
Cc: Ivan Kokshaysky <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoprocfs: allow threads to rename siblings via /proc/pid/tasks/tid/comm
john stultz [Tue, 15 Dec 2009 02:00:05 +0000 (18:00 -0800)]
procfs: allow threads to rename siblings via /proc/pid/tasks/tid/comm

Setting a thread's comm to be something unique is a very useful ability
and is helpful for debugging complicated threaded applications.  However
currently the only way to set a thread name is for the thread to name
itself via the PR_SET_NAME prctl.

However, there may be situations where it would be advantageous for a
thread dispatcher to be naming the threads its managing, rather then
having the threads self-describe themselves.  This sort of behavior is
available on other systems via the pthread_setname_np() interface.

This patch exports a task's comm via proc/pid/comm and
proc/pid/task/tid/comm interfaces, and allows thread siblings to write to
these values.

[[email protected]: cleanups]
Signed-off-by: John Stultz <[email protected]>
Cc: Andi Kleen <[email protected]>
Cc: Arjan van de Ven <[email protected]>
Cc: Mike Fulton <[email protected]>
Cc: Sean Foley <[email protected]>
Cc: Darren Hart <[email protected]>
Cc: KOSAKI Motohiro <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoprocfs: use proper units for noMMU statm
Steven J. Magnani [Tue, 15 Dec 2009 02:00:04 +0000 (18:00 -0800)]
procfs: use proper units for noMMU statm

On no-MMU systems, sizes reported in /proc/n/statm have units of bytes.
Per Documentation/filesystems/proc.txt, these values should be in pages.

Signed-off-by: Steven J. Magnani <[email protected]>
Cc: Greg Ungerer <[email protected]>
Cc: David Howells <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agonommu: fix malloc performance by adding uninitialized flag
Jie Zhang [Tue, 15 Dec 2009 02:00:02 +0000 (18:00 -0800)]
nommu: fix malloc performance by adding uninitialized flag

The NOMMU code currently clears all anonymous mmapped memory.  While this
is what we want in the default case, all memory allocation from userspace
under NOMMU has to go through this interface, including malloc() which is
allowed to return uninitialized memory.  This can easily be a significant
performance penalty.  So for constrained embedded systems were security is
irrelevant, allow people to avoid clearing memory unnecessarily.

This also alters the ELF-FDPIC binfmt such that it obtains uninitialised
memory for the brk and stack region.

Signed-off-by: Jie Zhang <[email protected]>
Signed-off-by: Robin Getz <[email protected]>
Signed-off-by: Mike Frysinger <[email protected]>
Signed-off-by: David Howells <[email protected]>
Acked-by: Paul Mundt <[email protected]>
Acked-by: Greg Ungerer <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agomm hugetlb: add hugepage support to pagemap
Naoya Horiguchi [Tue, 15 Dec 2009 02:00:01 +0000 (18:00 -0800)]
mm hugetlb: add hugepage support to pagemap

This patch enables extraction of the pfn of a hugepage from
/proc/pid/pagemap in an architecture independent manner.

Details
-------
My test program (leak_pagemap) works as follows:
 - creat() and mmap() a file on hugetlbfs (file size is 200MB == 100 hugepages,)
 - read()/write() something on it,
 - call page-types with option -p,
 - munmap() and unlink() the file on hugetlbfs

Without my patches
------------------
$ ./leak_pagemap
             flags page-count       MB  symbolic-flags                     long-symbolic-flags
0x0000000000000000          1        0  __________________________________
0x0000000000000804          1        0  __R________M______________________ referenced,mmap
0x000000000000086c         81        0  __RU_lA____M______________________ referenced,uptodate,lru,active,mmap
0x0000000000005808          5        0  ___U_______Ma_b___________________ uptodate,mmap,anonymous,swapbacked
0x0000000000005868         12        0  ___U_lA____Ma_b___________________ uptodate,lru,active,mmap,anonymous,swapbacked
0x000000000000586c          1        0  __RU_lA____Ma_b___________________ referenced,uptodate,lru,active,mmap,anonymous,swapbacked
             total        101        0

The output of page-types don't show any hugepage.

With my patches
---------------
$ ./leak_pagemap
             flags page-count       MB  symbolic-flags                     long-symbolic-flags
0x0000000000000000          1        0  __________________________________
0x0000000000030000      51100      199  ________________TG________________ compound_tail,huge
0x0000000000028018        100        0  ___UD__________H_G________________ uptodate,dirty,compound_head,huge
0x0000000000000804          1        0  __R________M______________________ referenced,mmap
0x000000000000080c          1        0  __RU_______M______________________ referenced,uptodate,mmap
0x000000000000086c         80        0  __RU_lA____M______________________ referenced,uptodate,lru,active,mmap
0x0000000000005808          4        0  ___U_______Ma_b___________________ uptodate,mmap,anonymous,swapbacked
0x0000000000005868         12        0  ___U_lA____Ma_b___________________ uptodate,lru,active,mmap,anonymous,swapbacked
0x000000000000586c          1        0  __RU_lA____Ma_b___________________ referenced,uptodate,lru,active,mmap,anonymous,swapbacked
             total      51300      200

The output of page-types shows 51200 pages contributing to hugepages,
containing 100 head pages and 51100 tail pages as expected.

[[email protected]: build fix]
Signed-off-by: Naoya Horiguchi <[email protected]>
Cc: Andi Kleen <[email protected]>
Cc: Wu Fengguang <[email protected]>
Cc: Hugh Dickins <[email protected]>
Cc: Mel Gorman <[email protected]>
Cc: Lee Schermerhorn <[email protected]>
Cc: Andy Whitcroft <[email protected]>
Cc: David Rientjes <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agomm: hugetlb: fix hugepage memory leak in walk_page_range()
Naoya Horiguchi [Tue, 15 Dec 2009 01:59:59 +0000 (17:59 -0800)]
mm: hugetlb: fix hugepage memory leak in walk_page_range()

Most callers of pmd_none_or_clear_bad() check whether the target page is
in a hugepage or not, but walk_page_range() do not check it.  So if we
read /proc/pid/pagemap for the hugepage on x86 machine, the hugepage
memory is leaked as shown below.  This patch fixes it.

Details
=======
My test program (leak_pagemap) works as follows:
 - creat() and mmap() a file on hugetlbfs (file size is 200MB == 100 hugepages,)
 - read()/write() something on it,
 - call page-types with option -p (walk around the page tables),
 - munmap() and unlink() the file on hugetlbfs

Without my patches
------------------
$ cat /proc/meminfo |grep "HugePage"
HugePages_Total:    1000
HugePages_Free:     1000
HugePages_Rsvd:        0
HugePages_Surp:        0
$ ./leak_pagemap
[snip output]
$ cat /proc/meminfo |grep "HugePage"
HugePages_Total:    1000
HugePages_Free:      900
HugePages_Rsvd:        0
HugePages_Surp:        0
$ ls /hugetlbfs/
$

100 hugepages are accounted as used while there is no file on hugetlbfs.

With my patches
---------------
$ cat /proc/meminfo |grep "HugePage"
HugePages_Total:    1000
HugePages_Free:     1000
HugePages_Rsvd:        0
HugePages_Surp:        0
$ ./leak_pagemap
[snip output]
$ cat /proc/meminfo |grep "HugePage"
HugePages_Total:    1000
HugePages_Free:     1000
HugePages_Rsvd:        0
HugePages_Surp:        0
$ ls /hugetlbfs
$

No memory leaks.

Signed-off-by: Naoya Horiguchi <[email protected]>
Cc: Andi Kleen <[email protected]>
Cc: Wu Fengguang <[email protected]>
Cc: Hugh Dickins <[email protected]>
Cc: Mel Gorman <[email protected]>
Cc: Lee Schermerhorn <[email protected]>
Cc: Andy Whitcroft <[email protected]>
Cc: David Rientjes <[email protected]>
Cc: <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agomm: hugetlb: fix hugepage memory leak in mincore()
Naoya Horiguchi [Tue, 15 Dec 2009 01:59:58 +0000 (17:59 -0800)]
mm: hugetlb: fix hugepage memory leak in mincore()

Most callers of pmd_none_or_clear_bad() check whether the target page is
in a hugepage or not, but mincore() and walk_page_range() do not check it.
 So if we use mincore() on a hugepage on x86 machine, the hugepage memory
is leaked as shown below.  This patch fixes it by extending mincore()
system call to support hugepages.

Details
=======
My test program (leak_mincore) works as follows:
 - creat() and mmap() a file on hugetlbfs (file size is 200MB == 100 hugepages,)
 - read()/write() something on it,
 - call mincore() for first ten pages and printf() the values of *vec
 - munmap() and unlink() the file on hugetlbfs

Without my patch
----------------
$ cat /proc/meminfo| grep "HugePage"
HugePages_Total:    1000
HugePages_Free:     1000
HugePages_Rsvd:        0
HugePages_Surp:        0
$ ./leak_mincore
vec[0] 0
vec[1] 0
vec[2] 0
vec[3] 0
vec[4] 0
vec[5] 0
vec[6] 0
vec[7] 0
vec[8] 0
vec[9] 0
$ cat /proc/meminfo |grep "HugePage"
HugePages_Total:    1000
HugePages_Free:      999
HugePages_Rsvd:        0
HugePages_Surp:        0
$ ls /hugetlbfs/
$

Return values in *vec from mincore() are set to 0, while the hugepage
should be in memory, and 1 hugepage is still accounted as used while
there is no file on hugetlbfs.

With my patch
-------------
$ cat /proc/meminfo| grep "HugePage"
HugePages_Total:    1000
HugePages_Free:     1000
HugePages_Rsvd:        0
HugePages_Surp:        0
$ ./leak_mincore
vec[0] 1
vec[1] 1
vec[2] 1
vec[3] 1
vec[4] 1
vec[5] 1
vec[6] 1
vec[7] 1
vec[8] 1
vec[9] 1
$ cat /proc/meminfo |grep "HugePage"
HugePages_Total:    1000
HugePages_Free:     1000
HugePages_Rsvd:        0
HugePages_Surp:        0
$ ls /hugetlbfs/
$

Return value in *vec set to 1 and no memory leaks.

[[email protected]: cleanup]
[[email protected]: build fix]
Signed-off-by: Naoya Horiguchi <[email protected]>
Cc: Andi Kleen <[email protected]>
Cc: Wu Fengguang <[email protected]>
Cc: Hugh Dickins <[email protected]>
Cc: Mel Gorman <[email protected]>
Cc: Lee Schermerhorn <[email protected]>
Cc: Andy Whitcroft <[email protected]>
Cc: David Rientjes <[email protected]>
Cc: <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agohugetlb: abort a hugepage pool resize if a signal is pending
Mel Gorman [Tue, 15 Dec 2009 01:59:56 +0000 (17:59 -0800)]
hugetlb: abort a hugepage pool resize if a signal is pending

If a user asks for a hugepage pool resize but specified a large number,
the machine can begin trashing.  In response, they might hit ctrl-c but
signals are ignored and the pool resize continues until it fails an
allocation.  This can take a considerable amount of time so this patch
aborts a pool resize if a signal is pending.

Suggested by Dave Hansen.

Signed-off-by: Mel Gorman <[email protected]>
Cc: Dave Hansen <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agomlock: replace stale comments in munlock_vma_page()
Lee Schermerhorn [Tue, 15 Dec 2009 01:59:55 +0000 (17:59 -0800)]
mlock: replace stale comments in munlock_vma_page()

Cleanup stale comments on munlock_vma_page().

Signed-off-by: Lee Schermerhorn <[email protected]>
Acked-by: Hugh Dickins <[email protected]>
Cc: KOSAKI Motohiro <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agomm: remove unevictable_migrate_page function
Lee Schermerhorn [Tue, 15 Dec 2009 01:59:54 +0000 (17:59 -0800)]
mm: remove unevictable_migrate_page function

unevictable_migrate_page() in mm/internal.h is a relic of the since
removed UNEVICTABLE_LRU Kconfig option.  This patch removes the function
and open codes the test in migrate_page_copy().

Signed-off-by: Lee Schermerhorn <[email protected]>
Reviewed-by: Christoph Lameter <[email protected]>
Acked-by: Hugh Dickins <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agohugetlb: acquire the i_mmap_lock before walking the prio_tree to unmap a page
Mel Gorman [Tue, 15 Dec 2009 01:59:53 +0000 (17:59 -0800)]
hugetlb: acquire the i_mmap_lock before walking the prio_tree to unmap a page

When the owner of a mapping fails COW because a child process is holding a
reference, the children VMAs are walked and the page is unmapped.  The
i_mmap_lock is taken for the unmapping of the page but not the walking of
the prio_tree.  In theory, that tree could be changing if the lock is not
held.  This patch takes the i_mmap_lock properly for the duration of the
prio_tree walk.

[[email protected]: Spotted the problem in the first place]
Signed-off-by: Mel Gorman <[email protected]>
Acked-by: Hugh Dickins <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years ago'sysctl_max_map_count' should be non-negative
Amerigo Wang [Tue, 15 Dec 2009 01:59:52 +0000 (17:59 -0800)]
'sysctl_max_map_count' should be non-negative

Jan Engelhardt reported we have this problem:

setting max_map_count to a value large enough results in programs dying at
first try.  This is on 2.6.31.6:

15:59 borg:/proc/sys/vm # echo $[1<<31-1] >max_map_count
15:59 borg:/proc/sys/vm # cat max_map_count
1073741824
15:59 borg:/proc/sys/vm # echo $[1<<31] >max_map_count
15:59 borg:/proc/sys/vm # cat max_map_count
Killed

This is because we have a chance to make 'max_map_count' negative.  but
it's meaningless.  Make it only accept non-negative values.

Reported-by: Jan Engelhardt <[email protected]>
Signed-off-by: WANG Cong <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: James Morris <[email protected]>
Cc: Alexey Dobriyan <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoinclude/linux/mm.h: remove unneeded ifdef
Huang Shijie [Tue, 15 Dec 2009 01:59:51 +0000 (17:59 -0800)]
include/linux/mm.h: remove unneeded ifdef

The check code for CONFIG_SWAP is redundant, because there is a
non-CONFIG_SWAP version for PageSwapCache() which just returns 0.

Signed-off-by: Huang Shijie <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agomm: uncached vma support with writenotify
Magnus Damm [Tue, 15 Dec 2009 01:59:49 +0000 (17:59 -0800)]
mm: uncached vma support with writenotify

Modify the generic mmap() code to keep the cache attribute in
vma->vm_page_prot regardless if writenotify is enabled or not.  Without
this patch the cache configuration selected by f_op->mmap() is overwritten
if writenotify is enabled, making it impossible to keep the vma uncached.

Needed by drivers such as drivers/video/sh_mobile_lcdcfb.c which uses
deferred io together with uncached memory.

Signed-off-by: Magnus Damm <[email protected]>
Cc: Nick Piggin <[email protected]>
Cc: Hugh Dickins <[email protected]>
Cc: Paul Mundt <[email protected]>
Cc: Jaya Kumar <[email protected]>
Cc: Arnd Bergmann <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agovmscan: simplify code
Huang Shijie [Tue, 15 Dec 2009 01:59:48 +0000 (17:59 -0800)]
vmscan: simplify code

Simplify the code for shrink_inactive_list().

Signed-off-by: Huang Shijie <[email protected]>
Reviewed-by: KOSAKI Motohiro <[email protected]>
Reviewed-by: Wu Fengguang <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agovmscan: do not evict inactive pages when skipping an active list scan
Rik van Riel [Tue, 15 Dec 2009 01:59:48 +0000 (17:59 -0800)]
vmscan: do not evict inactive pages when skipping an active list scan

In AIM7 runs, recent kernels start swapping out anonymous pages well
before they should.  This is due to shrink_list falling through to
shrink_inactive_list if !inactive_anon_is_low(zone, sc), when all we
really wanted to do is pre-age some anonymous pages to give them extra
time to be referenced while on the inactive list.

The obvious fix is to make sure that shrink_list does not fall through to
scanning/reclaiming inactive pages when we called it to scan one of the
active lists.

This change should be safe because the loop in shrink_zone ensures that we
will still shrink the anon and file inactive lists whenever we should.

[[email protected]: inactive_file_is_low() should be inactive_anon_is_low()]
Reported-by: Larry Woodman <[email protected]>
Signed-off-by: Rik van Riel <[email protected]>
Acked-by: Johannes Weiner <[email protected]>
Cc: Tomasz Chmielewski <[email protected]>
Signed-off-by: KOSAKI Motohiro <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agomm/bootmem.c: properly __init-annotate helper functions
Jan Beulich [Tue, 15 Dec 2009 01:59:46 +0000 (17:59 -0800)]
mm/bootmem.c: properly __init-annotate helper functions

Signed-off-by: Jan Beulich <[email protected]>
Cc: Johannes Weiner <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agomm: slab-allocate memory section nodemask for large systems
David Rientjes [Tue, 15 Dec 2009 01:59:46 +0000 (17:59 -0800)]
mm: slab-allocate memory section nodemask for large systems

Nodemasks should not be allocated on the stack for large systems (when it
is larger than 256 bytes) since there is a threat of overflow.

This patch causes the unregister_mem_sect_under_nodes() nodemask to be
allocated on the stack for smaller systems and be allocated by slab for
larger systems.

GFP_KERNEL is used since remove_memory_block() can block.

Cc: Gary Hade <[email protected]>
Cc: Badari Pulavarty <[email protected]>
Cc: Alex Chiang <[email protected]>
Signed-off-by: David Rientjes <[email protected]>
Cc: Greg Kroah-Hartman <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agomm: simplify try_to_unmap_one()
KOSAKI Motohiro [Tue, 15 Dec 2009 01:59:45 +0000 (17:59 -0800)]
mm: simplify try_to_unmap_one()

SWAP_MLOCK mean "We marked the page as PG_MLOCK, please move it to
unevictable-lru". So, following code is easy confusable.

        if (vma->vm_flags & VM_LOCKED) {
                ret = SWAP_MLOCK;
                goto out_unmap;
        }

Plus, if the VMA doesn't have VM_LOCKED, We don't need to check
the needed of calling mlock_vma_page().

Also, add some commentary to try_to_unmap_one().

Acked-by: Hugh Dickins <[email protected]>
Signed-off-by: KOSAKI Motohiro <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agomm: fix section mismatch in memory_hotplug.c
Rakib Mullick [Tue, 15 Dec 2009 01:59:44 +0000 (17:59 -0800)]
mm: fix section mismatch in memory_hotplug.c

__free_pages_bootmem() is a __meminit function - which has been called
from put_pages_bootmem thus causes a section mismatch warning.

 We were warned by the following warning:

  LD      mm/built-in.o
WARNING: mm/built-in.o(.text+0x26b22): Section mismatch in reference
from the function put_page_bootmem() to the function
.meminit.text:__free_pages_bootmem()
The function put_page_bootmem() references
the function __meminit __free_pages_bootmem().
This is often because put_page_bootmem lacks a __meminit
annotation or the annotation of __free_pages_bootmem is wrong.

Signed-off-by: Rakib Mullick <[email protected]>
Cc: Yasunori Goto <[email protected]>
Cc: Badari Pulavarty <[email protected]>
Cc: Johannes Weiner <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agohugetlb: prevent deadlock in __unmap_hugepage_range() when alloc_huge_page() fails
Larry Woodman [Tue, 15 Dec 2009 01:59:37 +0000 (17:59 -0800)]
hugetlb: prevent deadlock in __unmap_hugepage_range() when alloc_huge_page() fails

hugetlb_fault() takes the mm->page_table_lock spinlock then calls
hugetlb_cow().  If the alloc_huge_page() in hugetlb_cow() fails due to an
insufficient huge page pool it calls unmap_ref_private() with the
mm->page_table_lock held.  unmap_ref_private() then calls
unmap_hugepage_range() which tries to acquire the mm->page_table_lock.

[<ffffffff810928c3>] print_circular_bug_tail+0x80/0x9f
 [<ffffffff8109280b>] ? check_noncircular+0xb0/0xe8
 [<ffffffff810935e0>] __lock_acquire+0x956/0xc0e
 [<ffffffff81093986>] lock_acquire+0xee/0x12e
 [<ffffffff8111a7a6>] ? unmap_hugepage_range+0x3e/0x84
 [<ffffffff8111a7a6>] ? unmap_hugepage_range+0x3e/0x84
 [<ffffffff814c348d>] _spin_lock+0x40/0x89
 [<ffffffff8111a7a6>] ? unmap_hugepage_range+0x3e/0x84
 [<ffffffff8111afee>] ? alloc_huge_page+0x218/0x318
 [<ffffffff8111a7a6>] unmap_hugepage_range+0x3e/0x84
 [<ffffffff8111b2d0>] hugetlb_cow+0x1e2/0x3f4
 [<ffffffff8111b935>] ? hugetlb_fault+0x453/0x4f6
 [<ffffffff8111b962>] hugetlb_fault+0x480/0x4f6
 [<ffffffff8111baee>] follow_hugetlb_page+0x116/0x2d9
 [<ffffffff814c31a7>] ? _spin_unlock_irq+0x3a/0x5c
 [<ffffffff81107b4d>] __get_user_pages+0x2a3/0x427
 [<ffffffff81107d0f>] get_user_pages+0x3e/0x54
 [<ffffffff81040b8b>] get_user_pages_fast+0x170/0x1b5
 [<ffffffff81160352>] dio_get_page+0x64/0x14a
 [<ffffffff8116112a>] __blockdev_direct_IO+0x4b7/0xb31
 [<ffffffff8115ef91>] blkdev_direct_IO+0x58/0x6e
 [<ffffffff8115e0a4>] ? blkdev_get_blocks+0x0/0xb8
 [<ffffffff810ed2c5>] generic_file_aio_read+0xdd/0x528
 [<ffffffff81219da3>] ? avc_has_perm+0x66/0x8c
 [<ffffffff81132842>] do_sync_read+0xf5/0x146
 [<ffffffff8107da00>] ? autoremove_wake_function+0x0/0x5a
 [<ffffffff81211857>] ? security_file_permission+0x24/0x3a
 [<ffffffff81132fd8>] vfs_read+0xb5/0x126
 [<ffffffff81133f6b>] ? fget_light+0x5e/0xf8
 [<ffffffff81133131>] sys_read+0x54/0x8c
 [<ffffffff81011e42>] system_call_fastpath+0x16/0x1b

This can be fixed by dropping the mm->page_table_lock around the call to
unmap_ref_private() if alloc_huge_page() fails, its dropped right below in
the normal path anyway.  However, earlier in the that function, it's also
possible to call into the page allocator with the same spinlock held.

What this patch does is drop the spinlock before the page allocator is
potentially entered.  The check for page allocation failure can be made
without the page_table_lock as well as the copy of the huge page.  Even if
the PTE changed while the spinlock was held, the consequence is that a
huge page is copied unnecessarily.  This resolves both the double taking
of the lock and sleeping with the spinlock held.

[[email protected]: Cover also the case where process can sleep with spinlock]
Signed-off-by: Larry Woodman <[email protected]>
Signed-off-by: Mel Gorman <[email protected]>
Acked-by: Adam Litke <[email protected]>
Cc: Andy Whitcroft <[email protected]>
Cc: Lee Schermerhorn <[email protected]>
Cc: Hugh Dickins <[email protected]>
Cc: David Gibson <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agomm: memory_hotplug: make offline_pages() static
Andrew Morton [Tue, 15 Dec 2009 01:59:35 +0000 (17:59 -0800)]
mm: memory_hotplug: make offline_pages() static

It has no references outside memory_hotplug.c.

Cc: "Rafael J. Wysocki" <[email protected]>
Cc: Andi Kleen <[email protected]>
Cc: Gerald Schaefer <[email protected]>
Cc: KOSAKI Motohiro <[email protected]>
Cc: Yasunori Goto <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoksm: remove unswappable max_kernel_pages
Hugh Dickins [Tue, 15 Dec 2009 01:59:34 +0000 (17:59 -0800)]
ksm: remove unswappable max_kernel_pages

Now that ksm pages are swappable, and the known holes plugged, remove
mention of unswappable kernel pages from KSM documentation and comments.

Remove the totalram_pages/4 initialization of max_kernel_pages.  In fact,
remove max_kernel_pages altogether - we can reinstate it if removal turns
out to break someone's script; but if we later want to limit KSM's memory
usage, limiting the stable nodes would not be an effective approach.

Signed-off-by: Hugh Dickins <[email protected]>
Cc: Izik Eidus <[email protected]>
Cc: Andrea Arcangeli <[email protected]>
Cc: Chris Wright <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoksm: memory hotremove migration only
Hugh Dickins [Tue, 15 Dec 2009 01:59:33 +0000 (17:59 -0800)]
ksm: memory hotremove migration only

The previous patch enables page migration of ksm pages, but that soon gets
into trouble: not surprising, since we're using the ksm page lock to lock
operations on its stable_node, but page migration switches the page whose
lock is to be used for that.  Another layer of locking would fix it, but
do we need that yet?

Do we actually need page migration of ksm pages?  Yes, memory hotremove
needs to offline sections of memory: and since we stopped allocating ksm
pages with GFP_HIGHUSER, they will tend to be GFP_HIGHUSER_MOVABLE
candidates for migration.

But KSM is currently unconscious of NUMA issues, happily merging pages
from different NUMA nodes: at present the rule must be, not to use
MADV_MERGEABLE where you care about NUMA.  So no, NUMA page migration of
ksm pages does not make sense yet.

So, to complete support for ksm swapping we need to make hotremove safe.
ksm_memory_callback() take ksm_thread_mutex when MEM_GOING_OFFLINE and
release it when MEM_OFFLINE or MEM_CANCEL_OFFLINE.  But if mapped pages
are freed before migration reaches them, stable_nodes may be left still
pointing to struct pages which have been removed from the system: the
stable_node needs to identify a page by pfn rather than page pointer, then
it can safely prune them when MEM_OFFLINE.

And make NUMA migration skip PageKsm pages where it skips PageReserved.
But it's only when we reach unmap_and_move() that the page lock is taken
and we can be sure that raised pagecount has prevented a PageAnon from
being upgraded: so add offlining arg to migrate_pages(), to migrate ksm
page when offlining (has sufficient locking) but reject it otherwise.

Signed-off-by: Hugh Dickins <[email protected]>
Cc: Izik Eidus <[email protected]>
Cc: Andrea Arcangeli <[email protected]>
Cc: Chris Wright <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoksm: rmap_walk to remove_migation_ptes
Hugh Dickins [Tue, 15 Dec 2009 01:59:31 +0000 (17:59 -0800)]
ksm: rmap_walk to remove_migation_ptes

A side-effect of making ksm pages swappable is that they have to be placed
on the LRUs: which then exposes them to isolate_lru_page() and hence to
page migration.

Add rmap_walk() for remove_migration_ptes() to use: rmap_walk_anon() and
rmap_walk_file() in rmap.c, but rmap_walk_ksm() in ksm.c.  Perhaps some
consolidation with existing code is possible, but don't attempt that yet
(try_to_unmap needs to handle nonlinears, but migration pte removal does
not).

rmap_walk() is sadly less general than it appears: rmap_walk_anon(), like
remove_anon_migration_ptes() which it replaces, avoids calling
page_lock_anon_vma(), because that includes a page_mapped() test which
fails when all migration ptes are in place.  That was valid when NUMA page
migration was introduced (holding mmap_sem provided the missing guarantee
that anon_vma's slab had not already been destroyed), but I believe not
valid in the memory hotremove case added since.

For now do the same as before, and consider the best way to fix that
unlikely race later on.  When fixed, we can probably use rmap_walk() on
hwpoisoned ksm pages too: for now, they remain among hwpoison's various
exceptions (its PageKsm test comes before the page is locked, but its
page_lock_anon_vma fails safely if an anon gets upgraded).

Signed-off-by: Hugh Dickins <[email protected]>
Cc: Izik Eidus <[email protected]>
Cc: Andrea Arcangeli <[email protected]>
Cc: Chris Wright <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoksm: mem cgroup charge swapin copy
Hugh Dickins [Tue, 15 Dec 2009 01:59:30 +0000 (17:59 -0800)]
ksm: mem cgroup charge swapin copy

But ksm swapping does require one small change in mem cgroup handling.
When do_swap_page()'s call to ksm_might_need_to_copy() does indeed
substitute a duplicate page to accommodate a different anon_vma (or a the
!PageSwapCache check in mem_cgroup_try_charge_swapin().

That was returning success without charging, on the assumption that
pte_same() would fail after, which is not the case here.  Originally I
proposed that success, so that an unshrinkable mem cgroup at its limit
would not fail unnecessarily; but that's a minor point, and there are
plenty of other places where we may fail an overallocation which might
later prove unnecessary.  So just go ahead and do what all the other
exceptions do: proceed to charge current mm.

Signed-off-by: Hugh Dickins <[email protected]>
Cc: Izik Eidus <[email protected]>
Cc: Andrea Arcangeli <[email protected]>
Cc: Chris Wright <[email protected]>
Acked-by: KAMEZAWA Hiroyuki <[email protected]>
Acked-by: Balbir Singh <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoksm: share anon page without allocating
Hugh Dickins [Tue, 15 Dec 2009 01:59:29 +0000 (17:59 -0800)]
ksm: share anon page without allocating

When ksm pages were unswappable, it made no sense to include them in mem
cgroup accounting; but now that they are swappable (although I see no
strict logical connection) the principle of least surprise implies that
they should be accounted (with the usual dissatisfaction, that a shared
page is accounted to only one of the cgroups using it).

This patch was intended to add mem cgroup accounting where necessary; but
turned inside out, it now avoids allocating a ksm page, instead upgrading
an anon page to ksm - which brings its existing mem cgroup accounting with
it.  Thus mem cgroups don't appear in the patch at all.

This upgrade from PageAnon to PageKsm takes place under page lock (via a
somewhat hacky NULL kpage interface), and audit showed only one place
which needed to cope with the race - page_referenced() is sometimes used
without page lock, so page_lock_anon_vma() needs an ACCESS_ONCE() to be
sure of getting anon_vma and flags together (no problem if the page goes
ksm an instant after, the integrity of that anon_vma list is unaffected).

Signed-off-by: Hugh Dickins <[email protected]>
Cc: Izik Eidus <[email protected]>
Cc: Andrea Arcangeli <[email protected]>
Cc: Chris Wright <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoksm: take keyhole reference to page
Hugh Dickins [Tue, 15 Dec 2009 01:59:27 +0000 (17:59 -0800)]
ksm: take keyhole reference to page

There's a lamentable flaw in KSM swapping: the stable_node holds a
reference to the ksm page, so the page to be freed cannot actually be
freed until ksmd works its way around to removing the last rmap_item from
its stable_node.  Which in some configurations may take minutes: not quite
responsive enough for memory reclaim.  And we don't want to twist KSM and
its locking more tightly into the rest of mm.  What a pity.

But although the stable_node needs to hold a pointer to the ksm page, does
it actually need to raise the reference count of that page?

No.  It would need to do so if struct pages were ordinary kmalloc'ed
objects; but they are more stable than that, and reused in particular ways
according to particular rules.

Access to stable_node from its pointer in struct page is no problem, so
long as we never free a stable_node before the ksm page itself has been
freed.  Access to struct page from its pointer in stable_node: reintroduce
get_ksm_page(), and let that peep out through its keyhole (the stable_node
pointer to ksm page), to see if that struct page still holds the right key
to open it (the ksm page mapping pointer back to this stable_node).

This relies upon the established way in which free_hot_cold_page() sets an
anon (including ksm) page->mapping to NULL; and relies upon no other user
of a struct page to put something which looks like the original
stable_node pointer (with two low bits also set) into page->mapping.  It
also needs get_page_unless_zero() technique pioneered by speculative
pagecache; and uses rcu_read_lock() to keep the guarantees that gives.

There are several drivers which put pointers of their own into page->
mapping; but none of those could coincide with our stable_node pointers,
since KSM won't free a stable_node until it sees that the page has gone.

The only problem case found is the pagetable spinlock USE_SPLIT_PTLOCKS
places in struct page (my own abuse): to accommodate GENERIC_LOCKBREAK's
break_lock on 32-bit, that spans both page->private and page->mapping.
Since break_lock is only 0 or 1, again no confusion for get_ksm_page().

But what of DEBUG_SPINLOCK on 64-bit bigendian?  When owner_cpu is 3
(matching PageKsm low bits), it might see 0xdead4ead00000003 in page->
mapping, which might coincide?  We could get around that by...  but a
better answer is to suppress USE_SPLIT_PTLOCKS when DEBUG_SPINLOCK or
DEBUG_LOCK_ALLOC, to stop bloating sizeof(struct page) in their case -
already proposed in an earlier mm/Kconfig patch.

Signed-off-by: Hugh Dickins <[email protected]>
Cc: Izik Eidus <[email protected]>
Cc: Andrea Arcangeli <[email protected]>
Cc: Chris Wright <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoksm: hold anon_vma in rmap_item
Hugh Dickins [Tue, 15 Dec 2009 01:59:25 +0000 (17:59 -0800)]
ksm: hold anon_vma in rmap_item

For full functionality, page_referenced_one() and try_to_unmap_one() need
to know the vma: to pass vma down to arch-dependent flushes, or to observe
VM_LOCKED or VM_EXEC.  But KSM keeps no record of vma: nor can it, since
vmas get split and merged without its knowledge.

Instead, note page's anon_vma in its rmap_item when adding to stable tree:
all the vmas which might map that page are listed by its anon_vma.

page_referenced_ksm() and try_to_unmap_ksm() then traverse the anon_vma,
first to find the probable vma, that which matches rmap_item's mm; but if
that is not enough to locate all instances, traverse again to try the
others.  This catches those occasions when fork has duplicated a pte of a
ksm page, but ksmd has not yet come around to assign it an rmap_item.

But each rmap_item in the stable tree which refers to an anon_vma needs to
take a reference to it.  Andrea's anon_vma design cleverly avoided a
reference count (an anon_vma was free when its list of vmas was empty),
but KSM now needs to add that.  Is a 32-bit count sufficient?  I believe
so - the anon_vma is only free when both count is 0 and list is empty.

Signed-off-by: Hugh Dickins <[email protected]>
Cc: Izik Eidus <[email protected]>
Cc: Andrea Arcangeli <[email protected]>
Cc: Chris Wright <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoksm: let shared pages be swappable
Hugh Dickins [Tue, 15 Dec 2009 01:59:24 +0000 (17:59 -0800)]
ksm: let shared pages be swappable

Initial implementation for swapping out KSM's shared pages: add
page_referenced_ksm() and try_to_unmap_ksm(), which rmap.c calls when
faced with a PageKsm page.

Most of what's needed can be got from the rmap_items listed from the
stable_node of the ksm page, without discovering the actual vma: so in
this patch just fake up a struct vma for page_referenced_one() or
try_to_unmap_one(), then refine that in the next patch.

Add VM_NONLINEAR to ksm_madvise()'s list of exclusions: it has always been
implicit there (being only set with VM_SHARED, already excluded), but
let's make it explicit, to help justify the lack of nonlinear unmap.

Rely on the page lock to protect against concurrent modifications to that
page's node of the stable tree.

The awkward part is not swapout but swapin: do_swap_page() and
page_add_anon_rmap() now have to allow for new possibilities - perhaps a
ksm page still in swapcache, perhaps a swapcache page associated with one
location in one anon_vma now needed for another location or anon_vma.
(And the vma might even be no longer VM_MERGEABLE when that happens.)

ksm_might_need_to_copy() checks for that case, and supplies a duplicate
page when necessary, simply leaving it to a subsequent pass of ksmd to
rediscover the identity and merge them back into one ksm page.
Disappointingly primitive: but the alternative would have to accumulate
unswappable info about the swapped out ksm pages, limiting swappability.

Remove page_add_ksm_rmap(): page_add_anon_rmap() now has to allow for the
particular case it was handling, so just use it instead.

Signed-off-by: Hugh Dickins <[email protected]>
Cc: Izik Eidus <[email protected]>
Cc: Andrea Arcangeli <[email protected]>
Cc: Chris Wright <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
16 years agoksm: fix mlockfreed to munlocked
Hugh Dickins [Tue, 15 Dec 2009 01:59:22 +0000 (17:59 -0800)]
ksm: fix mlockfreed to munlocked

When KSM merges an mlocked page, it has been forgetting to munlock it:
that's been left to free_page_mlock(), which reports it in /proc/vmstat as
unevictable_pgs_mlockfreed instead of unevictable_pgs_munlocked (and
whinges "Page flag mlocked set for process" in mmotm, whereas mainline is
silently forgiving).  Call munlock_vma_page() to fix that.

Signed-off-by: Hugh Dickins <[email protected]>
Cc: Izik Eidus <[email protected]>
Cc: Andrea Arcangeli <[email protected]>
Cc: Chris Wright <[email protected]>
Acked-by: Rik van Riel <[email protected]>
Acked-by: Mel Gorman <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>