Commit b8ef289d authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git390.marist.edu/pub/scm/linux-2.6

* 'for-linus' of git://git390.marist.edu/pub/scm/linux-2.6:
  [S390] reset default for CONFIG_CHSC_SCH
  [S390] qdio: prevent compile warning under CONFIG_32BIT
  [S390] use asm-generic/cacheflush.h
  [S390] tlb: fix build error caused by THP
  [S390] missing sacf in uaccess
  [S390] pgtable_list corruption
  [S390] dasd: prevent panic with unresumed devices
parents d54cdc8c d9c11b1e
...@@ -406,7 +406,7 @@ config QDIO ...@@ -406,7 +406,7 @@ config QDIO
If unsure, say Y. If unsure, say Y.
config CHSC_SCH config CHSC_SCH
def_tristate y def_tristate m
prompt "Support for CHSC subchannels" prompt "Support for CHSC subchannels"
help help
This driver allows usage of CHSC subchannels. A CHSC subchannel This driver allows usage of CHSC subchannels. A CHSC subchannel
......
#ifndef _S390_CACHEFLUSH_H #ifndef _S390_CACHEFLUSH_H
#define _S390_CACHEFLUSH_H #define _S390_CACHEFLUSH_H
/* Keep includes the same across arches. */
#include <linux/mm.h>
/* Caches aren't brain-dead on the s390. */ /* Caches aren't brain-dead on the s390. */
#define flush_cache_all() do { } while (0) #include <asm-generic/cacheflush.h>
#define flush_cache_mm(mm) do { } while (0)
#define flush_cache_dup_mm(mm) do { } while (0)
#define flush_cache_range(vma, start, end) do { } while (0)
#define flush_cache_page(vma, vmaddr, pfn) do { } while (0)
#define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0
#define flush_dcache_page(page) do { } while (0)
#define flush_dcache_mmap_lock(mapping) do { } while (0)
#define flush_dcache_mmap_unlock(mapping) do { } while (0)
#define flush_icache_range(start, end) do { } while (0)
#define flush_icache_page(vma,pg) do { } while (0)
#define flush_icache_user_range(vma,pg,adr,len) do { } while (0)
#define flush_cache_vmap(start, end) do { } while (0)
#define flush_cache_vunmap(start, end) do { } while (0)
#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
memcpy(dst, src, len)
#define copy_from_user_page(vma, page, vaddr, dst, src, len) \
memcpy(dst, src, len)
#ifdef CONFIG_DEBUG_PAGEALLOC #ifdef CONFIG_DEBUG_PAGEALLOC
void kernel_map_pages(struct page *page, int numpages, int enable); void kernel_map_pages(struct page *page, int numpages, int enable);
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
*/ */
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/pagemap.h>
#include <linux/swap.h> #include <linux/swap.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/pgalloc.h> #include <asm/pgalloc.h>
......
...@@ -125,9 +125,9 @@ static size_t copy_in_user_std(size_t size, void __user *to, ...@@ -125,9 +125,9 @@ static size_t copy_in_user_std(size_t size, void __user *to,
unsigned long tmp1; unsigned long tmp1;
asm volatile( asm volatile(
" sacf 256\n"
" "AHI" %0,-1\n" " "AHI" %0,-1\n"
" jo 5f\n" " jo 5f\n"
" sacf 256\n"
" bras %3,3f\n" " bras %3,3f\n"
"0:"AHI" %0,257\n" "0:"AHI" %0,257\n"
"1: mvc 0(1,%1),0(%2)\n" "1: mvc 0(1,%1),0(%2)\n"
...@@ -142,9 +142,8 @@ static size_t copy_in_user_std(size_t size, void __user *to, ...@@ -142,9 +142,8 @@ static size_t copy_in_user_std(size_t size, void __user *to,
"3:"AHI" %0,-256\n" "3:"AHI" %0,-256\n"
" jnm 2b\n" " jnm 2b\n"
"4: ex %0,1b-0b(%3)\n" "4: ex %0,1b-0b(%3)\n"
" sacf 0\n"
"5: "SLR" %0,%0\n" "5: "SLR" %0,%0\n"
"6:\n" "6: sacf 0\n"
EX_TABLE(1b,6b) EX_TABLE(2b,0b) EX_TABLE(4b,0b) EX_TABLE(1b,6b) EX_TABLE(2b,0b) EX_TABLE(4b,0b)
: "+a" (size), "+a" (to), "+a" (from), "=a" (tmp1) : "+a" (size), "+a" (to), "+a" (from), "=a" (tmp1)
: : "cc", "memory"); : : "cc", "memory");
...@@ -156,9 +155,9 @@ static size_t clear_user_std(size_t size, void __user *to) ...@@ -156,9 +155,9 @@ static size_t clear_user_std(size_t size, void __user *to)
unsigned long tmp1, tmp2; unsigned long tmp1, tmp2;
asm volatile( asm volatile(
" sacf 256\n"
" "AHI" %0,-1\n" " "AHI" %0,-1\n"
" jo 5f\n" " jo 5f\n"
" sacf 256\n"
" bras %3,3f\n" " bras %3,3f\n"
" xc 0(1,%1),0(%1)\n" " xc 0(1,%1),0(%1)\n"
"0:"AHI" %0,257\n" "0:"AHI" %0,257\n"
...@@ -178,9 +177,8 @@ static size_t clear_user_std(size_t size, void __user *to) ...@@ -178,9 +177,8 @@ static size_t clear_user_std(size_t size, void __user *to)
"3:"AHI" %0,-256\n" "3:"AHI" %0,-256\n"
" jnm 2b\n" " jnm 2b\n"
"4: ex %0,0(%3)\n" "4: ex %0,0(%3)\n"
" sacf 0\n"
"5: "SLR" %0,%0\n" "5: "SLR" %0,%0\n"
"6:\n" "6: sacf 0\n"
EX_TABLE(1b,6b) EX_TABLE(2b,0b) EX_TABLE(4b,0b) EX_TABLE(1b,6b) EX_TABLE(2b,0b) EX_TABLE(4b,0b)
: "+a" (size), "+a" (to), "=a" (tmp1), "=a" (tmp2) : "+a" (size), "+a" (to), "=a" (tmp1), "=a" (tmp2)
: : "cc", "memory"); : : "cc", "memory");
......
...@@ -336,6 +336,7 @@ void page_table_free(struct mm_struct *mm, unsigned long *table) ...@@ -336,6 +336,7 @@ void page_table_free(struct mm_struct *mm, unsigned long *table)
page->flags ^= bits; page->flags ^= bits;
if (page->flags & FRAG_MASK) { if (page->flags & FRAG_MASK) {
/* Page now has some free pgtable fragments. */ /* Page now has some free pgtable fragments. */
if (!list_empty(&page->lru))
list_move(&page->lru, &mm->context.pgtable_list); list_move(&page->lru, &mm->context.pgtable_list);
page = NULL; page = NULL;
} else } else
......
...@@ -319,6 +319,9 @@ void dasd_alias_disconnect_device_from_lcu(struct dasd_device *device) ...@@ -319,6 +319,9 @@ void dasd_alias_disconnect_device_from_lcu(struct dasd_device *device)
private = (struct dasd_eckd_private *) device->private; private = (struct dasd_eckd_private *) device->private;
lcu = private->lcu; lcu = private->lcu;
/* nothing to do if already disconnected */
if (!lcu)
return;
device->discipline->get_uid(device, &uid); device->discipline->get_uid(device, &uid);
spin_lock_irqsave(&lcu->lock, flags); spin_lock_irqsave(&lcu->lock, flags);
list_del_init(&device->alias_list); list_del_init(&device->alias_list);
...@@ -680,6 +683,9 @@ int dasd_alias_remove_device(struct dasd_device *device) ...@@ -680,6 +683,9 @@ int dasd_alias_remove_device(struct dasd_device *device)
private = (struct dasd_eckd_private *) device->private; private = (struct dasd_eckd_private *) device->private;
lcu = private->lcu; lcu = private->lcu;
/* nothing to do if already removed */
if (!lcu)
return 0;
spin_lock_irqsave(&lcu->lock, flags); spin_lock_irqsave(&lcu->lock, flags);
_remove_device_from_lcu(lcu, device); _remove_device_from_lcu(lcu, device);
spin_unlock_irqrestore(&lcu->lock, flags); spin_unlock_irqrestore(&lcu->lock, flags);
......
...@@ -476,7 +476,7 @@ static inline void inbound_primed(struct qdio_q *q, int count) ...@@ -476,7 +476,7 @@ static inline void inbound_primed(struct qdio_q *q, int count)
static int get_inbound_buffer_frontier(struct qdio_q *q) static int get_inbound_buffer_frontier(struct qdio_q *q)
{ {
int count, stop; int count, stop;
unsigned char state; unsigned char state = 0;
/* /*
* Don't check 128 buffers, as otherwise qdio_inbound_q_moved * Don't check 128 buffers, as otherwise qdio_inbound_q_moved
...@@ -643,7 +643,7 @@ void qdio_inbound_processing(unsigned long data) ...@@ -643,7 +643,7 @@ void qdio_inbound_processing(unsigned long data)
static int get_outbound_buffer_frontier(struct qdio_q *q) static int get_outbound_buffer_frontier(struct qdio_q *q)
{ {
int count, stop; int count, stop;
unsigned char state; unsigned char state = 0;
if (need_siga_sync(q)) if (need_siga_sync(q))
if (((queue_type(q) != QDIO_IQDIO_QFMT) && if (((queue_type(q) != QDIO_IQDIO_QFMT) &&
......
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