s390 patches for 2.6.40-rc2
Subsystems (8)
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:
Christian Borntraeger (2):
[S390] kvm-s390: Fix host crash on misbehaving guests [S390] kvm-s390: fix stfle facilities numbers >=64
Jan Glauber (1):
[S390] qdio: Split SBAL entry flags
Martin Schwidefsky (2):
[S390] use generic RCU page-table freeing code [S390] fix kvm defines for 31 bit compile
arch/s390/Kconfig | 1 + arch/s390/include/asm/pgalloc.h | 8 +- arch/s390/include/asm/pgtable.h | 39 ++++-- arch/s390/include/asm/qdio.h | 119 ++++------------ arch/s390/include/asm/tlb.h | 94 ++++++------- arch/s390/kvm/kvm-s390.c | 1 + arch/s390/kvm/sie64a.S | 2 + arch/s390/mm/pgtable.c | 292 +++++++++++++++---------------------- drivers/s390/cio/qdio_main.c | 6 +- drivers/s390/net/qeth_core.h | 2 +- drivers/s390/net/qeth_core_main.c | 57 ++++---- drivers/s390/scsi/zfcp_fsf.c | 45 +++--- drivers/s390/scsi/zfcp_qdio.c | 11 +- drivers/s390/scsi/zfcp_qdio.h | 9 +- 14 files changed, 291 insertions(+), 395 deletions(-)
arch/s390/Kconfig +1 -0
@@ -89,6 +89,7 @@ config S390 select HAVE_GET_USER_PAGES_FAST select HAVE_ARCH_MUTEX_CPU_RELAX select HAVE_ARCH_JUMP_LABEL if !MARCH_G5 + select HAVE_RCU_TABLE_FREE if SMP select ARCH_INLINE_SPIN_TRYLOCK select ARCH_INLINE_SPIN_TRYLOCK_BH select ARCH_INLINE_SPIN_LOCK
arch/s390/include/asm/pgalloc.h +4 -4
@@ -17,15 +17,15 @@#include <linux/gfp.h> #include <linux/mm.h> -#define check_pgt_cache () do {} while (0) -unsigned long *crst_table_alloc (struct mm_struct *);void crst_table_free (struct mm_struct *,unsigned long *); -void crst_table_free_rcu (struct mm_struct *,unsigned long *);unsigned long *page_table_alloc (struct mm_struct *);void page_table_free (struct mm_struct *,unsigned long *); -void page_table_free_rcu (struct mm_struct *,unsigned long *); +#ifdef CONFIG_HAVE_RCU_TABLE_FREE +void page_table_free_rcu (struct mmu_gather *,unsigned long *); +void __tlb_remove_table (void *_table); +#endif static inline void clear_table (unsigned long *s,unsigned long val,size_t n) {
arch/s390/include/asm/pgtable.h +26 -13
@@ -293,19 +293,6 @@ extern unsigned long VMALLOC_START;* swap pte is 1011 and 0001, 0011, 0101, 0111 are invalid. */ -/* Page status table bits for virtualization */ -#define RCP_ACC_BITS 0xf000000000000000UL -#define RCP_FP_BIT 0x0800000000000000UL -#define RCP_PCL_BIT 0x0080000000000000UL -#define RCP_HR_BIT 0x0040000000000000UL -#define RCP_HC_BIT 0x0020000000000000UL -#define RCP_GR_BIT 0x0004000000000000UL -#define RCP_GC_BIT 0x0002000000000000UL - -/* User dirty / referenced bit for KVM's migration feature */ -#define KVM_UR_BIT 0x0000800000000000UL -#define KVM_UC_BIT 0x0000400000000000UL -#ifndef __s390x__/* Bits in the segment table address-space-control-element */
@@ -325,6 +312,19 @@ extern unsigned long VMALLOC_START;#define _SEGMENT_ENTRY (_SEGMENT_ENTRY_PTL)#define _SEGMENT_ENTRY_EMPTY (_SEGMENT_ENTRY_INV) +/* Page status table bits for virtualization */ +#define RCP_ACC_BITS 0xf0000000UL +#define RCP_FP_BIT 0x08000000UL +#define RCP_PCL_BIT 0x00800000UL +#define RCP_HR_BIT 0x00400000UL +#define RCP_HC_BIT 0x00200000UL +#define RCP_GR_BIT 0x00040000UL +#define RCP_GC_BIT 0x00020000UL + +/* User dirty / referenced bit for KVM's migration feature */ +#define KVM_UR_BIT 0x00008000UL +#define KVM_UC_BIT 0x00004000UL +#else /* __s390x__ */ /* Bits in the segment/region table address-space-control-element */
@@ -367,6 +367,19 @@ extern unsigned long VMALLOC_START;#define _SEGMENT_ENTRY_LARGE 0x400/* STE-format control, large page */ #define _SEGMENT_ENTRY_CO 0x100/* change-recording override */ +/* Page status table bits for virtualization */ +#define RCP_ACC_BITS 0xf000000000000000UL +#define RCP_FP_BIT 0x0800000000000000UL +#define RCP_PCL_BIT 0x0080000000000000UL +#define RCP_HR_BIT 0x0040000000000000UL +#define RCP_HC_BIT 0x0020000000000000UL +#define RCP_GR_BIT 0x0004000000000000UL +#define RCP_GC_BIT 0x0002000000000000UL + +/* User dirty / referenced bit for KVM's migration feature */ +#define KVM_UR_BIT 0x0000800000000000UL +#define KVM_UC_BIT 0x0000400000000000UL +#endif /* __s390x__ */ /*
arch/s390/include/asm/qdio.h +28 -91
138 lines not on this page · raw message
arch/s390/include/asm/tlb.h +42 -52
145 lines not on this page · raw message
arch/s390/kvm/kvm-s390.c +1 -0
@@ -731,6 +731,7 @@ static int __init kvm_s390_init(void) }memcpy (facilities, S390_lowcore.stfle_fac_list,16 ); facilities[0 ] &=0xff00fff3f47c0000ULL ; + facilities[1 ] &=0x201c000000000000ULL ;return 0 ; }
arch/s390/kvm/sie64a.S +2 -0
@@ -93,4 +93,6 @@ sie_err: .section __ex_table,"a" .quad sie_inst,sie_err + .quad sie_exit,sie_err + .quad sie_reenter,sie_err .previous
arch/s390/mm/pgtable.c +119 -173
373 lines not on this page · raw message
drivers/s390/cio/qdio_main.c +3 -3
@@ -416,7 +416,7 @@ static void process_buffer_error(struct qdio_q *q, int count)/* special handling for no target buffer empty */ if ((!q->is_input_q && - (q->sbal[q->first_to_check]->element[15 ].flags &0xff ) ==0x10 )) { + (q->sbal[q->first_to_check]->element[15 ].sflags) ==0x10 )) {qperf_inc (q, target_full);DBF_DEV_EVENT (DBF_INFO , q->irq_ptr,"OUTFULL FTC:%02x" , q->first_to_check);
@@ -427,8 +427,8 @@ static void process_buffer_error(struct qdio_q *q, int count)DBF_ERROR ((q->is_input_q) ?"IN:%2d" :"OUT:%2d" , q->nr);DBF_ERROR ("FTC:%3d C:%3d" , q->first_to_check, count);DBF_ERROR ("F14:%2x F15:%2x" , - q->sbal[q->first_to_check]->element[14 ].flags &0xff , - q->sbal[q->first_to_check]->element[15 ].flags &0xff ); + q->sbal[q->first_to_check]->element[14 ].sflags, + q->sbal[q->first_to_check]->element[15 ].sflags);/* * Interrupts may be avoided as long as the error is present
drivers/s390/net/qeth_core.h +1 -1
@@ -361,7 +361,7 @@ enum qeth_header_ids {static inline int qeth_is_last_sbale (struct qdio_buffer_element *sbale) { -return (sbale->flags &SBAL_FLAGS_LAST_ENTRY ); +return (sbale->eflags &SBAL_EFLAGS_LAST_ENTRY ); }enum qeth_qdio_buffer_states {
drivers/s390/net/qeth_core_main.c +30 -27
141 lines not on this page · raw message
drivers/s390/scsi/zfcp_fsf.c +23 -22
173 lines not on this page · raw message
drivers/s390/scsi/zfcp_qdio.c +6 -5
@@ -124,7 +124,7 @@ zfcp_qdio_sbal_chain(struct zfcp_qdio *qdio, struct zfcp_qdio_req *q_req)/* set last entry flag in current SBALE of current SBAL */ sbale =zfcp_qdio_sbale_curr (qdio, q_req); - sbale->flags |=SBAL_FLAGS_LAST_ENTRY ; + sbale->eflags |=SBAL_EFLAGS_LAST_ENTRY ;/* don't exceed last allowed SBAL */ if (q_req->sbal_last == q_req->sbal_limit)
@@ -132,7 +132,7 @@ zfcp_qdio_sbal_chain(struct zfcp_qdio *qdio, struct zfcp_qdio_req *q_req)/* set chaining flag in first SBALE of current SBAL */ sbale =zfcp_qdio_sbale_req (qdio, q_req); - sbale->flags |=SBAL_FLAGS0_MORE_SBALS ; + sbale->sflags |=SBAL_SFLAGS0_MORE_SBALS ;/* calculate index of next SBAL */ q_req->sbal_last++;
@@ -147,7 +147,7 @@ zfcp_qdio_sbal_chain(struct zfcp_qdio *qdio, struct zfcp_qdio_req *q_req)/* set storage-block type for new SBAL */ sbale =zfcp_qdio_sbale_curr (qdio, q_req); - sbale->flags |= q_req->sbtype; + sbale->sflags |= q_req->sbtype;return sbale; }
@@ -177,7 +177,7 @@ int zfcp_qdio_sbals_from_sg(struct zfcp_qdio *qdio, struct zfcp_qdio_req *q_req,/* set storage-block type for this request */ sbale =zfcp_qdio_sbale_req (qdio, q_req); - sbale->flags |= q_req->sbtype; + sbale->sflags |= q_req->sbtype;for (; sg; sg =sg_next (sg)) { sbale =zfcp_qdio_sbale_next (qdio, q_req);
@@ -384,7 +384,8 @@ int zfcp_qdio_open(struct zfcp_qdio *qdio)for (cc =0 ; cc <QDIO_MAX_BUFFERS_PER_Q ; cc++) { sbale = &(qdio->res_q[cc]->element[0 ]); sbale->length =0 ; - sbale->flags =SBAL_FLAGS_LAST_ENTRY ; + sbale->eflags =SBAL_EFLAGS_LAST_ENTRY ; + sbale->sflags =0 ; sbale->addr =NULL ; }
drivers/s390/scsi/zfcp_qdio.h +5 -4
@@ -67,7 +67,7 @@ struct zfcp_qdio {* @qdio_outb_usage: usage of outbound queue */ struct zfcp_qdio_req { -u32 sbtype; +u8 sbtype;u8 sbal_number;u8 sbal_first;u8 sbal_last;
@@ -116,7 +116,7 @@ zfcp_qdio_sbale_curr(struct zfcp_qdio *qdio, struct zfcp_qdio_req *q_req)*/ static inline void zfcp_qdio_req_init (struct zfcp_qdio *qdio,struct zfcp_qdio_req *q_req, -unsigned long req_id,u32 sbtype,void *data,u32 len) +unsigned long req_id,u8 sbtype,void *data,u32 len) {struct qdio_buffer_element *sbale; int count = min(atomic_read(&qdio->req_q_free),
@@ -131,7 +131,8 @@ void zfcp_qdio_req_init(struct zfcp_qdio *qdio, struct zfcp_qdio_req *q_req, sbale =zfcp_qdio_sbale_req (qdio, q_req); sbale->addr = (void *) req_id; - sbale->flags =SBAL_FLAGS0_COMMAND | sbtype; + sbale->eflags =0 ; + sbale->sflags =SBAL_SFLAGS0_COMMAND | sbtype;if (unlikely (!data))return ;
@@ -173,7 +174,7 @@ void zfcp_qdio_set_sbale_last(struct zfcp_qdio *qdio,struct qdio_buffer_element *sbale; sbale =zfcp_qdio_sbale_curr (qdio, q_req); - sbale->flags |=SBAL_FLAGS_LAST_ENTRY ; + sbale->eflags |=SBAL_EFLAGS_LAST_ENTRY ; }/**