07 Mar, 2010
40 commits
-
My next patch will replace ELF_CORE_EXTRA_* macros by functions, putting
them into other newly created *.c files. Then, each files will contain
dump_write(), where each pair of binfmt_*.c and elfcore.c should be the
same. So, this patch moves them into a header file with dump_seek().
Also, the patch deletes confusing DUMP_WRITE macros in each files.Signed-off-by: Daisuke HATAYAMA
Cc: "Luck, Tony"
Cc: Jeff Dike
Cc: David Howells
Cc: Greg Ungerer
Cc: Roland McGrath
Cc: Oleg Nesterov
Cc: Ingo Molnar
Cc: Alexander Viro
Cc: Andi Kleen
Cc: Alan Cox
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
The current ELF dumper can produce broken corefiles if program headers
exceed 65535. In particular, the program in 64-bit environment often
demands more than 65535 mmaps. If you google max_map_count, then you can
find many users facing this problem.Solaris has already dealt with this issue, and other OSes have also
adopted the same method as in Solaris. Currently, Sun's document and AMD
64 ABI include the description for the extension, where they call the
extension Extended Numbering. See Reference for further information.I believe that linux kernel should adopt the same way as they did, so I've
written this patch.I am also preparing for patches of GDB and binutils.
How to fix
==========In new dumping process, there are two cases according to weather or
not the number of program headers is equal to or more than 65535.- if less than 65535, the produced corefile format is exactly the same
as the ordinary one.- if equal to or more than 65535, then e_phnum field is set to newly
introduced constant PN_XNUM(0xffff) and the actual number of program
headers is set to sh_info field of the section header at index 0.Compatibility Concern
=====================* As already mentioned in Summary, Sun and AMD64 has already adopted
this. See Reference.* There are four combinations according to whether kernel and userland
tools are respectively modified or not. The next table summarizes
shortly for each combination.---------------------------------------------
Original Kernel | Modified Kernel
---------------------------------------------
< 65535 | >= 65535 | < 65535 | >= 65535
-------------------------------------------------------------
Original Tools | OK | broken | OK | broken (#)
-------------------------------------------------------------
Modified Tools | OK | broken | OK | OK
-------------------------------------------------------------Note that there is no case that `OK' changes to `broken'.
(#) Although this case remains broken, O-M behaves better than
O-O. That is, while in O-O case e_phnum field would be extremely
small due to integer overflow, in O-M case it is guaranteed to be at
least 65535 by being set to PN_XNUM(0xFFFF), much closer to the
actual correct value than the O-O case.Test Program
============Here is a test program mkmmaps.c that is useful to produce the
corefile with many mmaps. To use this, please take the following
steps:$ ulimit -c unlimited
$ sysctl vm.max_map_count=70000 # default 65530 is too small
$ sysctl fs.file-max=70000
$ mkmmaps 65535Then, the program will abort and a corefile will be generated.
If failed, there are two cases according to the error message
displayed.* ``out of memory'' means vm.max_map_count is still smaller
* ``too many open files'' means fs.file-max is still smaller
So, please change it to a larger value, and then retry it.
mkmmaps.c
==
#include
#include
#include
#include
#include
int main(int argc, char **argv)
{
int maps_num;
if (argc < 2) {
fprintf(stderr, "mkmmaps [number of maps to be created]\n");
exit(1);
}
if (sscanf(argv[1], "%d", &maps_num) == EOF) {
perror("sscanf");
exit(2);
}
if (maps_num < 0) {
fprintf(stderr, "%d is invalid\n", maps_num);
exit(3);
}
for (; maps_num > 0; --maps_num) {
if (MAP_FAILED == mmap((void *)NULL, (size_t) 1, PROT_READ,
MAP_SHARED | MAP_ANONYMOUS, (int) -1,
(off_t) NULL)) {
perror("mmap");
exit(4);
}
}
abort();
{
char buffer[128];
sprintf(buffer, "wc -l /proc/%u/maps", getpid());
system(buffer);
}
return 0;
}Tested on i386, ia64 and um/sys-i386.
Built on sh4 (which covers fs/binfmt_elf_fdpic.c)References
==========- Sun microsystems: Linker and Libraries.
Part No: 817-1984-17, September 2008.
URL: http://docs.sun.com/app/docs/doc/817-1984- System V ABI AMD64 Architecture Processor Supplement
Draft Version 0.99., May 11, 2009.
URL: http://www.x86-64.org/This patch:
There are three different definitions for dump_seek() functions in
binfmt_aout.c, binfmt_elf.c and binfmt_elf_fdpic.c, respectively. The
only for binfmt_elf.c.My next patch will move dump_seek() into a header file in order to share
the same implementations for dump_write() and dump_seek(). As the first
step, this patch unify these three definitions for dump_seek() by applying
the past commits that have been applied only for binfmt_elf.c.Specifically, the modification made here is part of the following commits:
* d025c9db7f31fc0554ce7fb2dfc78d35a77f3487
* 7f14daa19ea36b200d237ad3ac5826ae25360461This patch does not change a shape of corefiles.
Signed-off-by: Daisuke HATAYAMA
Cc: "Luck, Tony"
Cc: Jeff Dike
Cc: David Howells
Cc: Greg Ungerer
Cc: Roland McGrath
Cc: Oleg Nesterov
Cc: Ingo Molnar
Cc: Alexander Viro
Cc: Andi Kleen
Cc: Alan Cox
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
* warn if creation goes on to non-existent directory
* warn if removal goes on from non-existing directory
* warn if non-existing proc entry is removedSigned-off-by: Alexey Dobriyan
Cc: Al Viro
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
remove_proc_entry() does
lock
lookup parent
unlock
lock
unlink proc entry from lists
unlockwhich can be made bit more correct by doing parent translation + unlink
without dropping lock.Signed-off-by: Alexey Dobriyan
Cc: Al Viro
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
While testing an ADC121S021 in an embedded board with a S3C2142 SoC (ARM
core), I have found that the 'adcxx' driver does not handle correctly
single channel ADCs from this chip family. For single channel chips you
must only issue one read transfer for correct measurement.Signed-off-by: Jose Miguel Goncalves
Cc: Marc Pignat
Cc: Anton Vorontsov
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
String constants that are continued on subsequent lines with \ will cause
spurious whitespace in the resulting output.Signed-off-by: Joe Perches
Cc: Roger Lucas
Cc: Jean Delvare
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
Signed-off-by: Joakim Tjernlund
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
Signed-off-by: Joe Perches
Cc: Andy Whitcroft
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
Signed-off-by: Alberto Panizzo
Cc: Andy Whitcroft
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
Based on Arjan's suggestion, extend the list of ops structures that should
be const.Signed-off-by: Emese Revfy
Cc: Andy Whitcroft
Cc: Arjan van de Ven
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
Here is a small code snippet, which will be complained about by
checkpatch.pl:#define __STRUCT_KFIFO_COMMON(recsize, ptrtype) \
union { \
struct { \
unsigned int in; \
unsigned int out; \
}; \
char rectype[recsize]; \
ptrtype *ptr; \
const ptrtype *ptr_const; \
};This construct is legal and safe, so checkpatch.pl should accept this. It
should be also true for struct defined in a macro.Add the `struct' and `union' keywords to the exceptions list of the
checkpatch.pl script, to prevent error message "Macros with multiple
statements should be enclosed in a do - while loop". Otherwise it is not
possible to build a struct or union with a macro.Signed-off-by: Stefani Seibold
Cc: Andy Whitcroft
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
checkpatch falsely complained about '__initconst' because it thought the
'const' needed a space before. Fix this by changing the list of
attributes:- add '__initconst'
- force plain 'init' to contain a word-boundary at the endSigned-off-by: Wolfram Sang
Cc: Andy Whitcroft
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
Signed-off-by: Joe Perches
Cc: Andy Whitcroft
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
In case if the statement and the conditional are in one line, the line
appears in the report doubly.And items of this check have no blank line before the next item.
This patch fixes these trivial problems, to improve readability of the
report.[sample.c]
> if (cond1
> && cond2
> && cond3) func_foo();
>
> if (cond4) func_bar();Before:
> ERROR: trailing statements should be on next line
> #1: FILE: sample.c:1:
> +if (cond1
> [...]
> + && cond3) func_foo();
> ERROR: trailing statements should be on next line
> #5: FILE: sample.c:5:
> +if (cond4) func_bar();
> +if (cond4) func_bar();
> total: 2 errors, 0 warnings, 5 lines checkedAfter:
> ERROR: trailing statements should be on next line
> #1: FILE: sample.c:1:
> +if (cond1
> [...]
> + && cond3) func_foo();
>
> ERROR: trailing statements should be on next line
> #5: FILE: sample.c:5:
> +if (cond4) func_bar();
>
> total: 2 errors, 0 warnings, 5 lines checkedSigned-off-by: Hidetoshi Seto
Cc: Andy Whitcroft
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
sizeof(&foo) is frequently an error. Warn on its use.
Signed-off-by: Joe Perches
Cc: Andy Whitcroft
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
This card reader doesn't advertise, however DMA works well. Probably
windows SDHCI driver assumes that all readers support DMA and thus we see
that bug.Signed-off-by: Vasily Khoruzhick
Tested-by: Maxim Levitsky
Signed-off-by: Maxim Levitsky
Cc: Harald Welte
Cc: Norbert Preining
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
kunmap_atomic() accepts a pointer to any location in the page so we do not
need the subtraction and cast.Signed-off-by: Nicolas Ferre
Cc: Wolfgang Muees
Cc: Andrew Victor
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
We used to manage features and differences on a per-cpu basis. As several
cpus share the same mci revision, this patch aggregates cpus that have the
same IP revision in one defined constant. We use the
at91mci_is_mci1rev2xx() funtion name not to mess with newer Atmel sd/mmc
IP called "MCI2". _rev2 naming could have been confusing...Signed-off-by: Nicolas Ferre
Cc: Wolfgang Muees
Cc: Andrew Victor
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
According to the datasheets AT91SAM9261 does not support SDIO interrupts,
and AT91SAM9260/9263 have an erratum requiring 4bit mode while using slot
B for the interrupt to work.Signed-off-by: Nicolas Ferre
Cc: Wolfgang Muees
Cc: Andrew Victor
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
This patch is setting some max_ variables for the IO elevator, so the
elevator will put requests for large data blocks to the driver. This is
critical fora) speed
and
b) wear leveling of the flash chip controller: Otherwise the controller
will treat the SD card badly with millions of single 4 KByte write
commands. This will lead to a shorter life time for the SD cards.Signed-off-by: Wolfgang Muees
Signed-off-by: Nicolas Ferre
Cc: Andrew Victor
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
Convert the read to use the DMA buffer as well. The old code was doing
double-buffering DMA with the PDC; no way to make it work. Replace it
with a single-PDC approach. It also simplify things removing the need for
a pre_dma_read() function.[nicolas.ferre@atmel.com coding style modifications]
Signed-off-by: Wolfgang Muees
Signed-off-by: Nicolas Ferre
Cc: Andrew Victor
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
The TX DMA buffer is allocated only once, because the
allocation/deallocation of the buffer for EACH chunk of data is
time-consuming and prone to memory fragmentation.Using a coherent DMA buffer avoids extra data cache calls.
[nicolas.ferre@atmel.com: coding style modifications]
Signed-off-by: Wolfgang Muees
Signed-off-by: Nicolas Ferre
Cc: Andrew Victor
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
Fix two timeout errors, one for slow SDHC cards and one for slow users
while inserting SD cards.Signed-off-by: Wolfgang Muees
Signed-off-by: Nicolas Ferre
Cc: Andrew Victor
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
Fixes two pointer errors, one which leads to memory overwrites if used
with large chunks of data.Signed-off-by: Wolfgang Muees
Signed-off-by: Nicolas Ferre
Cc: Andrew Victor
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
Signed-off-by: Lars-Peter Clausen
Cc: Ben Dooks
Cc:
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
If no platform_data was givin to the device it's going to use it's default
platform data struct which has all fields initialized to zero. As a
result the driver is going to try to request gpio0 both as write protect
and card detect pin. Which of course will fail and makes the driver
unusablePreviously to the introduction of no_wprotect and no_detect the behavior
was to assume that if no platform data was given there is no write protect
or card detect pin. This patch restores that behavior.Signed-off-by: Lars-Peter Clausen
Cc: Ben Dooks
Cc:
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
And bring them back to 4-bit mode during resume.
Signed-off-by: Daniel Drake
Signed-off-by: Nicolas Pitre
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
Some SDIO cards may suspend while keeping function interrupts active
especially in the powered suspend case. Upon resume we need to kick the
SDIO interrupt thread to check for pending interrupts and to restart card
IRQ detection at the host controller level.Signed-off-by: Nicolas Pitre
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
Seen on a Marvell 8686 SDIO card and Via VX855 controller: we must avoid
sending CMD3/5/7 on a resume where power has been maintained, because the
8686 will refuse to respond to them and the MMC stack will give up on the
card.Signed-off-by: Chris Ball
Signed-off-by: Nicolas Pitre
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
Tested with an XO v1.5 from OLPC.
Signed-off-by: Nicolas Pitre
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
This patch series provides the core changes needed to allow SDIO cards to
remain powered and active while the host system is suspended, and let them
wake up the host system when needed. This is used to implement
wake-on-lan with SDIO wireless cards at the moment. Patches to add that
support to the libertas driver will be posted separately.This patch:
Some SDIO cards have the ability to keep on running autonomously when the
host system is suspended, and wake it up when needed. This however
requires that the host controller preserve power to the card, and
configure itself appropriately for wake-up.There is however 4 layers of abstractions involved: the host controller
driver, the MMC core code, the SDIO card management code, and the actual
SDIO function driver. To make things simple and manageable, host drivers
must advertise their PM capabilities with a feature bitmask, then function
drivers can query and set those features from their suspend method. Then
each layer in the suspend call chain is expected to act upon those bits
accordingly.[akpm@linux-foundation.org: fix typo in comment]
Signed-off-by: Nicolas Pitre
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
sdhci_set_adma_desc() is using byte-writes to write data in a specified
order into memory. Change to using __le16 for the two byte and __le32 for
the four byte cases and use the cpu_to_{le16,le32} to do the conversion
before writing.This will reduce the size of the code and the number of writes as we no
longer need to chop the data up before writing.As an example on ARM S3C64XX SoC, in little-endian configuration:
000000d4 :
- d8: e1a0c423 lsr ip, r3, #8
- dc: e1a0ec21 lsr lr, r1, #24
- e0: e1a04821 lsr r4, r1, #16
- e4: e1a05421 lsr r5, r1, #8
- e8: e1a06442 asr r6, r2, #8
- ec: e5c0c001 strb ip, [r0, #1]
- f0: e5c0e007 strb lr, [r0, #7]
- f4: e5c04006 strb r4, [r0, #6]
- f8: e5c05005 strb r5, [r0, #5]
- fc: e5c01004 strb r1, [r0, #4]
- 100: e5c06003 strb r6, [r0, #3]
- 104: e5c02002 strb r2, [r0, #2]
- 108: e5c03000 strb r3, [r0]
+ d4: e5801004 str r1, [r0, #4]
+ d8: e1c030b0 strh r3, [r0]
+ dc: e1c020b2 strh r2, [r0, #2]Signed-off-by: Ben Dooks
Cc: Pierre Ossman
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
The code to write the ADMA descriptor into memory is repeated several
times throughout sdhci_adma_table_pre, and thus should be moved into a
common function. This will also be useful if the patch to make the write
more efficient is accepted.Signed-off-by: Ben Dooks
Cc: Pierre Ossman
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
Some SDIO cards expect byte transfers not to exceed the configured block
transfer size. Add a quirk to that effect.Patches to make use of this quirk will be sent separately.
Signed-off-by: Bing Zhao
Signed-off-by: Nicolas Pitre
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
The hardcoded value doesn't really work for all cards.
Signed-off-by: Cliff Cai
Signed-off-by: Mike Frysinger
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
The host/Kconfig file is only included when MMC is selected.
Signed-off-by: Mike Frysinger
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
The local sg variable is only used with BF54x code.
Signed-off-by: Mike Frysinger
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
This prevents those without an Atmel chip having a line in kernel
configuration which says "Atmel SD/MMC Driver" without any option.Signed-off-by: Jonathan Cameron
Signed-off-by: Nicolas Ferre
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
Add support for 8bit MMC cards. The controller data width is configurable
depending on the wires setting in the platform data structure.MMC 8bit is tested on OMAPL137 and MMC 4bit is tested on OMAPL138 EVM.
Signed-off-by: Vipin Bhandari
Cc: David Brownell
Cc: Chaithrika U S
Cc: Sudhakar Rajashekhara
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds -
This patch solves nasty problem original driver has.
Original goal of the ricoh_mmc was to disable this device because then,
mmc cards can be read using standard SDHCI controller, thus avoiding
writing of yet another driver.However, the act of disablement, makes other pci functions that belong to
this controller (xD and memstick) shift up one level, thus pci core has
now wrong idea about these devices.To fix this issue, this patch moves the driver into the pci quirk section,
thus it is executes before the pci is enumerated, and therefore solving
that issue, also same sequence of commands is performed on resume for same
reasons.Also regardless of the above, this way is cleaner. You still need to set
CONFIG_MMC_RICOH_MMC to enable this quirkSigned-off-by: Maxim Levitsky
Acked-by: Philip Langdale
Acked-by: Wolfram Sang
Cc:
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds