s390 patches for 3.1-rc7
Subsystems (4)
Hi Linus,
please pull from 'for-linus' branch of
git://git390.marist.edu/pub/scm/linux-2.6.git for-linus
to receive the following updates:
Carsten Otte (1):
[S390] gmap: always up mmap_sem properly
Martin Schwidefsky (1):
[S390] Do not clobber personality flags on exec
Peter Oberparleiter (1):
[S390] cio: fix cio_tpi ignoring adapter interrupts
arch/s390/include/asm/elf.h | 3 ++- arch/s390/mm/pgtable.c | 7 ++++--- drivers/s390/cio/cio.c | 8 ++++++-- 3 files changed, 12 insertions(+), 6 deletions(-)
arch/s390/include/asm/elf.h +2 -1
@@ -188,7 +188,8 @@ extern char elf_platform[];#define SET_PERSONALITY (ex) \ do { \ if (personality(current->personality) != PER_LINUX32) \ - set_personality(PER_LINUX); \ + set_personality(PER_LINUX | \ + (current->personality & ~PER_MASK)); \ if ((ex).e_ident[EI_CLASS] == ELFCLASS32) \ set_thread_flag(TIF_31BIT); \ else \
arch/s390/mm/pgtable.c +4 -3
@@ -303,15 +303,15 @@ int gmap_unmap_segment(struct gmap *gmap, unsigned long to, unsigned long len)/* Walk the guest addr space page table */ table = gmap->table + (((to + off) >>53 ) &0x7ff );if (*table & _REGION_ENTRY_INV) -return 0 ; + goto out; table = (unsigned long *)(*table & _REGION_ENTRY_ORIGIN); table = table + (((to + off) >>42 ) &0x7ff );if (*table & _REGION_ENTRY_INV) -return 0 ; + goto out; table = (unsigned long *)(*table & _REGION_ENTRY_ORIGIN); table = table + (((to + off) >>31 ) &0x7ff );if (*table & _REGION_ENTRY_INV) -return 0 ; + goto out; table = (unsigned long *)(*table & _REGION_ENTRY_ORIGIN); table = table + (((to + off) >>20 ) &0x7ff );
@@ -319,6 +319,7 @@ int gmap_unmap_segment(struct gmap *gmap, unsigned long to, unsigned long len) flush |=gmap_unlink_segment (gmap, table); *table = _SEGMENT_ENTRY_INV; } +out:up_read (&gmap->mm->mmap_sem);if (flush)gmap_flush_tlb (gmap);
drivers/s390/cio/cio.c +6 -2
@@ -654,8 +654,8 @@ static struct io_subchannel_private console_priv;static int console_subchannel_in_use;/* -* Use tpi to get a pending interrupt, call the interrupt handler and -* return a pointer to the subchannel structure. +* Use cio_tpi to get a pending interrupt and call the interrupt handler. +* Return non-zero if an interrupt was processed, zero otherwise. */ static int cio_tpi (void ) {
@@ -667,6 +667,10 @@ static int cio_tpi(void) tpi_info = (struct tpi_info *)&S390_lowcore.subchannel_id;if (tpi (NULL ) !=1 )return 0 ; +if (tpi_info->adapter_IO) { +do_adapter_IO (tpi_info->isc); +return 1 ; + } irb = (struct irb *)&S390_lowcore.irb;/* Store interrupt response block to lowcore. */ if (tsch (tpi_info->schid, irb) !=0 )