Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
658dcd3b
Commit
658dcd3b
authored
Aug 20, 2003
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge nuts.ninka.net:/home/davem/src/BK/network-2.5
into nuts.ninka.net:/home/davem/src/BK/net-2.5
parents
5f6e4c74
be974925
Changes
57
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
57 changed files
with
618 additions
and
364 deletions
+618
-364
Documentation/filesystems/Locking
Documentation/filesystems/Locking
+93
-57
Documentation/nmi_watchdog.txt
Documentation/nmi_watchdog.txt
+1
-1
arch/i386/Kconfig
arch/i386/Kconfig
+0
-4
arch/i386/defconfig
arch/i386/defconfig
+0
-1
arch/i386/kernel/acpi/boot.c
arch/i386/kernel/acpi/boot.c
+1
-0
arch/i386/kernel/dmi_scan.c
arch/i386/kernel/dmi_scan.c
+4
-24
arch/i386/kernel/setup.c
arch/i386/kernel/setup.c
+4
-1
arch/i386/lib/usercopy.c
arch/i386/lib/usercopy.c
+97
-77
drivers/base/power/resume.c
drivers/base/power/resume.c
+1
-1
drivers/base/power/suspend.c
drivers/base/power/suspend.c
+1
-1
drivers/media/video/adv7170.c
drivers/media/video/adv7170.c
+1
-1
drivers/media/video/adv7175.c
drivers/media/video/adv7175.c
+1
-1
drivers/media/video/bt819.c
drivers/media/video/bt819.c
+1
-1
drivers/media/video/bt856.c
drivers/media/video/bt856.c
+1
-1
drivers/media/video/saa7110.c
drivers/media/video/saa7110.c
+1
-1
drivers/media/video/saa7111.c
drivers/media/video/saa7111.c
+1
-1
drivers/media/video/saa7114.c
drivers/media/video/saa7114.c
+1
-1
drivers/media/video/saa7185.c
drivers/media/video/saa7185.c
+1
-1
drivers/media/video/tvmixer.c
drivers/media/video/tvmixer.c
+1
-1
drivers/media/video/vpx3220.c
drivers/media/video/vpx3220.c
+1
-1
drivers/media/video/zoran.h
drivers/media/video/zoran.h
+1
-5
drivers/media/video/zoran_card.c
drivers/media/video/zoran_card.c
+1
-1
drivers/mtd/chips/sharp.c
drivers/mtd/chips/sharp.c
+1
-1
drivers/net/irda/vlsi_ir.c
drivers/net/irda/vlsi_ir.c
+10
-10
drivers/net/seeq8005.c
drivers/net/seeq8005.c
+1
-1
drivers/net/tokenring/smctr.c
drivers/net/tokenring/smctr.c
+3
-3
drivers/net/wan/Kconfig
drivers/net/wan/Kconfig
+25
-3
drivers/net/wan/dscc4.c
drivers/net/wan/dscc4.c
+191
-38
drivers/net/wan/sbni.c
drivers/net/wan/sbni.c
+1
-1
drivers/scsi/NCR5380.c
drivers/scsi/NCR5380.c
+0
-2
drivers/scsi/NCR5380.h
drivers/scsi/NCR5380.h
+1
-3
drivers/scsi/aacraid/aacraid.h
drivers/scsi/aacraid/aacraid.h
+1
-1
drivers/scsi/aha1740.c
drivers/scsi/aha1740.c
+3
-4
drivers/scsi/atari_NCR5380.c
drivers/scsi/atari_NCR5380.c
+0
-2
drivers/scsi/g_NCR5380.c
drivers/scsi/g_NCR5380.c
+1
-1
drivers/scsi/mac_NCR5380.c
drivers/scsi/mac_NCR5380.c
+0
-2
drivers/scsi/sun3_NCR5380.c
drivers/scsi/sun3_NCR5380.c
+1
-1
drivers/scsi/ultrastor.c
drivers/scsi/ultrastor.c
+1
-1
drivers/usb/serial/console.c
drivers/usb/serial/console.c
+1
-1
drivers/video/tridentfb.c
drivers/video/tridentfb.c
+3
-2
fs/block_dev.c
fs/block_dev.c
+43
-5
fs/ext3/balloc.c
fs/ext3/balloc.c
+71
-79
fs/ext3/namei.c
fs/ext3/namei.c
+5
-4
fs/proc/array.c
fs/proc/array.c
+1
-1
include/asm-i386/mach-bigsmp/mach_apic.h
include/asm-i386/mach-bigsmp/mach_apic.h
+2
-0
include/asm-i386/mach-es7000/mach_apic.h
include/asm-i386/mach-es7000/mach_apic.h
+2
-0
include/asm-i386/mach-numaq/mach_apic.h
include/asm-i386/mach-numaq/mach_apic.h
+2
-0
include/asm-i386/mach-summit/mach_apic.h
include/asm-i386/mach-summit/mach_apic.h
+2
-0
include/asm-i386/mach-visws/mach_apic.h
include/asm-i386/mach-visws/mach_apic.h
+2
-0
include/linux/sched.h
include/linux/sched.h
+3
-1
init/Kconfig
init/Kconfig
+1
-1
init/do_mounts.c
init/do_mounts.c
+0
-2
init/do_mounts.h
init/do_mounts.h
+0
-10
kernel/fork.c
kernel/fork.c
+17
-0
mm/filemap.c
mm/filemap.c
+3
-0
mm/vmscan.c
mm/vmscan.c
+5
-1
sound/isa/opl3sa2.c
sound/isa/opl3sa2.c
+1
-0
No files found.
Documentation/filesystems/Locking
View file @
658dcd3b
...
...
@@ -28,8 +28,9 @@ d_iput: no no no yes
--------------------------- inode_operations ---------------------------
prototypes:
int (*create) (struct inode *,struct dentry *,int);
struct dentry * (*lookup) (struct inode *,struct dentry *);
int (*create) (struct inode *,struct dentry *,int, struct nameidata *);
struct dentry * (*lookup) (struct inode *,struct dentry *, struct nameid
ata *);
int (*link) (struct dentry *,struct inode *,struct dentry *);
int (*unlink) (struct inode *,struct dentry *);
int (*symlink) (struct inode *,struct dentry *,const char *);
...
...
@@ -38,13 +39,13 @@ prototypes:
int (*mknod) (struct inode *,struct dentry *,int,dev_t);
int (*rename) (struct inode *, struct dentry *,
struct inode *, struct dentry *);
int (*readlink) (struct dentry *, char *,int);
int (*readlink) (struct dentry *, char
__user
*,int);
int (*follow_link) (struct dentry *, struct nameidata *);
void (*truncate) (struct inode *);
int (*permission) (struct inode *, int);
int (*permission) (struct inode *, int
, struct nameidata *
);
int (*setattr) (struct dentry *, struct iattr *);
int (*getattr) (struct vfsmount *, struct dentry *, struct kstat *);
int (*setxattr) (struct dentry *, const char *,
void *, size_t,
int);
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 *);
...
...
@@ -85,42 +86,55 @@ of the locking scheme for directory operations.
--------------------------- super_operations ---------------------------
prototypes:
struct inode *(*alloc_inode)(struct super_block *sb);
void (*destroy_inode)(struct inode *);
void (*read_inode) (struct inode *);
void (*dirty_inode) (struct inode *);
void (*write_inode) (struct inode *, int);
void (*put_inode) (struct inode *);
void (*drop_inode) (struct inode *);
void (*delete_inode) (struct inode *);
void (*put_super) (struct super_block *);
void (*write_super) (struct super_block *);
int (*sync_fs) (struct super_block *sb, int wait);
int (*statfs) (struct super_block *, struct statfs *);
int (*sync_fs)(struct super_block *sb, int wait);
void (*write_super_lockfs) (struct super_block *);
void (*unlockfs) (struct super_block *);
int (*statfs) (struct super_block *, struct kstatfs *);
int (*remount_fs) (struct super_block *, int *, char *);
void (*clear_inode) (struct inode *);
void (*umount_begin) (struct super_block *);
int (*show_options)(struct seq_file *, struct vfsmount *);
locking rules:
All may block.
BKL s_lock mount_sem
read_inode: yes (see below)
write_inode: no
put_inode: no
drop_inode: no !!!inode_lock!!!
delete_inode: no
clear_inode: no
put_super: yes yes maybe (see below)
write_super: no yes maybe (see below)
sync_fs: no no maybe (see below)
statfs: no no no
remount_fs: yes yes maybe (see below)
umount_begin: yes no maybe (see below)
BKL s_lock s_umount
alloc_inode: no no no
destroy_inode: no
read_inode: no (see below)
dirty_inode: no (must not sleep)
write_inode: no
put_inode: no
drop_inode: no !!!inode_lock!!!
delete_inode: no
put_super: yes yes no
write_super: no yes read
sync_fs: no no read
write_super_lockfs: ?
unlockfs: ?
statfs: no no no
remount_fs: no yes maybe (see below)
clear_inode: no
umount_begin: yes no no
show_options: no (vfsmount->sem)
->read_inode() is not a method - it's a callback used in iget().
rules for mount_sem are not too nice - it is going to die and be replaced
by better scheme anyway
.
->remount_fs() will have the s_umount lock if it's already mounted.
When called from get_sb_single, it does NOT have the s_umount lock
.
--------------------------- file_system_type ---------------------------
prototypes:
struct super_block *(*get_sb) (struct file_system_type *, int, const char *, void *);
struct super_block *(*get_sb) (struct file_system_type *, int,
const char *, void *);
void (*kill_sb) (struct super_block *);
locking rules:
may block BKL
...
...
@@ -128,7 +142,7 @@ get_sb yes yes
kill_sb yes yes
->get_sb() returns error or a locked superblock (exclusive on ->s_umount).
->kill_sb() takes a locked superblock, does all shutdown work on it,
->kill_sb() takes a
write-
locked superblock, does all shutdown work on it,
unlocks and drops the reference.
--------------------------- address_space_operations --------------------------
...
...
@@ -138,12 +152,15 @@ prototypes:
int (*sync_page)(struct page *);
int (*writepages)(struct address_space *, struct writeback_control *);
int (*set_page_dirty)(struct page *page);
int (*readpages)(struct file *filp, struct address_space *mapping,
struct list_head *pages, unsigned nr_pages);
int (*prepare_write)(struct file *, struct page *, unsigned, unsigned);
int (*commit_write)(struct file *, struct page *, unsigned, unsigned);
int (*bmap)(struct address_space *, long
);
sector_t (*bmap)(struct address_space *, sector_t
);
int (*invalidatepage) (struct page *, unsigned long);
int (*releasepage) (struct page *, int);
int (*direct_IO)(int, struct inode *, struct kiobuf *, unsigned long, int);
int (*direct_IO)(int, struct kiocb *, const struct iovec *iov,
loff_t offset, unsigned long nr_segs);
locking rules:
All except set_page_dirty may block
...
...
@@ -151,15 +168,16 @@ locking rules:
BKL PageLocked(page)
writepage: no yes, unlocks (see below)
readpage: no yes, unlocks
readpages: no
sync_page: no maybe
writepages: no
set_page_dirty no no
readpages: no
prepare_write: no yes
commit_write: no yes
bmap: yes
invalidatepage: no yes
releasepage: no yes
direct_IO: no
->prepare_write(), ->commit_write(), ->sync_page() and ->readpage()
may be called from the request handler (/dev/loop).
...
...
@@ -253,8 +271,8 @@ prototypes:
locking rules:
BKL may block
fl_notify: yes no
fl_insert: yes
maybe
fl_remove: yes
maybe
fl_insert: yes
no
fl_remove: yes
no
Currently only NLM provides 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.
...
...
@@ -274,57 +292,75 @@ prototypes:
int (*open) (struct inode *, struct file *);
int (*release) (struct inode *, struct file *);
int (*ioctl) (struct inode *, struct file *, unsigned, unsigned long);
int (*check_media_change) (kdev_t);
int (*revalidate) (kdev_t);
int (*media_changed) (struct gendisk *);
int (*revalidate_disk) (struct gendisk *);
locking rules:
BKL bd_sem
open: yes yes
release: yes yes
ioctl: yes no
check_media_change: yes
no
revalidate
: yes
no
media_changed: no
no
revalidate
_disk: no
no
The last two are called only from check_disk_change(). Prototypes are very
bad - as soon as we'll get disk_struct they will change (and methods will
become per-disk instead of per-partition).
The last two are called only from check_disk_change().
--------------------------- file_operations -------------------------------
prototypes:
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
ssize_t (*aio_read) (struct kiocb *, char __user *, size_t, loff_t);
ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
ssize_t (*aio_write) (struct kiocb *, const char __user *, size_t,
loff_t);
int (*readdir) (struct file *, void *, filldir_t);
unsigned int (*poll) (struct file *, struct poll_table_struct *);
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
int (*ioctl) (struct inode *, struct file *, unsigned int,
unsigned long);
int (*mmap) (struct file *, struct vm_area_struct *);
int (*open) (struct inode *, struct file *);
int (*flush) (struct file *);
int (*release) (struct inode *, struct file *);
int (*fsync) (struct file *, struct dentry *, int datasync);
int (*aio_fsync) (struct kiocb *, int datasync);
int (*fasync) (int, struct file *, int);
int (*lock) (struct file *, int, struct file_lock *);
ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *);
ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *);
ssize_t (*readv) (struct file *, const struct iovec *, unsigned long,
loff_t *);
ssize_t (*writev) (struct file *, const struct iovec *, unsigned long,
loff_t *);
ssize_t (*sendfile) (struct file *, loff_t *, size_t, read_actor_t,
void __user *);
ssize_t (*sendpage) (struct file *, struct page *, int, size_t,
loff_t *, int);
unsigned long (*get_unmapped_area)(struct file *, unsigned long,
unsigned long, unsigned long, unsigned long);
};
locking rules:
All except ->poll() may block.
BKL
llseek: yes (see below)
read: no
write: no
readdir: no
poll: no
ioctl: yes (see below)
mmap: no
open: maybe (see below)
flush: no
release: no
fsync: yes (see below)
fasync: yes (see below)
lock: yes
readv: no
writev: no
BKL
llseek: no (see below)
read: no
aio_read: no
write: no
aio_write: no
readdir: no
poll: no
ioctl: yes (see below)
mmap: no
open: maybe (see below)
flush: no
release: no
fsync: no (see below)
aio_fsync: no
fasync: yes (see below)
lock: yes
readv: no
writev: no
sendfile: no
sendpage: no
get_unmapped_area: no
->llseek() locking has moved from llseek to the individual llseek
implementations. If your fs is not using generic_file_llseek, you
...
...
Documentation/nmi_watchdog.txt
View file @
658dcd3b
...
...
@@ -12,7 +12,7 @@ This can be used to debug hard kernel lockups. By executing periodic
NMI interrupts, the kernel can monitor whether any CPU has locked up,
and print out debugging messages if so.
In order to use the NMI watchdo
c
, you need to have APIC support in your
In order to use the NMI watchdo
g
, you need to have APIC support in your
kernel. For SMP kernels, APIC support gets compiled in automatically. For
UP, enable either CONFIG_X86_UP_APIC (Processor type and features -> Local
APIC support on uniprocessors) or CONFIG_X86_UP_IOAPIC (Processor type and
...
...
arch/i386/Kconfig
View file @
658dcd3b
...
...
@@ -1204,10 +1204,6 @@ source "drivers/pnp/Kconfig"
source "drivers/block/Kconfig"
config MOUNT_ROOT_FAILED_MSG
bool
default y
source "drivers/ide/Kconfig"
source "drivers/scsi/Kconfig"
...
...
arch/i386/defconfig
View file @
658dcd3b
...
...
@@ -228,7 +228,6 @@ CONFIG_BLK_DEV_FD=y
# CONFIG_BLK_DEV_RAM is not set
# CONFIG_BLK_DEV_INITRD is not set
CONFIG_LBD=y
CONFIG_MOUNT_ROOT_FAILED_MSG=y
#
# ATA/ATAPI/MFM/RLL support
...
...
arch/i386/kernel/acpi/boot.c
View file @
658dcd3b
...
...
@@ -34,6 +34,7 @@
#if defined (CONFIG_X86_LOCAL_APIC)
#include <mach_apic.h>
#include <mach_mpparse.h>
#include <asm/io_apic.h>
#endif
#define PREFIX "ACPI: "
...
...
arch/i386/kernel/dmi_scan.c
View file @
658dcd3b
...
...
@@ -162,6 +162,8 @@ enum
static
char
*
dmi_ident
[
DMI_STRING_MAX
];
#ifdef CONFIG_ACPI_BOOT
/* print some information suitable for a blacklist entry. */
static
void
dmi_dump_system
(
void
)
{
...
...
@@ -176,6 +178,8 @@ static void dmi_dump_system(void)
dmi_ident
[
DMI_BOARD_VERSION
]);
}
#endif
/*
* Save a DMI string
*/
...
...
@@ -1116,27 +1120,3 @@ void __init dmi_scan_machine(void)
}
EXPORT_SYMBOL
(
is_unsafe_smbus
);
#ifdef CONFIG_MOUNT_ROOT_FAILED_MSG
/*
* mount_root_failed_msg()
*
* Called from mount_block_root() upon failure to mount root.
* architecture dependent to give different platforms
* the opportunity to print different handy messages
* On x86 this lives here b/c it dumps out some DMI info.
*/
void
mount_root_failed_msg
(
void
)
{
#ifdef CONFIG_ACPI_BOOT
printk
(
"Try booting with pci=noacpi, acpi=ht, "
"or acpi=off on the command line.
\n
"
);
printk
(
"If one helps, please report the following lines:
\n
"
);
dmi_dump_system
();
#endif
}
#endif
/* CONFIG_MOUNT_ROOT_FAILED_MSG */
arch/i386/kernel/setup.c
View file @
658dcd3b
...
...
@@ -43,6 +43,7 @@
#include <asm/setup.h>
#include <asm/arch_hooks.h>
#include <asm/sections.h>
#include <asm/io_apic.h>
#include "setup_arch_pre.h"
#include "mach_resources.h"
...
...
@@ -543,11 +544,13 @@ static void __init parse_cmdline_early (char ** cmdline_p)
if
(
!
acpi_force
)
acpi_disabled
=
1
;
}
#ifdef CONFIG_X86_LOCAL_APIC
/* disable IO-APIC */
else
if
(
!
memcmp
(
from
,
"noapic"
,
6
))
{
skip_ioapic_setup
=
1
;
}
#endif
#endif
/* CONFIG_X86_LOCAL_APIC */
#endif
/* CONFIG_ACPI_BOOT */
/*
* highmem=size forces highmem to be exactly 'size' bytes.
...
...
arch/i386/lib/usercopy.c
View file @
658dcd3b
...
...
@@ -222,85 +222,105 @@ __copy_user_intel(void *to, const void *from,unsigned long size)
{
int
d0
,
d1
;
__asm__
__volatile__
(
" .align 2,0x90
\n
"
"0: movl 32(%4), %%eax
\n
"
" cmpl $67, %0
\n
"
" jbe 1f
\n
"
" movl 64(%4), %%eax
\n
"
" .align 2,0x90
\n
"
"1: movl 0(%4), %%eax
\n
"
" movl 4(%4), %%edx
\n
"
"2: movl %%eax, 0(%3)
\n
"
"21: movl %%edx, 4(%3)
\n
"
" movl 8(%4), %%eax
\n
"
" movl 12(%4),%%edx
\n
"
"3: movl %%eax, 8(%3)
\n
"
"31: movl %%edx, 12(%3)
\n
"
" movl 16(%4), %%eax
\n
"
" movl 20(%4), %%edx
\n
"
"4: movl %%eax, 16(%3)
\n
"
"41: movl %%edx, 20(%3)
\n
"
" movl 24(%4), %%eax
\n
"
" movl 28(%4), %%edx
\n
"
"10: movl %%eax, 24(%3)
\n
"
"51: movl %%edx, 28(%3)
\n
"
" movl 32(%4), %%eax
\n
"
" movl 36(%4), %%edx
\n
"
"11: movl %%eax, 32(%3)
\n
"
"61: movl %%edx, 36(%3)
\n
"
" movl 40(%4), %%eax
\n
"
" movl 44(%4), %%edx
\n
"
"12: movl %%eax, 40(%3)
\n
"
"71: movl %%edx, 44(%3)
\n
"
" movl 48(%4), %%eax
\n
"
" movl 52(%4), %%edx
\n
"
"13: movl %%eax, 48(%3)
\n
"
"81: movl %%edx, 52(%3)
\n
"
" movl 56(%4), %%eax
\n
"
" movl 60(%4), %%edx
\n
"
"14: movl %%eax, 56(%3)
\n
"
"91: movl %%edx, 60(%3)
\n
"
" addl $-64, %0
\n
"
" addl $64, %4
\n
"
" addl $64, %3
\n
"
" cmpl $63, %0
\n
"
" ja 0b
\n
"
"5: movl %0, %%eax
\n
"
" shrl $2, %0
\n
"
" andl $3, %%eax
\n
"
" cld
\n
"
"6: rep; movsl
\n
"
" movl %%eax, %0
\n
"
"7: rep; movsb
\n
"
"8:
\n
"
".section .fixup,
\"
ax
\"\n
"
"9: lea 0(%%eax,%0,4),%0
\n
"
" jmp 8b
\n
"
".previous
\n
"
".section __ex_table,
\"
a
\"\n
"
" .align 4
\n
"
" .long 2b,8b
\n
"
" .long 21b,8b
\n
"
" .long 3b,8b
\n
"
" .long 31b,8b
\n
"
" .long 4b,8b
\n
"
" .long 41b,8b
\n
"
" .long 10b,8b
\n
"
" .long 51b,8b
\n
"
" .long 11b,8b
\n
"
" .long 61b,8b
\n
"
" .long 12b,8b
\n
"
" .long 71b,8b
\n
"
" .long 13b,8b
\n
"
" .long 81b,8b
\n
"
" .long 14b,8b
\n
"
" .long 91b,8b
\n
"
" .long 6b,9b
\n
"
" .long 7b,8b
\n
"
".previous"
" .align 2,0x90
\n
"
"1: movl 32(%4), %%eax
\n
"
" cmpl $67, %0
\n
"
" jbe 3f
\n
"
"2: movl 64(%4), %%eax
\n
"
" .align 2,0x90
\n
"
"3: movl 0(%4), %%eax
\n
"
"4: movl 4(%4), %%edx
\n
"
"5: movl %%eax, 0(%3)
\n
"
"6: movl %%edx, 4(%3)
\n
"
"7: movl 8(%4), %%eax
\n
"
"8: movl 12(%4),%%edx
\n
"
"9: movl %%eax, 8(%3)
\n
"
"10: movl %%edx, 12(%3)
\n
"
"11: movl 16(%4), %%eax
\n
"
"12: movl 20(%4), %%edx
\n
"
"13: movl %%eax, 16(%3)
\n
"
"14: movl %%edx, 20(%3)
\n
"
"15: movl 24(%4), %%eax
\n
"
"16: movl 28(%4), %%edx
\n
"
"17: movl %%eax, 24(%3)
\n
"
"18: movl %%edx, 28(%3)
\n
"
"19: movl 32(%4), %%eax
\n
"
"20: movl 36(%4), %%edx
\n
"
"21: movl %%eax, 32(%3)
\n
"
"22: movl %%edx, 36(%3)
\n
"
"23: movl 40(%4), %%eax
\n
"
"24: movl 44(%4), %%edx
\n
"
"25: movl %%eax, 40(%3)
\n
"
"26: movl %%edx, 44(%3)
\n
"
"27: movl 48(%4), %%eax
\n
"
"28: movl 52(%4), %%edx
\n
"
"29: movl %%eax, 48(%3)
\n
"
"30: movl %%edx, 52(%3)
\n
"
"31: movl 56(%4), %%eax
\n
"
"32: movl 60(%4), %%edx
\n
"
"33: movl %%eax, 56(%3)
\n
"
"34: movl %%edx, 60(%3)
\n
"
" addl $-64, %0
\n
"
" addl $64, %4
\n
"
" addl $64, %3
\n
"
" cmpl $63, %0
\n
"
" ja 1b
\n
"
"35: movl %0, %%eax
\n
"
" shrl $2, %0
\n
"
" andl $3, %%eax
\n
"
" cld
\n
"
"99: rep; movsl
\n
"
"36: movl %%eax, %0
\n
"
"37: rep; movsb
\n
"
"100:
\n
"
".section .fixup,
\"
ax
\"\n
"
"101: lea 0(%%eax,%0,4),%0
\n
"
" jmp 100b
\n
"
".previous
\n
"
".section __ex_table,
\"
a
\"\n
"
" .align 4
\n
"
" .long 1b,100b
\n
"
" .long 2b,100b
\n
"
" .long 3b,100b
\n
"
" .long 4b,100b
\n
"
" .long 5b,100b
\n
"
" .long 6b,100b
\n
"
" .long 7b,100b
\n
"
" .long 8b,100b
\n
"
" .long 9b,100b
\n
"
" .long 10b,100b
\n
"
" .long 11b,100b
\n
"
" .long 12b,100b
\n
"
" .long 13b,100b
\n
"
" .long 14b,100b
\n
"
" .long 15b,100b
\n
"
" .long 16b,100b
\n
"
" .long 17b,100b
\n
"
" .long 18b,100b
\n
"
" .long 19b,100b
\n
"
" .long 20b,100b
\n
"
" .long 21b,100b
\n
"
" .long 22b,100b
\n
"
" .long 23b,100b
\n
"
" .long 24b,100b
\n
"
" .long 25b,100b
\n
"
" .long 26b,100b
\n
"
" .long 27b,100b
\n
"
" .long 28b,100b
\n
"
" .long 29b,100b
\n
"
" .long 30b,100b
\n
"
" .long 31b,100b
\n
"
" .long 32b,100b
\n
"
" .long 33b,100b
\n
"
" .long 34b,100b
\n
"
" .long 35b,100b
\n
"
" .long 36b,100b
\n
"
" .long 37b,100b
\n
"
" .long 99b,101b
\n
"
".previous"
:
"=&c"
(
size
),
"=&D"
(
d0
),
"=&S"
(
d1
)
:
"1"
(
to
),
"2"
(
from
),
"0"
(
size
)
:
"eax"
,
"edx"
,
"memory"
);
:
"eax"
,
"edx"
,
"memory"
);
return
size
;
}
...
...
drivers/base/power/resume.c
View file @
658dcd3b
...
...
@@ -150,4 +150,4 @@ void device_resume(u32 level)
printk
(
"%s is deprecated. Called from:
\n
"
,
__FUNCTION__
);
dump_stack
();
}
EXPORT_SYMBOL
(
device_resume
);
drivers/base/power/suspend.c
View file @
658dcd3b
...
...
@@ -232,4 +232,4 @@ int device_suspend(u32 state, u32 level)
dump_stack
();
return
-
EFAULT
;
}
EXPORT_SYMBOL
(
device_suspend
);
drivers/media/video/adv7170.c
View file @
658dcd3b
...
...
@@ -59,7 +59,7 @@ MODULE_LICENSE("GPL");
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#define I2C_NAME(x) (x)->
dev.
name
#define I2C_NAME(x) (x)->name
#include <linux/video_encoder.h>
...
...
drivers/media/video/adv7175.c
View file @
658dcd3b
...
...
@@ -55,7 +55,7 @@ MODULE_LICENSE("GPL");
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#define I2C_NAME(s) (s)->
dev.
name
#define I2C_NAME(s) (s)->name
#include <linux/video_encoder.h>
...
...
drivers/media/video/bt819.c
View file @
658dcd3b
...
...
@@ -59,7 +59,7 @@ MODULE_LICENSE("GPL");
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#define I2C_NAME(s) (s)->
dev.
name
#define I2C_NAME(s) (s)->name
#include <linux/video_decoder.h>
...
...
drivers/media/video/bt856.c
View file @
658dcd3b
...
...
@@ -59,7 +59,7 @@ MODULE_LICENSE("GPL");
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#define I2C_NAME(s) (s)->
dev.
name
#define I2C_NAME(s) (s)->name
#include <linux/video_encoder.h>
...
...
drivers/media/video/saa7110.c
View file @
658dcd3b
...
...
@@ -42,7 +42,7 @@ MODULE_LICENSE("GPL");
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#define I2C_NAME(s) (s)->
dev.
name
#define I2C_NAME(s) (s)->name
#include <linux/videodev.h>
#include <linux/video_decoder.h>
...
...
drivers/media/video/saa7111.c
View file @
658dcd3b
...
...
@@ -55,7 +55,7 @@ MODULE_LICENSE("GPL");
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#define I2C_NAME(s) (s)->
dev.
name
#define I2C_NAME(s) (s)->name
#include <linux/video_decoder.h>
...
...
drivers/media/video/saa7114.c
View file @
658dcd3b
...
...
@@ -61,7 +61,7 @@ MODULE_LICENSE("GPL");
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#define I2C_NAME(x) (x)->
dev.
name
#define I2C_NAME(x) (x)->name
#include <linux/video_decoder.h>
...
...
drivers/media/video/saa7185.c
View file @
658dcd3b
...
...
@@ -55,7 +55,7 @@ MODULE_LICENSE("GPL");
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#define I2C_NAME(s) (s)->
dev.
name
#define I2C_NAME(s) (s)->name
#include <linux/video_encoder.h>
...
...
drivers/media/video/tvmixer.c
View file @
658dcd3b
...
...
@@ -291,7 +291,7 @@ static int tvmixer_clients(struct i2c_client *client)
devices
[
i
].
count
=
0
;
devices
[
i
].
dev
=
client
;
printk
(
"tvmixer: %s (%s) registered with minor %d
\n
"
,
client
->
dev
.
name
,
client
->
adapter
->
dev
.
name
,
minor
);
client
->
name
,
client
->
adapter
->
name
,
minor
);
return
0
;
}
...
...
drivers/media/video/vpx3220.c
View file @
658dcd3b
...
...
@@ -33,7 +33,7 @@
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#define I2C_NAME(x) (x)->
dev.
name
#define I2C_NAME(x) (x)->name
#include <linux/videodev.h>
#include <linux/video_decoder.h>
...
...
drivers/media/video/zoran.h
View file @
658dcd3b
...
...
@@ -146,11 +146,7 @@ Private IOCTL to set up for displaying MJPEG
#define ZORAN_NAME "ZORAN"
/* name of the device */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
#define ZR_DEVNAME(zr) (zr)->name
#else
#define ZR_DEVNAME(zr) (zr)->pci_dev->dev.name
#endif
#define ZR_DEVNAME(zr) pci_name((zr)->pci_dev)
#define BUZ_MAX_WIDTH (zr->timing->Wa)
#define BUZ_MAX_HEIGHT (zr->timing->Ha)
...
...
drivers/media/video/zoran_card.c
View file @
658dcd3b
...
...
@@ -54,7 +54,7 @@
#include "zoran_device.h"
#include "zoran_procfs.h"
#define I2C_NAME(x) (x)->
dev.
name
#define I2C_NAME(x) (x)->name
extern
const
struct
zoran_format
zoran_formats
[];
extern
const
int
zoran_num_formats
;
...
...
drivers/mtd/chips/sharp.c
View file @
658dcd3b
...
...
@@ -435,7 +435,7 @@ static int sharp_do_wait_for_ready(struct map_info *map, struct flchip *chip,
unsigned
long
adr
)
{
int
ret
;
int
timeo
;
unsigned
long
timeo
;
int
status
;
DECLARE_WAITQUEUE
(
wait
,
current
);
...
...
drivers/net/irda/vlsi_ir.c
View file @
658dcd3b
...
...
@@ -164,7 +164,7 @@ static int vlsi_proc_pdev(struct pci_dev *pdev, char *buf, int len)
return
0
;
out
+=
sprintf
(
out
,
"
\n
%s (vid/did: %04x/%04x)
\n
"
,
p
dev
->
dev
.
name
,
(
int
)
pdev
->
vendor
,
(
int
)
pdev
->
device
);
p
ci_name
(
pdev
)
,
(
int
)
pdev
->
vendor
,
(
int
)
pdev
->
device
);
out
+=
sprintf
(
out
,
"pci-power-state: %u
\n
"
,
(
unsigned
)
pdev
->
current_state
);
out
+=
sprintf
(
out
,
"resources: irq=%u / io=0x%04x / dma_mask=0x%016Lx
\n
"
,
pdev
->
irq
,
(
unsigned
)
pci_resource_start
(
pdev
,
0
),
(
u64
)
pdev
->
dma_mask
);
...
...
@@ -1522,7 +1522,7 @@ static void vlsi_tx_timeout(struct net_device *ndev)
if
(
vlsi_start_hw
(
idev
))
printk
(
KERN_CRIT
"%s: failed to restart hw - %s(%s) unusable!
\n
"
,
__FUNCTION__
,
idev
->
pdev
->
dev
.
name
,
ndev
->
name
);
__FUNCTION__
,
pci_name
(
idev
->
pdev
)
,
ndev
->
name
);
else
netif_start_queue
(
ndev
);
}
...
...
@@ -1772,7 +1772,7 @@ vlsi_irda_probe(struct pci_dev *pdev, const struct pci_device_id *id)
pdev
->
current_state
=
0
;
/* hw must be running now */
printk
(
KERN_INFO
"%s: IrDA PCI controller %s detected
\n
"
,
drivername
,
p
dev
->
dev
.
name
);
drivername
,
p
ci_name
(
pdev
)
);
if
(
!
pci_resource_start
(
pdev
,
0
)
||
!
(
pci_resource_flags
(
pdev
,
0
)
&
IORESOURCE_IO
)
)
{
...
...
@@ -1867,7 +1867,7 @@ static void __devexit vlsi_irda_remove(struct pci_dev *pdev)
* ndev->destructor called (if present) when going to free
*/
printk
(
KERN_INFO
"%s: %s removed
\n
"
,
drivername
,
p
dev
->
dev
.
name
);
printk
(
KERN_INFO
"%s: %s removed
\n
"
,
drivername
,
p
ci_name
(
pdev
)
);
}
#ifdef CONFIG_PM
...
...
@@ -1883,7 +1883,7 @@ static int vlsi_irda_save_state(struct pci_dev *pdev, u32 state)
{
if
(
state
<
1
||
state
>
3
)
{
printk
(
KERN_ERR
"%s - %s: invalid pm state request: %u
\n
"
,
__FUNCTION__
,
p
dev
->
dev
.
name
,
state
);
__FUNCTION__
,
p
ci_name
(
pdev
)
,
state
);
return
-
1
;
}
return
0
;
...
...
@@ -1896,11 +1896,11 @@ static int vlsi_irda_suspend(struct pci_dev *pdev, u32 state)
if
(
state
<
1
||
state
>
3
)
{
printk
(
KERN_ERR
"%s - %s: invalid pm state request: %u
\n
"
,
__FUNCTION__
,
p
dev
->
dev
.
name
,
state
);
__FUNCTION__
,
p
ci_name
(
pdev
)
,
state
);
return
0
;
}
if
(
!
ndev
)
{
printk
(
KERN_ERR
"%s - %s: no netdevice
\n
"
,
__FUNCTION__
,
p
dev
->
dev
.
name
);
printk
(
KERN_ERR
"%s - %s: no netdevice
\n
"
,
__FUNCTION__
,
p
ci_name
(
pdev
)
);
return
0
;
}
idev
=
ndev
->
priv
;
...
...
@@ -1912,7 +1912,7 @@ static int vlsi_irda_suspend(struct pci_dev *pdev, u32 state)
}
else
printk
(
KERN_ERR
"%s - %s: invalid suspend request %u -> %u
\n
"
,
__FUNCTION__
,
p
dev
->
dev
.
name
,
pdev
->
current_state
,
state
);
__FUNCTION__
,
p
ci_name
(
pdev
)
,
pdev
->
current_state
,
state
);
up
(
&
idev
->
sem
);
return
0
;
}
...
...
@@ -1939,14 +1939,14 @@ static int vlsi_irda_resume(struct pci_dev *pdev)
vlsi_irda_dev_t
*
idev
;
if
(
!
ndev
)
{
printk
(
KERN_ERR
"%s - %s: no netdevice
\n
"
,
__FUNCTION__
,
p
dev
->
dev
.
name
);
printk
(
KERN_ERR
"%s - %s: no netdevice
\n
"
,
__FUNCTION__
,
p
ci_name
(
pdev
)
);
return
0
;
}
idev
=
ndev
->
priv
;
down
(
&
idev
->
sem
);
if
(
pdev
->
current_state
==
0
)
{
up
(
&
idev
->
sem
);
printk
(
KERN_ERR
"%s - %s: already resumed
\n
"
,
__FUNCTION__
,
p
dev
->
dev
.
name
);
printk
(
KERN_ERR
"%s - %s: already resumed
\n
"
,
__FUNCTION__
,
p
ci_name
(
pdev
)
);
return
0
;
}
...
...
drivers/net/seeq8005.c
View file @
658dcd3b
...
...
@@ -706,7 +706,7 @@ static void hardware_send_packet(struct net_device * dev, char *buf, int length)
inline
void
wait_for_buffer
(
struct
net_device
*
dev
)
{
int
ioaddr
=
dev
->
base_addr
;
int
tmp
;
unsigned
long
tmp
;
int
status
;
tmp
=
jiffies
+
HZ
;
...
...
drivers/net/tokenring/smctr.c
View file @
658dcd3b
...
...
@@ -1151,14 +1151,14 @@ static int __init smctr_chk_isa(struct net_device *dev)
if(smctr_read_584_chksum(ioaddr))
{
printk(KERN_ERR "%s: EEPROM Checksum Failure\n", dev->name);
goto out3;
free_irq(dev->irq, dev);
goto out2;
}
*/
}
return
(
0
);
out3:
free_irq
(
dev
->
irq
,
dev
);
out2:
release_region
(
ioaddr
,
SMCTR_IO_EXTENT
);
out:
...
...
drivers/net/wan/Kconfig
View file @
658dcd3b
...
...
@@ -172,9 +172,6 @@ config COMX_PROTO_FR
<file:Documentation/modules.txt>. The module will be called
comx-proto-fr.
#
# The Etinc driver has not been tested as non-modular yet.
#
config DSCC4
tristate "Etinc PCISYNC serial board support"
depends on WAN && PCI && m
...
...
@@ -189,6 +186,31 @@ config DSCC4
The module will be called dscc4. For general information about
modules read <file:Documentation/modules.txt>.
config DSCC4_PCISYNC
bool "Etinc PCISYNC features"
depends on DSCC4
help
Due to Etinc's design choice for its PCISYNC cards, some operations
are only allowed on specific ports of the DSCC4. This option is the
only way for the driver to know that it shouldn't return a success
code for these operations.
Please say Y if your card is an Etinc's PCISYNC.
config DSCC4_PCI_RST
bool "Hard reset support"
depends on DSCC4
help
Various DSCC4 bugs forbid any reliable software reset of the asic.
As a replacement, some vendors provide a way to assert the PCI #RST
pin of DSCC4 through the GPIO port of the card. If you choose Y,
the driver will make use of this feature before module removal
(i.e. rmmod).
The feature is known to be available on Commtech's cards.
Contact your manufacturer for details.
Say Y if your card supports this feature.
#
# Lan Media's board. Currently 1000, 1200, 5200, 5245
#
...
...
drivers/net/wan/dscc4.c
View file @
658dcd3b
This diff is collapsed.
Click to expand it.
drivers/net/wan/sbni.c
View file @
658dcd3b
...
...
@@ -277,7 +277,7 @@ sbni_pci_probe( struct net_device *dev )
pci_irq_line
=
pdev
->
irq
;
/* Avoid already found cards from previous calls */
if
(
!
pci_
request_region
(
pci_ioaddr
,
SBNI_IO_EXTENT
,
dev
->
name
)
)
{
if
(
!
request_region
(
pci_ioaddr
,
SBNI_IO_EXTENT
,
dev
->
name
)
)
{
pci_read_config_word
(
pdev
,
PCI_SUBSYSTEM_ID
,
&
subsys
);
if
(
subsys
!=
2
||
/* Dual adapter is present */
check_region
(
pci_ioaddr
+=
4
,
SBNI_IO_EXTENT
)
)
...
...
drivers/scsi/NCR5380.c
View file @
658dcd3b
...
...
@@ -852,9 +852,7 @@ char *lprint_command(unsigned char *cmd, char *pos, char *buffer, int len);
static
char
*
lprint_opcode
(
int
opcode
,
char
*
pos
,
char
*
buffer
,
int
length
);
#ifndef NCR5380_proc_info
static
#endif
int
NCR5380_proc_info
(
struct
Scsi_Host
*
instance
,
char
*
buffer
,
char
**
start
,
off_t
offset
,
int
length
,
int
inout
)
{
char
*
pos
=
buffer
;
...
...
drivers/scsi/NCR5380.h
View file @
658dcd3b
...
...
@@ -310,10 +310,8 @@ static int NCR5380_bus_reset(Scsi_Cmnd * cmd);
static
int
NCR5380_host_reset
(
Scsi_Cmnd
*
cmd
);
static
int
NCR5380_device_reset
(
Scsi_Cmnd
*
cmd
);
static
int
NCR5380_queue_command
(
Scsi_Cmnd
*
cmd
,
void
(
*
done
)
(
Scsi_Cmnd
*
));
#ifdef NCR5380_proc_info
int
NCR5380_proc_info
(
struct
Scsi_Host
*
instance
,
char
*
buffer
,
char
**
start
,
static
int
NCR5380_proc_info
(
struct
Scsi_Host
*
instance
,
char
*
buffer
,
char
**
start
,
off_t
offset
,
int
length
,
int
inout
);
#endif
static
void
NCR5380_reselect
(
struct
Scsi_Host
*
instance
);
static
int
NCR5380_select
(
struct
Scsi_Host
*
instance
,
Scsi_Cmnd
*
cmd
,
int
tag
);
...
...
drivers/scsi/aacraid/aacraid.h
View file @
658dcd3b
...
...
@@ -549,7 +549,7 @@ struct aac_queue {
/* This is only valid for adapter to host command queues. */
spinlock_t
*
lock
;
/* Spinlock for this queue must take this lock before accessing the lock */
spinlock_t
lockdata
;
/* Actual lock (used only on one side of the lock) */
u
32
SavedIrql
;
/* Previous IRQL when the spin lock is taken */
u
nsigned
long
SavedIrql
;
/* Previous IRQL when the spin lock is taken */
u32
padding
;
/* Padding - FIXME - can remove I believe */
struct
aac_list_head
cmdq
;
/* A queue of FIBs which need to be prcessed by the FS thread. This is */
// struct list_head cmdq; /* A queue of FIBs which need to be prcessed by the FS thread. This is */
...
...
drivers/scsi/aha1740.c
View file @
658dcd3b
...
...
@@ -602,8 +602,8 @@ static int aha1740_probe (struct device *dev)
outb
(
G2CNTRL_HRST
,
G2CNTRL
(
slotbase
));
outb
(
0
,
G2CNTRL
(
slotbase
));
}
printk
(
KERN_INFO
"Configuring
%s
at IO:%x, IRQ %d
\n
"
,
dev
->
name
,
slotbase
,
irq_level
);
printk
(
KERN_INFO
"Configuring
slot %d
at IO:%x, IRQ %d
\n
"
,
edev
->
slot
,
slotbase
,
irq_level
);
printk
(
KERN_INFO
"aha174x: Extended translation %sabled.
\n
"
,
translation
?
"en"
:
"dis"
);
shpnt
=
scsi_host_alloc
(
&
aha1740_template
,
...
...
@@ -656,8 +656,7 @@ static __devexit int aha1740_remove (struct device *dev)
struct
Scsi_Host
*
shpnt
=
dev
->
driver_data
;
struct
aha1740_hostdata
*
host
=
HOSTDATA
(
shpnt
);
if
(
scsi_remove_host
(
shpnt
))
return
-
EBUSY
;
scsi_remove_host
(
shpnt
);
free_irq
(
shpnt
->
irq
,
shpnt
);
dma_unmap_single
(
dev
,
host
->
ecb_dma_addr
,
...
...
drivers/scsi/atari_NCR5380.c
View file @
658dcd3b
...
...
@@ -743,9 +743,7 @@ static void NCR5380_print_status (struct Scsi_Host *instance)
static
char
*
lprint_Scsi_Cmnd
(
Scsi_Cmnd
*
cmd
,
char
*
pos
,
char
*
buffer
,
int
length
);
#ifndef NCR5380_proc_info
static
#endif
int
NCR5380_proc_info
(
struct
Scsi_Host
*
instance
,
char
*
buffer
,
char
**
start
,
off_t
offset
,
int
length
,
int
inout
)
{
...
...
drivers/scsi/g_NCR5380.c
View file @
658dcd3b
...
...
@@ -780,7 +780,7 @@ static int sprint_Scsi_Cmnd(char *buffer, int len, Scsi_Cmnd * cmd)
* Locks: global cli/lock for queue walk
*/
int
generic_NCR5380_proc_info
(
struct
Scsi_Host
*
scsi_ptr
,
char
*
buffer
,
char
**
start
,
off_t
offset
,
int
length
,
int
inout
)
static
int
generic_NCR5380_proc_info
(
struct
Scsi_Host
*
scsi_ptr
,
char
*
buffer
,
char
**
start
,
off_t
offset
,
int
length
,
int
inout
)
{
int
len
=
0
;
NCR5380_local_declare
();
...
...
drivers/scsi/mac_NCR5380.c
View file @
658dcd3b
...
...
@@ -768,9 +768,7 @@ static void NCR5380_print_status (struct Scsi_Host *instance)
static
char
*
lprint_Scsi_Cmnd
(
Scsi_Cmnd
*
cmd
,
char
*
pos
,
char
*
buffer
,
int
length
);
#ifndef NCR5380_proc_info
static
#endif
int
NCR5380_proc_info
(
struct
Scsi_Host
*
instance
,
char
*
buffer
,
char
**
start
,
off_t
offset
,
int
length
,
int
inout
)
{
...
...
drivers/scsi/sun3_NCR5380.c
View file @
658dcd3b
...
...
@@ -754,7 +754,7 @@ static void NCR5380_print_status (struct Scsi_Host *instance)
static
char
*
lprint_Scsi_Cmnd
(
Scsi_Cmnd
*
cmd
,
char
*
pos
,
char
*
buffer
,
int
length
);
int
NCR5380_proc_info
(
struct
Scsi_Host
*
instance
,
char
*
buffer
,
char
**
start
,
static
int
NCR5380_proc_info
(
struct
Scsi_Host
*
instance
,
char
*
buffer
,
char
**
start
,
off_t
offset
,
int
length
,
int
inout
)
{
char
*
pos
=
buffer
;
...
...
drivers/scsi/ultrastor.c
View file @
658dcd3b
...
...
@@ -294,7 +294,7 @@ static inline void build_sg_list(struct mscp *, Scsi_Cmnd *SCpnt);
/* Always called with host lock held */
static
inline
int
find_and_clear_bit_16
(
unsigned
short
*
field
)
static
inline
int
find_and_clear_bit_16
(
unsigned
long
*
field
)
{
int
rv
;
...
...
drivers/usb/serial/console.c
View file @
658dcd3b
...
...
@@ -143,7 +143,7 @@ static int __init usb_console_setup(struct console *co, char *options)
return
-
ENODEV
;
}
port
=
&
serial
->
port
[
0
];
port
=
serial
->
port
[
0
];
port
->
tty
=
NULL
;
info
->
port
=
port
;
...
...
drivers/video/tridentfb.c
View file @
658dcd3b
...
...
@@ -454,9 +454,10 @@ static struct accel_switch accel_image = {
static
void
tridentfb_fillrect
(
struct
fb_info
*
info
,
const
struct
fb_fillrect
*
fr
)
{
int
bpp
=
info
->
var
.
bits_per_pixel
;
int
dx
,
dy
,
w
,
h
,
col
;
int
col
;
switch
(
bpp
)
{
default:
case
8
:
col
=
fr
->
color
;
break
;
case
16
:
col
=
((
u16
*
)(
info
->
pseudo_palette
))[
fr
->
color
];
...
...
@@ -1129,7 +1130,7 @@ static int __devinit trident_pci_probe(struct pci_dev * dev, const struct pci_de
return
-
1
;
}
output
(
"%s board found
\n
"
,
dev
->
dev
.
name
);
output
(
"%s board found
\n
"
,
pci_name
(
dev
)
);
#if 0
output("Trident board found : mem = %X,io = %X, mem_v = %X, io_v = %X\n",
tridentfb_fix.smem_start, tridentfb_fix.mmio_start, fb_info.screen_base, default_par.io_virt);
...
...
fs/block_dev.c
View file @
658dcd3b
...
...
@@ -419,12 +419,34 @@ void bd_forget(struct inode *inode)
int
bd_claim
(
struct
block_device
*
bdev
,
void
*
holder
)
{
int
res
=
-
EBUSY
;
int
res
;
spin_lock
(
&
bdev_lock
);
if
(
!
bdev
->
bd_holder
||
bdev
->
bd_holder
==
holder
)
{
bdev
->
bd_holder
=
holder
;
/* first decide result */
if
(
bdev
->
bd_holder
==
holder
)
res
=
0
;
/* already a holder */
else
if
(
bdev
->
bd_holder
!=
NULL
)
res
=
-
EBUSY
;
/* held by someone else */
else
if
(
bdev
->
bd_contains
==
bdev
)
res
=
0
;
/* is a whole device which isn't held */
else
if
(
bdev
->
bd_contains
->
bd_holder
==
bd_claim
)
res
=
0
;
/* is a partition of a device that is being partitioned */
else
if
(
bdev
->
bd_contains
->
bd_holder
!=
NULL
)
res
=
-
EBUSY
;
/* is a partition of a held device */
else
res
=
0
;
/* is a partition of an un-held device */
/* now impose change */
if
(
res
==
0
)
{
/* note that for a whole device bd_holders
* will be incremented twice, and bd_holder will
* be set to bd_claim before being set to holder
*/
bdev
->
bd_contains
->
bd_holders
++
;
bdev
->
bd_contains
->
bd_holder
=
bd_claim
;
bdev
->
bd_holders
++
;
res
=
0
;
bdev
->
bd_holder
=
holder
;
}
spin_unlock
(
&
bdev_lock
);
return
res
;
...
...
@@ -433,6 +455,8 @@ int bd_claim(struct block_device *bdev, void *holder)
void
bd_release
(
struct
block_device
*
bdev
)
{
spin_lock
(
&
bdev_lock
);
if
(
!--
bdev
->
bd_contains
->
bd_holders
)
bdev
->
bd_contains
->
bd_holder
=
NULL
;
if
(
!--
bdev
->
bd_holders
)
bdev
->
bd_holder
=
NULL
;
spin_unlock
(
&
bdev_lock
);
...
...
@@ -619,6 +643,7 @@ int blkdev_get(struct block_device *bdev, mode_t mode, unsigned flags, int kind)
int
blkdev_open
(
struct
inode
*
inode
,
struct
file
*
filp
)
{
struct
block_device
*
bdev
;
int
res
;
/*
* Preserve backwards compatibility and allow large file access
...
...
@@ -631,7 +656,18 @@ int blkdev_open(struct inode * inode, struct file * filp)
bd_acquire
(
inode
);
bdev
=
inode
->
i_bdev
;
return
do_open
(
bdev
,
inode
,
filp
);
res
=
do_open
(
bdev
,
inode
,
filp
);
if
(
res
)
return
res
;
if
(
!
(
filp
->
f_flags
&
O_EXCL
)
)
return
0
;
if
(
!
(
res
=
bd_claim
(
bdev
,
filp
)))
return
0
;
blkdev_put
(
bdev
,
BDEV_FILE
);
return
res
;
}
int
blkdev_put
(
struct
block_device
*
bdev
,
int
kind
)
...
...
@@ -680,6 +716,8 @@ int blkdev_put(struct block_device *bdev, int kind)
int
blkdev_close
(
struct
inode
*
inode
,
struct
file
*
filp
)
{
if
(
inode
->
i_bdev
->
bd_holder
==
filp
)
bd_release
(
inode
->
i_bdev
);
return
blkdev_put
(
inode
->
i_bdev
,
BDEV_FILE
);
}
...
...
fs/ext3/balloc.c
View file @
658dcd3b
...
...
@@ -279,7 +279,8 @@ void ext3_free_blocks (handle_t *handle, struct inode * inode,
return
;
}
/* For ext3 allocations, we must not reuse any blocks which are
/*
* For ext3 allocations, we must not reuse any blocks which are
* allocated in the bitmap buffer's "last committed data" copy. This
* prevents deletes from freeing up the page for reuse until we have
* committed the delete transaction.
...
...
@@ -294,14 +295,21 @@ void ext3_free_blocks (handle_t *handle, struct inode * inode,
* data-writes at some point, and disable it for metadata allocations or
* sync-data inodes.
*/
static
inline
int
ext3_test_allocatable
(
int
nr
,
struct
buffer_head
*
bh
,
int
have_access
)
static
inline
int
ext3_test_allocatable
(
int
nr
,
struct
buffer_head
*
bh
)
{
int
ret
;
struct
journal_head
*
jh
=
bh2jh
(
bh
);
if
(
ext3_test_bit
(
nr
,
bh
->
b_data
))
return
0
;
if
(
!
have_access
||
!
buffer_jbd
(
bh
)
||
!
bh2jh
(
bh
)
->
b_committed_data
)
return
1
;
return
!
ext3_test_bit
(
nr
,
bh2jh
(
bh
)
->
b_committed_data
);
jbd_lock_bh_state
(
bh
);
if
(
!
jh
->
b_committed_data
)
ret
=
1
;
else
ret
=
!
ext3_test_bit
(
nr
,
jh
->
b_committed_data
);
jbd_unlock_bh_state
(
bh
);
return
ret
;
}
/*
...
...
@@ -311,11 +319,12 @@ static inline int ext3_test_allocatable(int nr, struct buffer_head *bh,
* the initial goal; then for a free byte somewhere in the bitmap; then
* for any free bit in the bitmap.
*/
static
int
find_next_usable_block
(
int
start
,
struct
buffer_head
*
bh
,
int
maxblocks
,
int
have_acces
s
)
static
int
find_next_usable_block
(
int
start
,
struct
buffer_head
*
bh
,
int
maxblock
s
)
{
int
here
,
next
;
char
*
p
,
*
r
;
struct
journal_head
*
jh
=
bh2jh
(
bh
);
if
(
start
>
0
)
{
/*
...
...
@@ -328,48 +337,38 @@ static int find_next_usable_block(int start, struct buffer_head *bh,
*/
int
end_goal
=
(
start
+
63
)
&
~
63
;
here
=
ext3_find_next_zero_bit
(
bh
->
b_data
,
end_goal
,
start
);
if
(
here
<
end_goal
&&
ext3_test_allocatable
(
here
,
bh
,
have_access
))
if
(
here
<
end_goal
&&
ext3_test_allocatable
(
here
,
bh
))
return
here
;
ext3_debug
(
"Bit not found near goal
\n
"
);
ext3_debug
(
"Bit not found near goal
\n
"
);
}
here
=
start
;
if
(
here
<
0
)
here
=
0
;
/*
* There has been no free block found in the near vicinity of
* the goal: do a search forward through the block groups,
* searching in each group first for an entire free byte in the
* bitmap and then for any free bit.
*
* Search first in the remainder of the current group
*/
p
=
((
char
*
)
bh
->
b_data
)
+
(
here
>>
3
);
p
=
((
char
*
)
bh
->
b_data
)
+
(
here
>>
3
);
r
=
memscan
(
p
,
0
,
(
maxblocks
-
here
+
7
)
>>
3
);
next
=
(
r
-
((
char
*
)
bh
->
b_data
))
<<
3
;
next
=
(
r
-
((
char
*
)
bh
->
b_data
))
<<
3
;
if
(
next
<
maxblocks
&&
ext3_test_allocatable
(
next
,
bh
,
have_access
))
if
(
next
<
maxblocks
&&
ext3_test_allocatable
(
next
,
bh
))
return
next
;
/* The bitmap search --- search forward alternately
* through the actual bitmap and the last-committed copy
* until we find a bit free in both. */
/*
* The bitmap search --- search forward alternately through the actual
* bitmap and the last-committed copy until we find a bit free in
* both
*/
while
(
here
<
maxblocks
)
{
next
=
ext3_find_next_zero_bit
((
unsigned
long
*
)
bh
->
b_data
,
maxblocks
,
here
);
next
=
ext3_find_next_zero_bit
(
bh
->
b_data
,
maxblocks
,
here
);
if
(
next
>=
maxblocks
)
return
-
1
;
if
(
ext3_test_allocatable
(
next
,
bh
,
have_access
))
if
(
ext3_test_allocatable
(
next
,
bh
))
return
next
;
if
(
have_access
)
here
=
ext3_find_next_zero_bit
((
unsigned
long
*
)
bh2jh
(
bh
)
->
b_committed_data
,
maxblocks
,
next
);
jbd_lock_bh_state
(
bh
);
if
(
jh
->
b_committed_data
)
here
=
ext3_find_next_zero_bit
(
jh
->
b_committed_data
,
maxblocks
,
next
);
jbd_unlock_bh_state
(
bh
);
}
return
-
1
;
}
...
...
@@ -384,14 +383,20 @@ static int find_next_usable_block(int start, struct buffer_head *bh,
static
inline
int
claim_block
(
spinlock_t
*
lock
,
int
block
,
struct
buffer_head
*
bh
)
{
struct
journal_head
*
jh
=
bh2jh
(
bh
);
int
ret
;
if
(
ext3_set_bit_atomic
(
lock
,
block
,
bh
->
b_data
))
return
0
;
if
(
buffer_jbd
(
bh
)
&&
bh2jh
(
bh
)
->
b_committed_data
&&
ext3_test_bit
(
block
,
bh2jh
(
bh
)
->
b_committed_data
))
{
jbd_lock_bh_state
(
bh
);
if
(
jh
->
b_committed_data
&&
ext3_test_bit
(
block
,
jh
->
b_committed_data
))
{
ext3_clear_bit_atomic
(
lock
,
block
,
bh
->
b_data
);
return
0
;
ret
=
0
;
}
else
{
ret
=
1
;
}
return
1
;
jbd_unlock_bh_state
(
bh
);
return
ret
;
}
/*
...
...
@@ -403,43 +408,34 @@ static int
ext3_try_to_allocate
(
struct
super_block
*
sb
,
handle_t
*
handle
,
int
group
,
struct
buffer_head
*
bitmap_bh
,
int
goal
,
int
*
errp
)
{
int
i
,
fatal
=
0
;
int
have_access
=
0
;
int
i
;
int
fatal
;
int
credits
=
0
;
*
errp
=
0
;
if
(
goal
>=
0
&&
ext3_test_allocatable
(
goal
,
bitmap_bh
,
0
))
goto
got
;
repeat:
goal
=
find_next_usable_block
(
goal
,
bitmap_bh
,
EXT3_BLOCKS_PER_GROUP
(
sb
),
have_access
);
if
(
goal
<
0
)
/*
* Make sure we use undo access for the bitmap, because it is critical
* that we do the frozen_data COW on bitmap buffers in all cases even
* if the buffer is in BJ_Forget state in the committing transaction.
*/
BUFFER_TRACE
(
bitmap_bh
,
"get undo access for new block"
);
fatal
=
ext3_journal_get_undo_access
(
handle
,
bitmap_bh
,
&
credits
);
if
(
fatal
)
{
*
errp
=
fatal
;
goto
fail
;
}
for
(
i
=
0
;
i
<
7
&&
goal
>
0
&&
ext3_test_allocatable
(
goal
-
1
,
bitmap_bh
,
have_access
);
i
++
,
goal
--
);
got:
if
(
!
have_access
)
{
/*
* Make sure we use undo access for the bitmap, because it is
* critical that we do the frozen_data COW on bitmap buffers in
* all cases even if the buffer is in BJ_Forget state in the
* committing transaction.
*/
BUFFER_TRACE
(
bitmap_bh
,
"get undo access for new block"
);
fatal
=
ext3_journal_get_undo_access
(
handle
,
bitmap_bh
,
&
credits
);
if
(
fatal
)
{
*
errp
=
fatal
;
goto
fail
;
}
jbd_lock_bh_state
(
bitmap_bh
);
have_access
=
1
;
repeat:
if
(
goal
<
0
||
!
ext3_test_allocatable
(
goal
,
bitmap_bh
))
{
goal
=
find_next_usable_block
(
goal
,
bitmap_bh
,
EXT3_BLOCKS_PER_GROUP
(
sb
));
if
(
goal
<
0
)
goto
fail_access
;
for
(
i
=
0
;
i
<
7
&&
goal
>
0
&&
ext3_test_allocatable
(
goal
-
1
,
bitmap_bh
);
i
++
,
goal
--
);
}
if
(
!
claim_block
(
sb_bgl_lock
(
EXT3_SB
(
sb
),
group
),
goal
,
bitmap_bh
))
{
...
...
@@ -449,29 +445,25 @@ ext3_try_to_allocate(struct super_block *sb, handle_t *handle, int group,
*/
goal
++
;
if
(
goal
>=
EXT3_BLOCKS_PER_GROUP
(
sb
))
goto
fail
;
goto
fail
_access
;
goto
repeat
;
}
BUFFER_TRACE
(
bitmap_bh
,
"journal_dirty_metadata for bitmap block"
);
jbd_unlock_bh_state
(
bitmap_bh
);
fatal
=
ext3_journal_dirty_metadata
(
handle
,
bitmap_bh
);
if
(
fatal
)
{
*
errp
=
fatal
;
goto
fail
;
}
return
goal
;
fail_access:
BUFFER_TRACE
(
bitmap_bh
,
"journal_release_buffer"
);
ext3_journal_release_buffer
(
handle
,
bitmap_bh
,
credits
);
fail:
if
(
have_access
)
{
BUFFER_TRACE
(
bitmap_bh
,
"journal_release_buffer"
);
jbd_unlock_bh_state
(
bitmap_bh
);
ext3_journal_release_buffer
(
handle
,
bitmap_bh
,
credits
);
}
return
-
1
;
}
/*
* ext3_new_block uses a goal block to assist allocation. If the goal is
* free, or there is a free block within 32 blocks of the goal, that block
...
...
fs/ext3/namei.c
View file @
658dcd3b
...
...
@@ -1284,6 +1284,7 @@ static int make_indexed_dir(handle_t *handle, struct dentry *dentry,
unsigned
blocksize
;
struct
dx_hash_info
hinfo
;
u32
block
;
struct
fake_dirent
*
fde
;
blocksize
=
dir
->
i_sb
->
s_blocksize
;
dxtrace
(
printk
(
"Creating index
\n
"
));
...
...
@@ -1304,7 +1305,8 @@ static int make_indexed_dir(handle_t *handle, struct dentry *dentry,
data1
=
bh2
->
b_data
;
/* The 0th block becomes the root, move the dirents out */
de
=
(
struct
ext3_dir_entry_2
*
)
&
root
->
info
;
fde
=
&
root
->
dotdot
;
de
=
(
struct
ext3_dir_entry_2
*
)((
char
*
)
fde
+
fde
->
rec_len
);
len
=
((
char
*
)
root
)
+
blocksize
-
(
char
*
)
de
;
memcpy
(
data1
,
de
,
len
);
de
=
(
struct
ext3_dir_entry_2
*
)
data1
;
...
...
@@ -2006,9 +2008,9 @@ static int ext3_rmdir (struct inode * dir, struct dentry *dentry)
* recovery. */
inode
->
i_size
=
0
;
ext3_orphan_add
(
handle
,
inode
);
inode
->
i_ctime
=
dir
->
i_ctime
=
dir
->
i_mtime
=
CURRENT_TIME
;
ext3_mark_inode_dirty
(
handle
,
inode
);
dir
->
i_nlink
--
;
inode
->
i_ctime
=
dir
->
i_ctime
=
dir
->
i_mtime
=
CURRENT_TIME
;
ext3_update_dx_flag
(
dir
);
ext3_mark_inode_dirty
(
handle
,
dir
);
...
...
@@ -2060,8 +2062,8 @@ static int ext3_unlink(struct inode * dir, struct dentry *dentry)
inode
->
i_nlink
--
;
if
(
!
inode
->
i_nlink
)
ext3_orphan_add
(
handle
,
inode
);
ext3_mark_inode_dirty
(
handle
,
inode
);
inode
->
i_ctime
=
dir
->
i_ctime
;
ext3_mark_inode_dirty
(
handle
,
inode
);
retval
=
0
;
end_unlink:
...
...
@@ -2220,7 +2222,6 @@ static int ext3_rename (struct inode * old_dir, struct dentry *old_dentry,
goto
end_rename
;
}
else
{
BUFFER_TRACE
(
new_bh
,
"get write access"
);
BUFFER_TRACE
(
new_bh
,
"get_write_access"
);
ext3_journal_get_write_access
(
handle
,
new_bh
);
new_de
->
inode
=
le32_to_cpu
(
old_inode
->
i_ino
);
if
(
EXT3_HAS_INCOMPAT_FEATURE
(
new_dir
->
i_sb
,
...
...
fs/proc/array.c
View file @
658dcd3b
...
...
@@ -300,7 +300,7 @@ int proc_pid_stat(struct task_struct *task, char * buffer)
task_lock
(
task
);
mm
=
task
->
mm
;
if
(
mm
)
atomic_inc
(
&
mm
->
mm_users
);
mm
=
mmgrab
(
mm
);
if
(
task
->
tty
)
{
tty_pgrp
=
task
->
tty
->
pgrp
;
tty_nr
=
task
->
tty
->
device
;
...
...
include/asm-i386/mach-bigsmp/mach_apic.h
View file @
658dcd3b
...
...
@@ -98,6 +98,8 @@ extern u8 cpu_2_logical_apicid[];
/* Mapping from cpu number to logical apicid */
static
inline
int
cpu_to_logical_apicid
(
int
cpu
)
{
if
(
cpu
>=
NR_CPUS
)
return
BAD_APICID
;
return
(
int
)
cpu_2_logical_apicid
[
cpu
];
}
...
...
include/asm-i386/mach-es7000/mach_apic.h
View file @
658dcd3b
...
...
@@ -123,6 +123,8 @@ extern u8 cpu_2_logical_apicid[];
/* Mapping from cpu number to logical apicid */
static
inline
int
cpu_to_logical_apicid
(
int
cpu
)
{
if
(
cpu
>=
NR_CPUS
)
return
BAD_APICID
;
return
(
int
)
cpu_2_logical_apicid
[
cpu
];
}
...
...
include/asm-i386/mach-numaq/mach_apic.h
View file @
658dcd3b
...
...
@@ -60,6 +60,8 @@ static inline physid_mask_t ioapic_phys_id_map(physid_mask_t phys_map)
extern
u8
cpu_2_logical_apicid
[];
static
inline
int
cpu_to_logical_apicid
(
int
cpu
)
{
if
(
cpu
>=
NR_CPUS
)
return
BAD_APICID
;
return
(
int
)
cpu_2_logical_apicid
[
cpu
];
}
...
...
include/asm-i386/mach-summit/mach_apic.h
View file @
658dcd3b
...
...
@@ -80,6 +80,8 @@ static inline int apicid_to_node(int logical_apicid)
extern
u8
cpu_2_logical_apicid
[];
static
inline
int
cpu_to_logical_apicid
(
int
cpu
)
{
if
(
cpu
>=
NR_CPUS
)
return
BAD_APICID
;
return
(
int
)
cpu_2_logical_apicid
[
cpu
];
}
...
...
include/asm-i386/mach-visws/mach_apic.h
View file @
658dcd3b
#ifndef __ASM_MACH_APIC_H
#define __ASM_MACH_APIC_H
#include <mach_apicdef.h>
#define APIC_DFR_VALUE (APIC_DFR_FLAT)
#define no_balance_irq (0)
...
...
include/linux/sched.h
View file @
658dcd3b
...
...
@@ -638,6 +638,8 @@ static inline void mmdrop(struct mm_struct * mm)
/* mmput gets rid of the mappings and all user-space */
extern
void
mmput
(
struct
mm_struct
*
);
/* Grab a reference to the mm if its not already going away */
extern
struct
mm_struct
*
mmgrab
(
struct
mm_struct
*
);
/* Remove the current tasks stale references to the old mm_struct */
extern
void
mm_release
(
struct
task_struct
*
,
struct
mm_struct
*
);
...
...
@@ -745,7 +747,7 @@ static inline struct mm_struct * get_task_mm(struct task_struct * task)
task_lock
(
task
);
mm
=
task
->
mm
;
if
(
mm
)
atomic_inc
(
&
mm
->
mm_users
);
mm
=
mmgrab
(
mm
);
task_unlock
(
task
);
return
mm
;
...
...
init/Kconfig
View file @
658dcd3b
...
...
@@ -140,7 +140,7 @@ config IKCONFIG
config IKCONFIG_PROC
bool "Enable access to .config through /proc/ikconfig"
depends on IKCONFIG
depends on IKCONFIG
&& PROC_FS
---help---
This option enables access to kernel configuration file and build
information through /proc/ikconfig.
...
...
init/do_mounts.c
View file @
658dcd3b
...
...
@@ -286,8 +286,6 @@ void __init mount_block_root(char *name, int flags)
root_device_name
,
b
);
printk
(
"Please append a correct
\"
root=
\"
boot option
\n
"
);
mount_root_failed_msg
();
/* architecture dependent */
panic
(
"VFS: Unable to mount root fs on %s"
,
b
);
}
panic
(
"VFS: Unable to mount root fs on %s"
,
__bdevname
(
ROOT_DEV
,
b
));
...
...
init/do_mounts.h
View file @
658dcd3b
...
...
@@ -80,13 +80,3 @@ static inline void md_run_setup(void) {}
#endif
#ifdef CONFIG_MOUNT_ROOT_FAILED_MSG
void
mount_root_failed_msg
(
void
);
#else
static
inline
void
mount_root_failed_msg
(
void
)
{}
#endif
kernel/fork.c
View file @
658dcd3b
...
...
@@ -398,6 +398,23 @@ void mmput(struct mm_struct *mm)
}
}
/*
* Checks if the use count of an mm is non-zero and if so
* returns a reference to it after bumping up the use count.
* If the use count is zero, it means this mm is going away,
* so return NULL.
*/
struct
mm_struct
*
mmgrab
(
struct
mm_struct
*
mm
)
{
spin_lock
(
&
mmlist_lock
);
if
(
!
atomic_read
(
&
mm
->
mm_users
))
mm
=
NULL
;
else
atomic_inc
(
&
mm
->
mm_users
);
spin_unlock
(
&
mmlist_lock
);
return
mm
;
}
/* Please note the differences between mmput and mm_release.
* mmput is called whenever we stop holding onto a mm_struct,
* error success whatever.
...
...
mm/filemap.c
View file @
658dcd3b
...
...
@@ -67,6 +67,9 @@
* ->mmap_sem
* ->lock_page (access_process_vm)
*
* ->mmap_sem
* ->i_sem (msync)
*
* ->inode_lock
* ->sb_lock (fs/fs-writeback.c)
* ->mapping->page_lock (__sync_single_inode)
...
...
mm/vmscan.c
View file @
658dcd3b
...
...
@@ -279,6 +279,7 @@ shrink_list(struct list_head *page_list, unsigned int gfp_mask,
while
(
!
list_empty
(
page_list
))
{
struct
page
*
page
;
int
may_enter_fs
;
int
referenced
;
page
=
list_entry
(
page_list
->
prev
,
struct
page
,
lru
);
list_del
(
&
page
->
lru
);
...
...
@@ -298,7 +299,8 @@ shrink_list(struct list_head *page_list, unsigned int gfp_mask,
goto
keep_locked
;
pte_chain_lock
(
page
);
if
(
page_referenced
(
page
)
&&
page_mapping_inuse
(
page
))
{
referenced
=
page_referenced
(
page
);
if
(
referenced
&&
page_mapping_inuse
(
page
))
{
/* In active use or really unfreeable. Activate it. */
pte_chain_unlock
(
page
);
goto
activate_locked
;
...
...
@@ -358,6 +360,8 @@ shrink_list(struct list_head *page_list, unsigned int gfp_mask,
* See swapfile.c:page_queue_congested().
*/
if
(
PageDirty
(
page
))
{
if
(
referenced
)
goto
keep_locked
;
if
(
!
is_page_cache_freeable
(
page
))
goto
keep_locked
;
if
(
!
mapping
)
...
...
sound/isa/opl3sa2.c
View file @
658dcd3b
...
...
@@ -752,6 +752,7 @@ static int __devinit snd_opl3sa2_probe(int dev,
err
=
-
ENOMEM
;
goto
__error
;
}
spin_lock_init
(
&
chip
->
reg_lock
);
chip
->
irq
=
-
1
;
if
((
err
=
snd_device_new
(
card
,
SNDRV_DEV_LOWLEVEL
,
chip
,
&
ops
))
<
0
)
goto
__error
;
...
...
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