Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Bricked
flo
Commits
68c404b1
Commit
68c404b1
authored
14 years ago
by
Trond Myklebust
Browse files
Options
Download
Plain Diff
Merge branch 'bugfixes' into nfs-for-2.6.38
Conflicts: fs/nfs/nfs2xdr.c fs/nfs/nfs3xdr.c fs/nfs/nfs4xdr.c
parents
d035c36c
6650239a
Changes
423
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
226 additions
and
296 deletions
+226
-296
Documentation/accounting/getdelays.c
Documentation/accounting/getdelays.c
+1
-0
Documentation/filesystems/Locking
Documentation/filesystems/Locking
+100
-112
Documentation/kernel-parameters.txt
Documentation/kernel-parameters.txt
+1
-6
Documentation/power/runtime_pm.txt
Documentation/power/runtime_pm.txt
+2
-2
Documentation/scsi/scsi_mid_low_api.txt
Documentation/scsi/scsi_mid_low_api.txt
+31
-28
Documentation/trace/postprocess/trace-vmscan-postprocess.pl
Documentation/trace/postprocess/trace-vmscan-postprocess.pl
+10
-1
MAINTAINERS
MAINTAINERS
+18
-3
Makefile
Makefile
+1
-1
arch/arm/common/it8152.c
arch/arm/common/it8152.c
+1
-0
arch/arm/include/asm/hardware/it8152.h
arch/arm/include/asm/hardware/it8152.h
+1
-0
arch/arm/include/asm/highmem.h
arch/arm/include/asm/highmem.h
+0
-3
arch/arm/include/asm/sizes.h
arch/arm/include/asm/sizes.h
+3
-3
arch/arm/include/asm/system.h
arch/arm/include/asm/system.h
+1
-0
arch/arm/kernel/entry-common.S
arch/arm/kernel/entry-common.S
+6
-0
arch/arm/kernel/smp.c
arch/arm/kernel/smp.c
+0
-1
arch/arm/mach-at91/Makefile
arch/arm/mach-at91/Makefile
+1
-1
arch/arm/mach-at91/board-pcontrol-g20.c
arch/arm/mach-at91/board-pcontrol-g20.c
+3
-95
arch/arm/mach-at91/board-stamp9g20.c
arch/arm/mach-at91/board-stamp9g20.c
+43
-39
arch/arm/mach-at91/clock.c
arch/arm/mach-at91/clock.c
+1
-1
arch/arm/mach-at91/include/mach/at91_mci.h
arch/arm/mach-at91/include/mach/at91_mci.h
+2
-0
No files found.
Documentation/accounting/getdelays.c
View file @
68c404b1
...
...
@@ -516,6 +516,7 @@ int main(int argc, char *argv[])
default:
fprintf
(
stderr
,
"Unknown nla_type %d
\n
"
,
na
->
nla_type
);
case
TASKSTATS_TYPE_NULL
:
break
;
}
na
=
(
struct
nlattr
*
)
(
GENLMSG_DATA
(
&
msg
)
+
len
);
...
...
This diff is collapsed.
Click to expand it.
Documentation/filesystems/Locking
View file @
68c404b1
...
...
@@ -18,7 +18,6 @@ prototypes:
char *(*d_dname)((struct dentry *dentry, char *buffer, int buflen);
locking rules:
none have BKL
dcache_lock rename_lock ->d_lock may block
d_revalidate: no no no yes
d_hash no no no yes
...
...
@@ -42,18 +41,23 @@ ata *);
int (*rename) (struct inode *, struct dentry *,
struct inode *, struct dentry *);
int (*readlink) (struct dentry *, char __user *,int);
int (*follow_link) (struct dentry *, struct nameidata *);
void * (*follow_link) (struct dentry *, struct nameidata *);
void (*put_link) (struct dentry *, struct nameidata *, void *);
void (*truncate) (struct inode *);
int (*permission) (struct inode *, int, struct nameidata *);
int (*check_acl)(struct inode *, int);
int (*setattr) (struct dentry *, struct iattr *);
int (*getattr) (struct vfsmount *, struct dentry *, struct kstat *);
int (*setxattr) (struct dentry *, const char *,const void *,size_t,int);
ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
ssize_t (*listxattr) (struct dentry *, char *, size_t);
int (*removexattr) (struct dentry *, const char *);
void (*truncate_range)(struct inode *, loff_t, loff_t);
long (*fallocate)(struct inode *inode, int mode, loff_t offset, loff_t len);
int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, u64 len);
locking rules:
all may block
, none have BKL
all may block
i_mutex(inode)
lookup: yes
create: yes
...
...
@@ -66,19 +70,24 @@ rmdir: yes (both) (see below)
rename: yes (all) (see below)
readlink: no
follow_link: no
put_link: no
truncate: yes (see below)
setattr: yes
permission: no
check_acl: no
getattr: no
setxattr: yes
getxattr: no
listxattr: no
removexattr: yes
truncate_range: yes
fallocate: no
fiemap: no
Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_mutex on
victim.
cross-directory ->rename() has (per-superblock) ->s_vfs_rename_sem.
->truncate() is never called directly - it's a callback, not a
method. It's called by vmtruncate() - library function
normally
used by
method. It's called by vmtruncate() -
deprecated
library function used by
->setattr(). Locking information above applies to that call (i.e. is
inherited from ->setattr() - vmtruncate() is used when ATTR_SIZE had been
passed).
...
...
@@ -91,7 +100,7 @@ prototypes:
struct inode *(*alloc_inode)(struct super_block *sb);
void (*destroy_inode)(struct inode *);
void (*dirty_inode) (struct inode *);
int (*write_inode) (struct inode *,
int
);
int (*write_inode) (struct inode *,
struct writeback_control *wbc
);
int (*drop_inode) (struct inode *);
void (*evict_inode) (struct inode *);
void (*put_super) (struct super_block *);
...
...
@@ -105,10 +114,10 @@ prototypes:
int (*show_options)(struct seq_file *, struct vfsmount *);
ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t);
locking rules:
All may block [not true, see below]
None have BKL
s_umount
alloc_inode:
destroy_inode:
...
...
@@ -127,6 +136,7 @@ umount_begin: no
show_options: no (namespace_sem)
quota_read: no (see below)
quota_write: no (see below)
bdev_try_to_free_page: no (see below)
->statfs() has s_umount (shared) when called by ustat(2) (native or
compat), but that's an accident of bad API; s_umount is used to pin
...
...
@@ -139,19 +149,25 @@ be the only ones operating on the quota file by the quota code (via
dqio_sem) (unless an admin really wants to screw up something and
writes to quota files with quotas on). For other details about locking
see also dquot_operations section.
->bdev_try_to_free_page is called from the ->releasepage handler of
the block device inode. See there for more details.
--------------------------- file_system_type ---------------------------
prototypes:
int (*get_sb) (struct file_system_type *, int,
const char *, void *, struct vfsmount *);
struct dentry *(*mount) (struct file_system_type *, int,
const char *, void *);
void (*kill_sb) (struct super_block *);
locking rules:
may block BKL
get_sb yes no
kill_sb yes no
may block
get_sb yes
mount yes
kill_sb yes
->get_sb() returns error or 0 with locked superblock attached to the vfsmount
(exclusive on ->s_umount).
->mount() returns ERR_PTR or the root dentry.
->kill_sb() takes a write-locked superblock, does all shutdown work on it,
unlocks and drops the reference.
...
...
@@ -176,27 +192,35 @@ prototypes:
void (*freepage)(struct page *);
int (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
loff_t offset, unsigned long nr_segs);
int (*launder_page) (struct page *);
int (*get_xip_mem)(struct address_space *, pgoff_t, int, void **,
unsigned long *);
int (*migratepage)(struct address_space *, struct page *, struct page *);
int (*launder_page)(struct page *);
int (*is_partially_uptodate)(struct page *, read_descriptor_t *, unsigned long);
int (*error_remove_page)(struct address_space *, struct page *);
locking rules:
All except set_page_dirty and freepage may block
BKL PageLocked(page) i_mutex
writepage: no yes, unlocks (see below)
readpage: no yes, unlocks
sync_page: no maybe
writepages: no
set_page_dirty no no
readpages: no
write_begin: no locks the page yes
write_end: no yes, unlocks yes
perform_write: no n/a yes
bmap: no
invalidatepage: no yes
releasepage: no yes
freepage: no yes
direct_IO: no
launder_page: no yes
PageLocked(page) i_mutex
writepage: yes, unlocks (see below)
readpage: yes, unlocks
sync_page: maybe
writepages:
set_page_dirty no
readpages:
write_begin: locks the page yes
write_end: yes, unlocks yes
bmap:
invalidatepage: yes
releasepage: yes
freepage: yes
direct_IO:
get_xip_mem: maybe
migratepage: yes (both)
launder_page: yes
is_partially_uptodate: yes
error_remove_page: yes
->write_begin(), ->write_end(), ->sync_page() and ->readpage()
may be called from the request handler (/dev/loop).
...
...
@@ -276,9 +300,8 @@ under spinlock (it cannot block) and is sometimes called with the page
not locked.
->bmap() is currently used by legacy ioctl() (FIBMAP) provided by some
filesystems and by the swapper. The latter will eventually go away. All
instances do not actually need the BKL. Please, keep it that way and don't
breed new callers.
filesystems and by the swapper. The latter will eventually go away. Please,
keep it that way and don't breed new callers.
->invalidatepage() is called when the filesystem must attempt to drop
some or all of the buffers from the page when it is being truncated. It
...
...
@@ -299,47 +322,37 @@ cleaned, or an error value if not. Note that in order to prevent the page
getting mapped back in and redirtied, it needs to be kept locked
across the entire operation.
Note: currently almost all instances of address_space methods are
using BKL for internal serialization and that's one of the worst sources
of contention. Normally they are calling library functions (in fs/buffer.c)
and pass foo_get_block() as a callback (on local block-based filesystems,
indeed). BKL is not needed for library stuff and is usually taken by
foo_get_block(). It's an overkill, since block bitmaps can be protected by
internal fs locking and real critical areas are much smaller than the areas
filesystems protect now.
----------------------- file_lock_operations ------------------------------
prototypes:
void (*fl_insert)(struct file_lock *); /* lock insertion callback */
void (*fl_remove)(struct file_lock *); /* lock removal callback */
void (*fl_copy_lock)(struct file_lock *, struct file_lock *);
void (*fl_release_private)(struct file_lock *);
locking rules:
BKL may block
fl_insert: yes no
fl_remove: yes no
fl_copy_lock: yes no
fl_release_private: yes yes
file_lock_lock may block
fl_copy_lock: yes no
fl_release_private: maybe no
----------------------- lock_manager_operations ---------------------------
prototypes:
int (*fl_compare_owner)(struct file_lock *, struct file_lock *);
void (*fl_notify)(struct file_lock *); /* unblock callback */
int (*fl_grant)(struct file_lock *, struct file_lock *, int);
void (*fl_release_private)(struct file_lock *);
void (*fl_break)(struct file_lock *); /* break_lease callback */
int (*fl_mylease)(struct file_lock *, struct file_lock *);
int (*fl_change)(struct file_lock **, int);
locking rules:
BKL
may block
fl_compare_owner: yes no
fl_notify: yes no
fl_
release_private: yes yes
fl_
break: yes
no
Currently only NFSD and NLM provide instances of this class. None of the
them block. If you have out-of-tree instances - please, show up. Locking
in that area will change.
file_lock_lock
may block
fl_compare_owner: yes
no
fl_notify: yes
no
fl_
grant: no no
fl_
release_private: maybe
no
fl_break: yes no
fl_mylease: yes no
fl_change yes no
--------------------------- buffer_head -----------------------------------
prototypes:
void (*b_end_io)(struct buffer_head *bh, int uptodate);
...
...
@@ -364,17 +377,17 @@ prototypes:
void (*swap_slot_free_notify) (struct block_device *, unsigned long);
locking rules:
BKL
bd_mutex
open:
no
yes
release:
no
yes
ioctl: no
no
compat_ioctl: no
no
direct_access: no
no
media_changed: no
no
unlock_native_capacity: no
no
revalidate_disk: no
no
getgeo: no
no
swap_slot_free_notify: no
no
(see below)
bd_mutex
open: yes
release: yes
ioctl: no
compat_ioctl: no
direct_access: no
media_changed: no
unlock_native_capacity: no
revalidate_disk: no
getgeo: no
swap_slot_free_notify: no (see below)
media_changed, unlock_native_capacity and revalidate_disk are called only from
check_disk_change().
...
...
@@ -413,34 +426,21 @@ prototypes:
unsigned long (*get_unmapped_area)(struct file *, unsigned long,
unsigned long, unsigned long, unsigned long);
int (*check_flags)(int);
int (*flock) (struct file *, int, struct file_lock *);
ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *,
size_t, unsigned int);
ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *,
size_t, unsigned int);
int (*setlease)(struct file *, long, struct file_lock **);
};
locking rules:
All may block.
BKL
llseek: no (see below)
read: no
aio_read: no
write: no
aio_write: no
readdir: no
poll: no
unlocked_ioctl: no
compat_ioctl: no
mmap: no
open: no
flush: no
release: no
fsync: no (see below)
aio_fsync: no
fasync: no
lock: yes
readv: no
writev: no
sendfile: no
sendpage: no
get_unmapped_area: no
check_flags: no
All may block except for ->setlease.
No VFS locks held on entry except for ->fsync and ->setlease.
->fsync() has i_mutex on inode.
->setlease has the file_list_lock held and must not sleep.
->llseek() locking has moved from llseek to the individual llseek
implementations. If your fs is not using generic_file_llseek, you
...
...
@@ -450,17 +450,10 @@ mutex or just to use i_size_read() instead.
Note: this does not protect the file->f_pos against concurrent modifications
since this is something the userspace has to take care about.
Note: ext2_release() was *the* source of contention on fs-intensive
loads and dropping BKL on ->release() helps to get rid of that (we still
grab BKL for cases when we close a file that had been opened r/w, but that
can and should be done using the internal locking with smaller critical areas).
Current worst offender is ext2_get_block()...
->fasync() is called without BKL protection, and is responsible for
maintaining the FASYNC bit in filp->f_flags. Most instances call
fasync_helper(), which does that maintenance, so it's not normally
something one needs to worry about. Return values > 0 will be mapped to
zero in the VFS layer.
->fasync() is responsible for maintaining the FASYNC bit in filp->f_flags.
Most instances call fasync_helper(), which does that maintenance, so it's
not normally something one needs to worry about. Return values > 0 will be
mapped to zero in the VFS layer.
->readdir() and ->ioctl() on directories must be changed. Ideally we would
move ->readdir() to inode_operations and use a separate method for directory
...
...
@@ -471,8 +464,6 @@ components. And there are other reasons why the current interface is a mess...
->read on directories probably must go away - we should just enforce -EISDIR
in sys_read() and friends.
->fsync() has i_mutex on inode.
--------------------------- dquot_operations -------------------------------
prototypes:
int (*write_dquot) (struct dquot *);
...
...
@@ -507,12 +498,12 @@ prototypes:
int (*access)(struct vm_area_struct *, unsigned long, void*, int, int);
locking rules:
BKL
mmap_sem PageLocked(page)
open:
no
yes
close:
no
yes
fault:
no
yes can return with page locked
page_mkwrite:
no
yes can return with page locked
access:
no
yes
mmap_sem PageLocked(page)
open: yes
close: yes
fault: yes can return with page locked
page_mkwrite: yes can return with page locked
access: yes
->fault() is called when a previously not present pte is about
to be faulted in. The filesystem must find and return the page associated
...
...
@@ -539,6 +530,3 @@ VM_IO | VM_PFNMAP VMAs.
(if you break something or notice that it is broken and do not fix it yourself
- at least put it here)
ipc/shm.c::shm_delete() - may need BKL.
->read() and ->write() in many drivers are (probably) missing BKL.
This diff is collapsed.
Click to expand it.
Documentation/kernel-parameters.txt
View file @
68c404b1
...
...
@@ -1759,7 +1759,7 @@ and is between 256 and 4096 characters. It is defined in the file
nousb [USB] Disable the USB subsystem
nowatchdog [KNL] Disable the lockup detector.
nowatchdog [KNL] Disable the lockup detector
(NMI watchdog)
.
nowb [ARM]
...
...
@@ -2175,11 +2175,6 @@ and is between 256 and 4096 characters. It is defined in the file
reset_devices [KNL] Force drivers to reset the underlying device
during initialization.
resource_alloc_from_bottom
Allocate new resources from the beginning of available
space, not the end. If you need to use this, please
report a bug.
resume= [SWSUSP]
Specify the partition device for software suspend
...
...
This diff is collapsed.
Click to expand it.
Documentation/power/runtime_pm.txt
View file @
68c404b1
...
...
@@ -379,8 +379,8 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h:
zero)
bool pm_runtime_suspended(struct device *dev);
- return true if the device's runtime PM status is 'suspended'
, or false
otherwise
- return true if the device's runtime PM status is 'suspended'
and its
'power.disable_depth' field is equal to zero, or false
otherwise
void pm_runtime_allow(struct device *dev);
- set the power.runtime_auto flag for the device and decrease its usage
...
...
This diff is collapsed.
Click to expand it.
Documentation/scsi/scsi_mid_low_api.txt
View file @
68c404b1
...
...
@@ -1044,9 +1044,9 @@ Details:
/**
* queuecommand - queue scsi command, invoke 'done' on completion
* queuecommand - queue scsi command, invoke scp->scsi_done on completion
* @shost: pointer to the scsi host object
* @scp: pointer to scsi command object
* @done: function pointer to be invoked on completion
*
* Returns 0 on success.
*
...
...
@@ -1074,42 +1074,45 @@ Details:
*
* Other types of errors that are detected immediately may be
* flagged by setting scp->result to an appropriate value,
* invoking the 'done' callback, and then returning 0 from this
* function. If the command is not performed immediately (and the
* LLD is starting (or will start) the given command) then this
* function should place 0 in scp->result and return 0.
* invoking the scp->scsi_done callback, and then returning 0
* from this function. If the command is not performed
* immediately (and the LLD is starting (or will start) the given
* command) then this function should place 0 in scp->result and
* return 0.
*
* Command ownership. If the driver returns zero, it owns the
* command and must take responsibility for ensuring the 'done'
* callback is executed. Note: the driver may call done before
* returning zero, but after it has called done, it may not
* return any value other than zero. If the driver makes a
* non-zero return, it must not execute the command's done
* callback at any time.
*
* Locks: struct Scsi_Host::host_lock held on entry (with "irqsave")
* and is expected to be held on return.
* command and must take responsibility for ensuring the
* scp->scsi_done callback is executed. Note: the driver may
* call scp->scsi_done before returning zero, but after it has
* called scp->scsi_done, it may not return any value other than
* zero. If the driver makes a non-zero return, it must not
* execute the command's scsi_done callback at any time.
*
* Locks: up to and including 2.6.36, struct Scsi_Host::host_lock
* held on entry (with "irqsave") and is expected to be
* held on return. From 2.6.37 onwards, queuecommand is
* called without any locks held.
*
* Calling context: in interrupt (soft irq) or process context
*
* Notes: This function should be relatively fast. Normally it will
* not wait for IO to complete. Hence the 'done' callback is invoked
* (often directly from an interrupt service routine) some time after
* this function has returned. In some cases (e.g. pseudo adapter
* drivers that manufacture the response to a SCSI INQUIRY)
* the 'done' callback may be invoked before this function returns.
* If the 'done' callback is not invoked within a certain period
* the SCSI mid level will commence error processing.
* If a status of CHECK CONDITION is placed in "result" when the
* 'done' callback is invoked, then the LLD driver should
* perform autosense and fill in the struct scsi_cmnd::sense_buffer
* Notes: This function should be relatively fast. Normally it
* will not wait for IO to complete. Hence the scp->scsi_done
* callback is invoked (often directly from an interrupt service
* routine) some time after this function has returned. In some
* cases (e.g. pseudo adapter drivers that manufacture the
* response to a SCSI INQUIRY) the scp->scsi_done callback may be
* invoked before this function returns. If the scp->scsi_done
* callback is not invoked within a certain period the SCSI mid
* level will commence error processing. If a status of CHECK
* CONDITION is placed in "result" when the scp->scsi_done
* callback is invoked, then the LLD driver should perform
* autosense and fill in the struct scsi_cmnd::sense_buffer
* array. The scsi_cmnd::sense_buffer array is zeroed prior to
* the mid level queuing a command to an LLD.
*
* Defined in: LLD
**/
int queuecommand(struct scsi_cmnd * scp,
void (*done)(struct scsi_cmnd *))
int queuecommand(struct Scsi_Host *shost, struct scsi_cmnd * scp)
/**
...
...
This diff is collapsed.
Click to expand it.
Documentation/trace/postprocess/trace-vmscan-postprocess.pl
View file @
68c404b1
...
...
@@ -373,9 +373,18 @@ EVENT_PROCESS:
print
"
$regex_lru_isolate
/o
\n
";
next
;
}
my
$isolate_mode
=
$
1
;
my
$nr_scanned
=
$
4
;
my
$nr_contig_dirty
=
$
7
;
$perprocesspid
{
$process_pid
}
->
{
HIGH_NR_SCANNED
}
+=
$nr_scanned
;
# To closer match vmstat scanning statistics, only count isolate_both
# and isolate_inactive as scanning. isolate_active is rotation
# isolate_inactive == 0
# isolate_active == 1
# isolate_both == 2
if
(
$isolate_mode
!=
1
)
{
$perprocesspid
{
$process_pid
}
->
{
HIGH_NR_SCANNED
}
+=
$nr_scanned
;
}
$perprocesspid
{
$process_pid
}
->
{
HIGH_NR_CONTIG_DIRTY
}
+=
$nr_contig_dirty
;
}
elsif
(
$tracepoint
eq
"
mm_vmscan_lru_shrink_inactive
")
{
$details
=
$
5
;
...
...
This diff is collapsed.
Click to expand it.
MAINTAINERS
View file @
68c404b1
...
...
@@ -405,7 +405,7 @@ S: Supported
F: drivers/usb/gadget/amd5536udc.*
AMD GEODE PROCESSOR/CHIPSET SUPPORT
P:
Jordan Crouse
P:
Andres Salomon <dilinger@queued.net>
L: linux-geode@lists.infradead.org (moderated for non-subscribers)
W: http://www.amd.com/us-en/ConnectivitySolutions/TechnicalResources/0,,50_2334_2452_11363,00.html
S: Supported
...
...
@@ -792,11 +792,14 @@ S: Maintained
ARM/NOMADIK ARCHITECTURE
M: Alessandro Rubini <rubini@unipv.it>
M: Linus Walleij <linus.walleij@stericsson.com>
M: STEricsson <STEricsson_nomadik_linux@list.st.com>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: Maintained
F: arch/arm/mach-nomadik/
F: arch/arm/plat-nomadik/
F: drivers/i2c/busses/i2c-nomadik.c
T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git
ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT
M: Nelson Castillo <arhuaco@freaks-unidos.net>
...
...
@@ -998,12 +1001,24 @@ F: drivers/i2c/busses/i2c-stu300.c
F: drivers/rtc/rtc-coh901331.c
F: drivers/watchdog/coh901327_wdt.c
F: drivers/dma/coh901318*
F: drivers/mfd/ab3100*
F: drivers/rtc/rtc-ab3100.c
F: drivers/rtc/rtc-coh901331.c
T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git
ARM/U
8
500 ARM ARCHITECTURE
ARM/U
x
500 ARM ARCHITECTURE
M: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
M: Linus Walleij <linus.walleij@stericsson.com>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: Maintained
F: arch/arm/mach-ux500/
F: drivers/dma/ste_dma40*
F: drivers/mfd/ab3550*
F: drivers/mfd/abx500*
F: drivers/mfd/ab8500*
F: drivers/mfd/stmpe*
F: drivers/rtc/rtc-ab8500.c
T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git
ARM/VFP SUPPORT
M: Russell King <linux@arm.linux.org.uk>
...
...
@@ -4590,7 +4605,7 @@ F: drivers/pcmcia/
F: include/pcmcia/
PCNET32 NETWORK DRIVER
M: Don Fry <pcnet32@
verizon.net
>
M: Don Fry <pcnet32@
frontier.com
>
L: netdev@vger.kernel.org
S: Maintained
F: drivers/net/pcnet32.c
...
...
This diff is collapsed.
Click to expand it.
Makefile
View file @
68c404b1
VERSION
=
2
PATCHLEVEL
=
6
SUBLEVEL
=
37
EXTRAVERSION
=
-rc6
EXTRAVERSION
=
NAME
=
Flesh-Eating Bats with Fangs
# *DOCUMENTATION*
...
...
This diff is collapsed.
Click to expand it.
arch/arm/common/it8152.c
View file @
68c404b1
...
...
@@ -352,3 +352,4 @@ struct pci_bus * __init it8152_pci_scan_bus(int nr, struct pci_sys_data *sys)
return
pci_scan_bus
(
nr
,
&
it8152_ops
,
sys
);
}
EXPORT_SYMBOL
(
dma_set_coherent_mask
);
This diff is collapsed.
Click to expand it.
arch/arm/include/asm/hardware/it8152.h
View file @
68c404b1
...
...
@@ -76,6 +76,7 @@ extern unsigned long it8152_base_address;
IT8152_PD_IRQ(0) Audio controller (ACR)
*/
#define IT8152_IRQ(x) (IRQ_BOARD_START + (x))
#define IT8152_LAST_IRQ (IRQ_BOARD_START + 40)
/* IRQ-sources in 3 groups - local devices, LPC (serial), and external PCI */
#define IT8152_LD_IRQ_COUNT 9
...
...
This diff is collapsed.
Click to expand it.
arch/arm/include/asm/highmem.h
View file @
68c404b1
...
...
@@ -25,9 +25,6 @@ extern void *kmap_high(struct page *page);
extern
void
*
kmap_high_get
(
struct
page
*
page
);
extern
void
kunmap_high
(
struct
page
*
page
);
extern
void
*
kmap_high_l1_vipt
(
struct
page
*
page
,
pte_t
*
saved_pte
);
extern
void
kunmap_high_l1_vipt
(
struct
page
*
page
,
pte_t
saved_pte
);
/*
* The following functions are already defined by <linux/highmem.h>
* when CONFIG_HIGHMEM is not set.
...
...
This diff is collapsed.
Click to expand it.
arch/arm/include/asm/sizes.h
View file @
68c404b1
...
...
@@ -13,9 +13,6 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* DO NOT EDIT!! - this file automatically generated
* from .s file by awk -f s2h.awk
*/
/* Size definitions
* Copyright (C) ARM Limited 1998. All rights reserved.
*/
...
...
@@ -25,6 +22,9 @@
/* handy sizes */
#define SZ_16 0x00000010
#define SZ_32 0x00000020
#define SZ_64 0x00000040
#define SZ_128 0x00000080
#define SZ_256 0x00000100
#define SZ_512 0x00000200
...
...
This diff is collapsed.
Click to expand it.
arch/arm/include/asm/system.h
View file @
68c404b1
...
...
@@ -150,6 +150,7 @@ extern unsigned int user_debug;
#define rmb() dmb()
#define wmb() mb()
#else
#include <asm/memory.h>
#define mb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0)
#define rmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0)
#define wmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0)
...
...
This diff is collapsed.
Click to expand it.
arch/arm/kernel/entry-common.S
View file @
68c404b1
...
...
@@ -29,6 +29,9 @@ ret_fast_syscall:
ldr
r1
,
[
tsk
,
#
TI_FLAGS
]
tst
r1
,
#
_TIF_WORK_MASK
bne
fast_work_pending
#if defined(CONFIG_IRQSOFF_TRACER)
asm_trace_hardirqs_on
#endif
/
*
perform
architecture
specific
actions
before
user
return
*/
arch_ret_to_user
r1
,
lr
...
...
@@ -65,6 +68,9 @@ ret_slow_syscall:
tst
r1
,
#
_TIF_WORK_MASK
bne
work_pending
no_work_pending
:
#if defined(CONFIG_IRQSOFF_TRACER)
asm_trace_hardirqs_on
#endif
/
*
perform
architecture
specific
actions
before
user
return
*/
arch_ret_to_user
r1
,
lr
...
...
This diff is collapsed.
Click to expand it.
arch/arm/kernel/smp.c
View file @
68c404b1
...
...
@@ -310,7 +310,6 @@ asmlinkage void __cpuinit secondary_start_kernel(void)
* All kernel threads share the same mm context; grab a
* reference and switch to it.
*/
atomic_inc
(
&
mm
->
mm_users
);
atomic_inc
(
&
mm
->
mm_count
);
current
->
active_mm
=
mm
;
cpumask_set_cpu
(
cpu
,
mm_cpumask
(
mm
));
...
...
This diff is collapsed.
Click to expand it.
arch/arm/mach-at91/Makefile
View file @
68c404b1
...
...
@@ -65,7 +65,7 @@ obj-$(CONFIG_MACH_AT91SAM9G20EK) += board-sam9g20ek.o
obj-$(CONFIG_MACH_CPU9G20)
+=
board-cpu9krea.o
obj-$(CONFIG_MACH_STAMP9G20)
+=
board-stamp9g20.o
obj-$(CONFIG_MACH_PORTUXG20)
+=
board-stamp9g20.o
obj-$(CONFIG_MACH_PCONTROL_G20)
+=
board-pcontrol-g20.o
obj-$(CONFIG_MACH_PCONTROL_G20)
+=
board-pcontrol-g20.o
board-stamp9g20.o
# AT91SAM9260/AT91SAM9G20 board-specific support
obj-$(CONFIG_MACH_SNAPPER_9260)
+=
board-snapper9260.o
...
...
This diff is collapsed.
Click to expand it.
arch/arm/mach-at91/board-pcontrol-g20.c
View file @
68c404b1
...
...
@@ -31,6 +31,7 @@
#include <mach/board.h>
#include <mach/at91sam9_smc.h>
#include <mach/stamp9g20.h>
#include "sam9_smc.h"
#include "generic.h"
...
...
@@ -38,11 +39,7 @@
static
void
__init
pcontrol_g20_map_io
(
void
)
{
/* Initialize processor: 18.432 MHz crystal */
at91sam9260_initialize
(
18432000
);
/* DGBU on ttyS0. (Rx, Tx) only TTL -> JTAG connector X7 17,19 ) */
at91_register_uart
(
0
,
0
,
0
);
stamp9g20_map_io
();
/* USART0 on ttyS1. (Rx, Tx, CTS, RTS) piggyback A2 */
at91_register_uart
(
AT91SAM9260_ID_US0
,
1
,
ATMEL_UART_CTS
...
...
@@ -54,9 +51,6 @@ static void __init pcontrol_g20_map_io(void)
/* USART2 on ttyS3. (Rx, Tx) 9bit-Bus Multidrop-mode X4 */
at91_register_uart
(
AT91SAM9260_ID_US4
,
3
,
0
);
/* set serial console to ttyS0 (ie, DBGU) */
at91_set_serial_console
(
0
);
}
...
...
@@ -66,38 +60,6 @@ static void __init init_irq(void)
}
/*
* NAND flash 512MiB 1,8V 8-bit, sector size 128 KiB
*/
static
struct
atmel_nand_data
__initdata
nand_data
=
{
.
ale
=
21
,
.
cle
=
22
,
.
rdy_pin
=
AT91_PIN_PC13
,
.
enable_pin
=
AT91_PIN_PC14
,
};
/*
* Bus timings; unit = 7.57ns
*/
static
struct
sam9_smc_config
__initdata
nand_smc_config
=
{
.
ncs_read_setup
=
0
,
.
nrd_setup
=
2
,
.
ncs_write_setup
=
0
,
.
nwe_setup
=
2
,
.
ncs_read_pulse
=
4
,
.
nrd_pulse
=
4
,
.
ncs_write_pulse
=
4
,
.
nwe_pulse
=
4
,
.
read_cycle
=
7
,
.
write_cycle
=
7
,
.
mode
=
AT91_SMC_READMODE
|
AT91_SMC_WRITEMODE
|
AT91_SMC_EXNWMODE_DISABLE
|
AT91_SMC_DBW_8
,
.
tdf_cycles
=
3
,
};
static
struct
sam9_smc_config
__initdata
pcontrol_smc_config
[
2
]
=
{
{
.
ncs_read_setup
=
16
,
.
nrd_setup
=
18
,
...
...
@@ -138,14 +100,6 @@ static struct sam9_smc_config __initdata pcontrol_smc_config[2] = { {
.
tdf_cycles
=
1
,
}
};
static
void
__init
add_device_nand
(
void
)
{
/* configure chip-select 3 (NAND) */
sam9_smc_configure
(
3
,
&
nand_smc_config
);
at91_add_device_nand
(
&
nand_data
);
}
static
void
__init
add_device_pcontrol
(
void
)
{
/* configure chip-select 4 (IO compatible to 8051 X4 ) */
...
...
@@ -155,23 +109,6 @@ static void __init add_device_pcontrol(void)
}
/*
* MCI (SD/MMC)
* det_pin, wp_pin and vcc_pin are not connected
*/
#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE)
static
struct
mci_platform_data
__initdata
mmc_data
=
{
.
slot
[
0
]
=
{
.
bus_width
=
4
,
},
};
#else
static
struct
at91_mmc_data
__initdata
mmc_data
=
{
.
wire4
=
1
,
};
#endif
/*
* USB Host port
*/
...
...
@@ -265,42 +202,13 @@ static struct spi_board_info pcontrol_g20_spi_devices[] = {
};
/*
* Dallas 1-Wire DS2431
*/
static
struct
w1_gpio_platform_data
w1_gpio_pdata
=
{
.
pin
=
AT91_PIN_PA29
,
.
is_open_drain
=
1
,
};
static
struct
platform_device
w1_device
=
{
.
name
=
"w1-gpio"
,
.
id
=
-
1
,
.
dev
.
platform_data
=
&
w1_gpio_pdata
,
};
static
void
add_wire1
(
void
)
{
at91_set_GPIO_periph
(
w1_gpio_pdata
.
pin
,
1
);
at91_set_multi_drive
(
w1_gpio_pdata
.
pin
,
1
);
platform_device_register
(
&
w1_device
);
}
static
void
__init
pcontrol_g20_board_init
(
void
)
{
at91_add_device_serial
();
add_device_nand
();
#if defined(CONFIG_MMC_ATMELMCI) || defined(CONFIG_MMC_ATMELMCI_MODULE)
at91_add_device_mci
(
0
,
&
mmc_data
);
#else
at91_add_device_mmc
(
0
,
&
mmc_data
);
#endif
stamp9g20_board_init
();
at91_add_device_usbh
(
&
usbh_data
);
at91_add_device_eth
(
&
macb_data
);
at91_add_device_i2c
(
pcontrol_g20_i2c_devices
,
ARRAY_SIZE
(
pcontrol_g20_i2c_devices
));
add_wire1
();
add_device_pcontrol
();
at91_add_device_spi
(
pcontrol_g20_spi_devices
,
ARRAY_SIZE
(
pcontrol_g20_spi_devices
));
...
...
This diff is collapsed.
Click to expand it.
arch/arm/mach-at91/board-stamp9g20.c
View file @
68c404b1
...
...
@@ -32,7 +32,7 @@
#include "generic.h"
static
void
__init
portux
g20_map_io
(
void
)
void
__init
stamp9
g20_map_io
(
void
)
{
/* Initialize processor: 18.432 MHz crystal */
at91sam9260_initialize
(
18432000
);
...
...
@@ -40,6 +40,24 @@ static void __init portuxg20_map_io(void)
/* DGBU on ttyS0. (Rx & Tx only) */
at91_register_uart
(
0
,
0
,
0
);
/* set serial console to ttyS0 (ie, DBGU) */
at91_set_serial_console
(
0
);
}
static
void
__init
stamp9g20evb_map_io
(
void
)
{
stamp9g20_map_io
();
/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */
at91_register_uart
(
AT91SAM9260_ID_US0
,
1
,
ATMEL_UART_CTS
|
ATMEL_UART_RTS
|
ATMEL_UART_DTR
|
ATMEL_UART_DSR
|
ATMEL_UART_DCD
|
ATMEL_UART_RI
);
}
static
void
__init
portuxg20_map_io
(
void
)
{
stamp9g20_map_io
();
/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */
at91_register_uart
(
AT91SAM9260_ID_US0
,
1
,
ATMEL_UART_CTS
|
ATMEL_UART_RTS
|
ATMEL_UART_DTR
|
ATMEL_UART_DSR
...
...
@@ -56,26 +74,6 @@ static void __init portuxg20_map_io(void)
/* USART5 on ttyS6. (Rx, Tx only) */
at91_register_uart
(
AT91SAM9260_ID_US5
,
6
,
0
);
/* set serial console to ttyS0 (ie, DBGU) */
at91_set_serial_console
(
0
);
}
static
void
__init
stamp9g20_map_io
(
void
)
{
/* Initialize processor: 18.432 MHz crystal */
at91sam9260_initialize
(
18432000
);
/* DGBU on ttyS0. (Rx & Tx only) */
at91_register_uart
(
0
,
0
,
0
);
/* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */
at91_register_uart
(
AT91SAM9260_ID_US0
,
1
,
ATMEL_UART_CTS
|
ATMEL_UART_RTS
|
ATMEL_UART_DTR
|
ATMEL_UART_DSR
|
ATMEL_UART_DCD
|
ATMEL_UART_RI
);
/* set serial console to ttyS0 (ie, DBGU) */
at91_set_serial_console
(
0
);
}
static
void
__init
init_irq
(
void
)
...
...
@@ -156,7 +154,7 @@ static struct at91_udc_data __initdata portuxg20_udc_data = {
.
pullup_pin
=
0
,
/* pull-up driven by UDC */
};
static
struct
at91_udc_data
__initdata
stamp9g20_udc_data
=
{
static
struct
at91_udc_data
__initdata
stamp9g20
evb
_udc_data
=
{
.
vbus_pin
=
AT91_PIN_PA22
,
.
pullup_pin
=
0
,
/* pull-up driven by UDC */
};
...
...
@@ -190,7 +188,7 @@ static struct gpio_led portuxg20_leds[] = {
}
};
static
struct
gpio_led
stamp9g20_leds
[]
=
{
static
struct
gpio_led
stamp9g20
evb
_leds
[]
=
{
{
.
name
=
"D8"
,
.
gpio
=
AT91_PIN_PB18
,
...
...
@@ -250,7 +248,7 @@ void add_w1(void)
}
static
void
__init
generic
_board_init
(
void
)
void
__init
stamp9g20
_board_init
(
void
)
{
/* Serial */
at91_add_device_serial
();
...
...
@@ -262,34 +260,40 @@ static void __init generic_board_init(void)
#else
at91_add_device_mmc
(
0
,
&
mmc_data
);
#endif
/* USB Host */
at91_add_device_usbh
(
&
usbh_data
);
/* Ethernet */
at91_add_device_eth
(
&
macb_data
);
/* I2C */
at91_add_device_i2c
(
NULL
,
0
);
/* W1 */
add_w1
();
}
static
void
__init
portuxg20_board_init
(
void
)
{
generic
_board_init
();
/*
SPI
*/
at91_add_device_
spi
(
portuxg20_spi_devices
,
ARRAY_SIZE
(
portuxg20_spi_devices
)
);
stamp9g20
_board_init
();
/*
USB Host
*/
at91_add_device_
usbh
(
&
usbh_data
);
/* USB Device */
at91_add_device_udc
(
&
portuxg20_udc_data
);
/* Ethernet */
at91_add_device_eth
(
&
macb_data
);
/* I2C */
at91_add_device_i2c
(
NULL
,
0
);
/* SPI */
at91_add_device_spi
(
portuxg20_spi_devices
,
ARRAY_SIZE
(
portuxg20_spi_devices
));
/* LEDs */
at91_gpio_leds
(
portuxg20_leds
,
ARRAY_SIZE
(
portuxg20_leds
));
}
static
void
__init
stamp9g20_board_init
(
void
)
static
void
__init
stamp9g20
evb
_board_init
(
void
)
{
generic_board_init
();
stamp9g20_board_init
();
/* USB Host */
at91_add_device_usbh
(
&
usbh_data
);
/* USB Device */
at91_add_device_udc
(
&
stamp9g20_udc_data
);
at91_add_device_udc
(
&
stamp9g20evb_udc_data
);
/* Ethernet */
at91_add_device_eth
(
&
macb_data
);
/* I2C */
at91_add_device_i2c
(
NULL
,
0
);
/* LEDs */
at91_gpio_leds
(
stamp9g20_leds
,
ARRAY_SIZE
(
stamp9g20_leds
));
at91_gpio_leds
(
stamp9g20
evb
_leds
,
ARRAY_SIZE
(
stamp9g20
evb
_leds
));
}
MACHINE_START
(
PORTUXG20
,
"taskit PortuxG20"
)
...
...
@@ -305,7 +309,7 @@ MACHINE_START(STAMP9G20, "taskit Stamp9G20")
/* Maintainer: taskit GmbH */
.
boot_params
=
AT91_SDRAM_BASE
+
0x100
,
.
timer
=
&
at91sam926x_timer
,
.
map_io
=
stamp9g20_map_io
,
.
map_io
=
stamp9g20
evb
_map_io
,
.
init_irq
=
init_irq
,
.
init_machine
=
stamp9g20_board_init
,
.
init_machine
=
stamp9g20
evb
_board_init
,
MACHINE_END
This diff is collapsed.
Click to expand it.
arch/arm/mach-at91/clock.c
View file @
68c404b1
...
...
@@ -658,7 +658,7 @@ static void __init at91_upll_usbfs_clock_init(unsigned long main_clock)
/* Now set uhpck values */
uhpck
.
parent
=
&
utmi_clk
;
uhpck
.
pmc_mask
=
AT91SAM926x_PMC_UHP
;
uhpck
.
rate_hz
=
utmi_clk
.
parent
->
rate_hz
;
uhpck
.
rate_hz
=
utmi_clk
.
rate_hz
;
uhpck
.
rate_hz
/=
1
+
((
at91_sys_read
(
AT91_PMC_USB
)
&
AT91_PMC_OHCIUSBDIV
)
>>
8
);
}
...
...
This diff is collapsed.
Click to expand it.
arch/arm/mach-at91/include/mach/at91_mci.h
View file @
68c404b1
...
...
@@ -74,6 +74,8 @@
#define AT91_MCI_TRTYP_BLOCK (0 << 19)
#define AT91_MCI_TRTYP_MULTIPLE (1 << 19)
#define AT91_MCI_TRTYP_STREAM (2 << 19)
#define AT91_MCI_TRTYP_SDIO_BYTE (4 << 19)
#define AT91_MCI_TRTYP_SDIO_BLOCK (5 << 19)
#define AT91_MCI_BLKR 0x18
/* Block Register */
#define AT91_MCI_BLKR_BCNT(n) ((0xffff & (n)) << 0)
/* Block count */
...
...
This diff is collapsed.
Click to expand it.
Prev
1
2
3
4
5
…
22
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment