Commit f3b6be8b authored by Vojtech Pavlik's avatar Vojtech Pavlik

Merge bkbits:input into suse.cz:/home/vojtech/bk/input

parents 8f10a98a 7b0f9236
......@@ -8,6 +8,7 @@
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/kernel.h>
#include <linux/mm.h>
......@@ -75,7 +76,7 @@ static int adjust_pte(struct vm_area_struct *vma, unsigned long address)
return 0;
}
void __flush_dcache_page(struct page *page)
static void __flush_dcache_page(struct page *page)
{
struct address_space *mapping = page_mapping(page);
struct mm_struct *mm = current->active_mm;
......@@ -111,6 +112,17 @@ void __flush_dcache_page(struct page *page)
flush_dcache_mmap_unlock(mapping);
}
void flush_dcache_page(struct page *page)
{
struct address_space *mapping = page_mapping(page);
if (mapping && !mapping_mapped(mapping))
set_bit(PG_dcache_dirty, &page->flags);
else
__flush_dcache_page(page);
}
EXPORT_SYMBOL(flush_dcache_page);
static void
make_coherent(struct vm_area_struct *vma, unsigned long addr, struct page *page, int dirty)
{
......
......@@ -14,8 +14,6 @@
#include <asm/proc-fns.h>
#include <asm/tlbflush.h>
EXPORT_SYMBOL(__flush_dcache_page);
#ifndef MULTI_CPU
EXPORT_SYMBOL(cpu_dcache_clean_area);
EXPORT_SYMBOL(cpu_set_pte);
......@@ -28,7 +26,6 @@ EXPORT_SYMBOL_NOVERS(__cpuc_flush_kern_all);
EXPORT_SYMBOL_NOVERS(__cpuc_flush_user_all);
EXPORT_SYMBOL_NOVERS(__cpuc_flush_user_range);
EXPORT_SYMBOL_NOVERS(__cpuc_coherent_kern_range);
EXPORT_SYMBOL_NOVERS(__cpuc_flush_dcache_page);
#else
EXPORT_SYMBOL(cpu_cache);
#endif
......
......@@ -6,7 +6,7 @@
# To add an entry into this database, please see Documentation/arm/README,
# or contact rmk@arm.linux.org.uk
#
# Last update: Thu Apr 29 19:06:33 2004
# Last update: Fri May 28 13:17:46 2004
#
# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
#
......@@ -509,7 +509,7 @@ s3c5500 MACH_S3C5500 S3C5500 498
smdk5500 MACH_SMDK5500 SMDK5500 499
signalsync MACH_SIGNALSYNC SIGNALSYNC 500
nbc MACH_NBC NBC 501
er4525 MACH_ER4525 ER4525 502
kodiak MACH_KODIAK KODIAK 502
netbookpro MACH_NETBOOKPRO NETBOOKPRO 503
hw90200 MACH_HW90200 HW90200 504
condor MACH_CONDOR CONDOR 505
......@@ -533,3 +533,16 @@ emc1000 MACH_EMC1000 EMC1000 522
tidsc25 MACH_TIDSC25 TIDSC25 523
akcpmxl MACH_AKCPMXL AKCPMXL 524
av3xx MACH_AV3XX AV3XX 525
avila MACH_AVILA AVILA 526
pxa_mpm10 MACH_PXA_MPM10 PXA_MPM10 527
pxa_kyanite MACH_PXA_KYANITE PXA_KYANITE 528
sgold MACH_SGOLD SGOLD 529
oscar MACH_OSCAR OSCAR 530
epxa4usb2 MACH_EPXA4USB2 EPXA4USB2 531
xsengine MACH_XSENGINE XSENGINE 532
ip600 MACH_IP600 IP600 533
mcan2 MACH_MCAN2 MCAN2 534
ddi_blueridge MACH_DDI_BLUERIDGE DDI_BLUERIDGE 535
skyminder MACH_SKYMINDER SKYMINDER 536
lpd79520 MACH_LPD79520 LPD79520 537
edb9302 MACH_EDB9302 EDB9302 538
......@@ -797,6 +797,7 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
{ exploding_pnp_bios, "ASUS P4P800", { /* PnPBIOS GPF on boot */
MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer Inc."),
MATCH(DMI_BOARD_NAME, "P4P800"),
NO_MATCH, NO_MATCH
} },
/* Machines which have problems handling enabled local APICs */
......
......@@ -66,6 +66,17 @@ void flush_hash_one_pte(pte_t *ptep)
flush_hash_pages(mm->context, addr, ptephys, 1);
}
/*
* Called by ptep_set_access_flags, must flush on CPUs for which the
* DSI handler can't just "fixup" the TLB on a write fault
*/
void flush_tlb_page_nohash(struct vm_area_struct *vma, unsigned long addr)
{
if (Hash != 0)
return;
_tlbie(addr);
}
/*
* Called at the end of a mmu_gather operation to make sure the
* TLB flush is completely done.
......
......@@ -4525,7 +4525,7 @@ static int mgsl_init_tty(void)
/* enumerate user specified ISA adapters
*/
static int mgsl_enum_isa_devices(void)
static void mgsl_enum_isa_devices(void)
{
struct mgsl_struct *info;
int i;
......
......@@ -122,6 +122,7 @@ int sbusfb_ioctl_helper(unsigned long cmd, unsigned long arg,
cmap.red = &red;
cmap.green = &green;
cmap.blue = &blue;
cmap.transp = NULL;
for (i = 0; i < count; i++) {
int err;
......
......@@ -291,17 +291,7 @@ flush_cache_page(struct vm_area_struct *vma, unsigned long user_addr)
* about to change to user space. This is the same method as used on SPARC64.
* See update_mmu_cache for the user space part.
*/
extern void __flush_dcache_page(struct page *);
static inline void flush_dcache_page(struct page *page)
{
struct address_space *mapping = page_mapping(page);
if (mapping && !mapping_mapped(mapping))
set_bit(PG_dcache_dirty, &page->flags);
else
__flush_dcache_page(page);
}
extern void flush_dcache_page(struct page *);
#define flush_dcache_mmap_lock(mapping) \
spin_lock_irq(&(mapping)->tree_lock)
......
......@@ -555,8 +555,12 @@ static inline void __ptep_set_access_flags(pte_t *ptep, pte_t entry, int dirty)
(_PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_RW);
pte_update(ptep, 0, bits);
}
#define ptep_set_access_flags(__vma, __address, __ptep, __entry, __dirty) \
__ptep_set_access_flags(__ptep, __entry, __dirty)
do { \
__ptep_set_access_flags(__ptep, __entry, __dirty); \
flush_tlb_page_nohash(__vma, __address); \
} while(0)
/*
* Macro to mark a page protection value as "uncacheable".
......
......@@ -29,6 +29,9 @@ static inline void flush_tlb_mm(struct mm_struct *mm)
static inline void flush_tlb_page(struct vm_area_struct *vma,
unsigned long vmaddr)
{ _tlbie(vmaddr); }
static inline void flush_tlb_page_nohash(struct vm_area_struct *vma,
unsigned long vmaddr)
{ _tlbie(vmaddr); }
static inline void flush_tlb_range(struct vm_area_struct *vma,
unsigned long start, unsigned long end)
{ __tlbia(); }
......@@ -44,6 +47,9 @@ static inline void flush_tlb_mm(struct mm_struct *mm)
static inline void flush_tlb_page(struct vm_area_struct *vma,
unsigned long vmaddr)
{ _tlbie(vmaddr); }
static inline void flush_tlb_page_nohash(struct vm_area_struct *vma,
unsigned long vmaddr)
{ _tlbie(vmaddr); }
static inline void flush_tlb_range(struct mm_struct *mm,
unsigned long start, unsigned long end)
{ __tlbia(); }
......@@ -56,6 +62,7 @@ struct mm_struct;
struct vm_area_struct;
extern void flush_tlb_mm(struct mm_struct *mm);
extern void flush_tlb_page(struct vm_area_struct *vma, unsigned long vmaddr);
extern void flush_tlb_page_nohash(struct vm_area_struct *vma, unsigned long addr);
extern void flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
unsigned long end);
extern void flush_tlb_kernel_range(unsigned long start, unsigned long end);
......
......@@ -428,7 +428,10 @@ static inline void __ptep_set_access_flags(pte_t *ptep, pte_t entry, int dirty)
:"cc");
}
#define ptep_set_access_flags(__vma, __address, __ptep, __entry, __dirty) \
__ptep_set_access_flags(__ptep, __entry, __dirty)
do { \
__ptep_set_access_flags(__ptep, __entry, __dirty); \
flush_tlb_page_nohash(__vma, __address); \
} while(0)
/*
* Macro to mark a page protection value as "uncacheable".
......
......@@ -6,6 +6,7 @@
*
* - flush_tlb_mm(mm) flushes the specified mm context TLB's
* - flush_tlb_page(vma, vmaddr) flushes one page
* - flush_tlb_page_nohash(vma, vmaddr) flushes one page if SW loaded TLB
* - flush_tlb_range(vma, start, end) flushes a range of pages
* - flush_tlb_kernel_range(start, end) flushes a range of kernel pages
* - flush_tlb_pgtables(mm, start, end) flushes a range of page tables
......@@ -39,6 +40,7 @@ static inline void flush_tlb_pending(void)
#define flush_tlb_mm(mm) flush_tlb_pending()
#define flush_tlb_page(vma, addr) flush_tlb_pending()
#define flush_tlb_page_nohash(vma, addr) do { } while (0)
#define flush_tlb_range(vma, start, end) \
do { (void)(start); flush_tlb_pending(); } while (0)
#define flush_tlb_kernel_range(start, end) flush_tlb_pending()
......
......@@ -171,6 +171,12 @@ extern void nf_reinject(struct sk_buff *skb,
struct nf_info *info,
unsigned int verdict);
extern inline struct ipt_target *
ipt_find_target_lock(const char *name, int *error, struct semaphore *mutex);
extern inline struct ip6t_target *
ip6t_find_target_lock(const char *name, int *error, struct semaphore *mutex);
extern inline struct arpt_target *
arpt_find_target_lock(const char *name, int *error, struct semaphore *mutex);
extern void (*ip_ct_attach)(struct sk_buff *, struct nf_ct_info *);
#ifdef CONFIG_NETFILTER_DEBUG
......
......@@ -17,4 +17,5 @@
#define NF_ARP_FORWARD 2
#define NF_ARP_NUMHOOKS 3
static DECLARE_MUTEX(arpt_mutex);
#endif /* __LINUX_ARP_NETFILTER_H */
......@@ -283,6 +283,8 @@ struct ipt_get_entries
struct ipt_entry entrytable[0];
};
extern struct semaphore ipt_mutex;
/* Standard return verdict, or do jump. */
#define IPT_STANDARD_TARGET ""
/* Error verdict. */
......@@ -334,6 +336,7 @@ ipt_get_target(struct ipt_entry *e)
/*
* Main firewall chains definitions and global var's definitions.
*/
static DECLARE_MUTEX(ipt_mutex);
#ifdef __KERNEL__
#include <linux/init.h>
......@@ -406,6 +409,11 @@ struct ipt_target
struct module *me;
};
extern struct ipt_target *
ipt_find_target_lock(const char *name, int *error, struct semaphore *mutex);
extern struct arpt_target *
arpt_find_target_lock(const char *name, int *error, struct semaphore *mutex);
extern int ipt_register_target(struct ipt_target *target);
extern void ipt_unregister_target(struct ipt_target *target);
......
......@@ -106,6 +106,8 @@ struct ip6t_counters
u_int64_t pcnt, bcnt; /* Packet and byte counters */
};
static DECLARE_MUTEX(ip6t_mutex);
/* Values for "flag" field in struct ip6t_ip6 (general ip6 structure). */
#define IP6T_F_PROTO 0x01 /* Set if rule cares about upper
protocols */
......
......@@ -10,6 +10,7 @@
#define _LINUX_WATCHDOG_H
#include <linux/ioctl.h>
#include <linux/types.h>
#define WATCHDOG_IOCTL_BASE 'W'
......
......@@ -970,6 +970,9 @@ extern int tcp_sync_mss(struct sock *sk, u32 pmtu);
extern const char timer_bug_msg[];
/* tcp_diag.c */
extern void tcp_get_info(struct sock *, struct tcp_info *);
/* Read 'sendfile()'-style from a TCP socket */
typedef int (*sk_read_actor_t)(read_descriptor_t *, struct sk_buff *,
unsigned int, size_t);
......
......@@ -762,6 +762,13 @@ static int try_to_wake_up(task_t * p, unsigned int state, int sync)
load = source_load(cpu);
this_load = target_load(this_cpu);
/*
* If sync wakeup then subtract the (maximum possible) effect of
* the currently running task from the load of the current CPU:
*/
if (sync)
this_load -= SCHED_LOAD_SCALE;
/* Don't pull the task off an idle CPU to a busy one */
if (load < SCHED_LOAD_SCALE && load + this_load > SCHED_LOAD_SCALE
&& this_load > load)
......
......@@ -56,7 +56,6 @@ do { \
#endif
#define SMP_ALIGN(x) (((x) + SMP_CACHE_BYTES-1) & ~(SMP_CACHE_BYTES-1))
static DECLARE_MUTEX(arpt_mutex);
#define ASSERT_READ_LOCK(x) ARP_NF_ASSERT(down_trylock(&arpt_mutex) != 0)
#define ASSERT_WRITE_LOCK(x) ARP_NF_ASSERT(down_trylock(&arpt_mutex) != 0)
......@@ -388,12 +387,12 @@ find_inlist_lock(struct list_head *head,
}
#endif
static inline struct arpt_table *find_table_lock(const char *name, int *error, struct semaphore *mutex)
static inline struct arpt_table *arpt_find_table_lock(const char *name, int *error, struct semaphore *mutex)
{
return find_inlist_lock(&arpt_tables, name, "arptable_", error, mutex);
}
static inline struct arpt_target *find_target_lock(const char *name, int *error, struct semaphore *mutex)
struct arpt_target *arpt_find_target_lock(const char *name, int *error, struct semaphore *mutex)
{
return find_inlist_lock(&arpt_target, name, "arpt_", error, mutex);
}
......@@ -543,7 +542,7 @@ static inline int check_entry(struct arpt_entry *e, const char *name, unsigned i
}
t = arpt_get_target(e);
target = find_target_lock(t->u.user.name, &ret, &arpt_mutex);
target = arpt_find_target_lock(t->u.user.name, &ret, &arpt_mutex);
if (!target) {
duprintf("check_entry: `%s' not found\n", t->u.user.name);
goto out;
......@@ -843,7 +842,7 @@ static int get_entries(const struct arpt_get_entries *entries,
int ret;
struct arpt_table *t;
t = find_table_lock(entries->name, &ret, &arpt_mutex);
t = arpt_find_table_lock(entries->name, &ret, &arpt_mutex);
if (t) {
duprintf("t->private->number = %u\n",
t->private->number);
......@@ -909,7 +908,7 @@ static int do_replace(void __user *user, unsigned int len)
duprintf("arp_tables: Translated table\n");
t = find_table_lock(tmp.name, &ret, &arpt_mutex);
t = arpt_find_table_lock(tmp.name, &ret, &arpt_mutex);
if (!t)
goto free_newinfo_counters_untrans;
......@@ -1002,7 +1001,7 @@ static int do_add_counters(void __user *user, unsigned int len)
goto free;
}
t = find_table_lock(tmp.name, &ret, &arpt_mutex);
t = arpt_find_table_lock(tmp.name, &ret, &arpt_mutex);
if (!t)
goto free;
......@@ -1075,7 +1074,7 @@ static int do_arpt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len
break;
}
name[ARPT_TABLE_MAXNAMELEN-1] = '\0';
t = find_table_lock(name, &ret, &arpt_mutex);
t = arpt_find_table_lock(name, &ret, &arpt_mutex);
if (t) {
struct arpt_getinfo info;
......@@ -1323,6 +1322,7 @@ static void __exit fini(void)
EXPORT_SYMBOL(arpt_register_table);
EXPORT_SYMBOL(arpt_unregister_table);
EXPORT_SYMBOL(arpt_do_table);
EXPORT_SYMBOL(arpt_find_target_lock);
EXPORT_SYMBOL(arpt_register_target);
EXPORT_SYMBOL(arpt_unregister_target);
......
......@@ -61,9 +61,6 @@ do { \
#endif
#define SMP_ALIGN(x) (((x) + SMP_CACHE_BYTES-1) & ~(SMP_CACHE_BYTES-1))
/* Mutex protects lists (only traversed in user context). */
static DECLARE_MUTEX(ipt_mutex);
/* Must have mutex */
#define ASSERT_READ_LOCK(x) IP_NF_ASSERT(down_trylock(&ipt_mutex) != 0)
#define ASSERT_WRITE_LOCK(x) IP_NF_ASSERT(down_trylock(&ipt_mutex) != 0)
......@@ -418,7 +415,7 @@ find_inlist_lock_noload(struct list_head *head,
{
void *ret;
#if 0
#if 0
duprintf("find_inlist: searching for `%s' in %s.\n",
name, head == &ipt_target ? "ipt_target"
: head == &ipt_match ? "ipt_match"
......@@ -461,7 +458,7 @@ find_inlist_lock(struct list_head *head,
#endif
static inline struct ipt_table *
find_table_lock(const char *name, int *error, struct semaphore *mutex)
ipt_find_table_lock(const char *name, int *error, struct semaphore *mutex)
{
return find_inlist_lock(&ipt_tables, name, "iptable_", error, mutex);
}
......@@ -472,8 +469,8 @@ find_match_lock(const char *name, int *error, struct semaphore *mutex)
return find_inlist_lock(&ipt_match, name, "ipt_", error, mutex);
}
static inline struct ipt_target *
find_target_lock(const char *name, int *error, struct semaphore *mutex)
struct ipt_target *
ipt_find_target_lock(const char *name, int *error, struct semaphore *mutex)
{
return find_inlist_lock(&ipt_target, name, "ipt_", error, mutex);
}
......@@ -688,7 +685,7 @@ check_entry(struct ipt_entry *e, const char *name, unsigned int size,
goto cleanup_matches;
t = ipt_get_target(e);
target = find_target_lock(t->u.user.name, &ret, &ipt_mutex);
target = ipt_find_target_lock(t->u.user.name, &ret, &ipt_mutex);
if (!target) {
duprintf("check_entry: `%s' not found\n", t->u.user.name);
goto cleanup_matches;
......@@ -1025,7 +1022,7 @@ get_entries(const struct ipt_get_entries *entries,
int ret;
struct ipt_table *t;
t = find_table_lock(entries->name, &ret, &ipt_mutex);
t = ipt_find_table_lock(entries->name, &ret, &ipt_mutex);
if (t) {
duprintf("t->private->number = %u\n",
t->private->number);
......@@ -1092,7 +1089,7 @@ do_replace(void __user *user, unsigned int len)
duprintf("ip_tables: Translated table\n");
t = find_table_lock(tmp.name, &ret, &ipt_mutex);
t = ipt_find_table_lock(tmp.name, &ret, &ipt_mutex);
if (!t)
goto free_newinfo_counters_untrans;
......@@ -1195,7 +1192,7 @@ do_add_counters(void __user *user, unsigned int len)
goto free;
}
t = find_table_lock(tmp.name, &ret, &ipt_mutex);
t = ipt_find_table_lock(tmp.name, &ret, &ipt_mutex);
if (!t)
goto free;
......@@ -1270,7 +1267,7 @@ do_ipt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
break;
}
name[IPT_TABLE_MAXNAMELEN-1] = '\0';
t = find_table_lock(name, &ret, &ipt_mutex);
t = ipt_find_table_lock(name, &ret, &ipt_mutex);
if (t) {
struct ipt_getinfo info;
......@@ -1855,6 +1852,7 @@ EXPORT_SYMBOL(ipt_unregister_match);
EXPORT_SYMBOL(ipt_do_table);
EXPORT_SYMBOL(ipt_register_target);
EXPORT_SYMBOL(ipt_unregister_target);
EXPORT_SYMBOL(ipt_find_target_lock);
module_init(init);
module_exit(fini);
......@@ -66,8 +66,6 @@ do { \
#endif
#define SMP_ALIGN(x) (((x) + SMP_CACHE_BYTES-1) & ~(SMP_CACHE_BYTES-1))
/* Mutex protects lists (only traversed in user context). */
static DECLARE_MUTEX(ip6t_mutex);
/* Must have mutex */
#define ASSERT_READ_LOCK(x) IP_NF_ASSERT(down_trylock(&ip6t_mutex) != 0)
......@@ -544,7 +542,7 @@ find_inlist_lock(struct list_head *head,
#endif
static inline struct ip6t_table *
find_table_lock(const char *name, int *error, struct semaphore *mutex)
ip6t_find_table_lock(const char *name, int *error, struct semaphore *mutex)
{
return find_inlist_lock(&ip6t_tables, name, "ip6table_", error, mutex);
}
......@@ -555,8 +553,8 @@ find_match_lock(const char *name, int *error, struct semaphore *mutex)
return find_inlist_lock(&ip6t_match, name, "ip6t_", error, mutex);
}
static inline struct ip6t_target *
find_target_lock(const char *name, int *error, struct semaphore *mutex)
struct ip6t_target *
ip6t_find_target_lock(const char *name, int *error, struct semaphore *mutex)
{
return find_inlist_lock(&ip6t_target, name, "ip6t_", error, mutex);
}
......@@ -771,7 +769,7 @@ check_entry(struct ip6t_entry *e, const char *name, unsigned int size,
goto cleanup_matches;
t = ip6t_get_target(e);
target = find_target_lock(t->u.user.name, &ret, &ip6t_mutex);
target = ip6t_find_target_lock(t->u.user.name, &ret, &ip6t_mutex);
if (!target) {
duprintf("check_entry: `%s' not found\n", t->u.user.name);
goto cleanup_matches;
......@@ -1111,7 +1109,7 @@ get_entries(const struct ip6t_get_entries *entries,
int ret;
struct ip6t_table *t;
t = find_table_lock(entries->name, &ret, &ip6t_mutex);
t = ip6t_find_table_lock(entries->name, &ret, &ip6t_mutex);
if (t) {
duprintf("t->private->number = %u\n",
t->private->number);
......@@ -1174,7 +1172,7 @@ do_replace(void __user *user, unsigned int len)
duprintf("ip_tables: Translated table\n");
t = find_table_lock(tmp.name, &ret, &ip6t_mutex);
t = ip6t_find_table_lock(tmp.name, &ret, &ip6t_mutex);
if (!t)
goto free_newinfo_counters_untrans;
......@@ -1276,7 +1274,7 @@ do_add_counters(void __user *user, unsigned int len)
goto free;
}
t = find_table_lock(tmp.name, &ret, &ip6t_mutex);
t = ip6t_find_table_lock(tmp.name, &ret, &ip6t_mutex);
if (!t)
goto free;
......@@ -1351,7 +1349,7 @@ do_ip6t_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
break;
}
name[IP6T_TABLE_MAXNAMELEN-1] = '\0';
t = find_table_lock(name, &ret, &ip6t_mutex);
t = ip6t_find_table_lock(name, &ret, &ip6t_mutex);
if (t) {
struct ip6t_getinfo info;
......@@ -1964,6 +1962,7 @@ static void __exit fini(void)
EXPORT_SYMBOL(ip6t_register_table);
EXPORT_SYMBOL(ip6t_unregister_table);
EXPORT_SYMBOL(ip6t_do_table);
EXPORT_SYMBOL(ip6t_find_target_lock);
EXPORT_SYMBOL(ip6t_register_match);
EXPORT_SYMBOL(ip6t_unregister_match);
EXPORT_SYMBOL(ip6t_register_target);
......
......@@ -493,7 +493,7 @@ gss_pipe_downcall(struct file *filp, const char *src, size_t mlen)
spin_unlock(&gss_auth->lock);
rpc_release_client(clnt);
kfree(obj.data);
dprintk("RPC: gss_pipe_downcall returning length %u\n", mlen);
dprintk("RPC: gss_pipe_downcall returning length %Zu\n", mlen);
return mlen;
err:
if (ctx)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment