aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-01-17 11:56:30 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-01-17 11:56:30 -0500
commit72ffaa48e11fe40d96e70bd24289b5e2b8807297 (patch)
treef932739bc9c869a3acc037e2317ed2dd0baba664 /drivers
parentdfdebc24837ed0a1d6ad73b108a10d3c88d1b6e8 (diff)
parent509d97b6f91b51e180ba26ddb1e2b7f6dfa80cba (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
Pull more s390 patches from Martin Schwidefsky: "A couple of bug fixes: one of the transparent huge page primitives is broken, the sched_clock function overflows after 417 days, the XFS module has grown too large for -fpic and the new pci code has broken normal channel subsystem notifications." * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: s390/chsc: fix SEI usage s390/time: fix sched_clock() overflow s390: use -fPIC for module compile s390/mm: fix pmd_pfn() for thp
Diffstat (limited to 'drivers')
-rw-r--r--drivers/s390/cio/chsc.c31
1 files changed, 12 insertions, 19 deletions
diff --git a/drivers/s390/cio/chsc.c b/drivers/s390/cio/chsc.c
index 68e80e2734a4..10729bbceced 100644
--- a/drivers/s390/cio/chsc.c
+++ b/drivers/s390/cio/chsc.c
@@ -283,7 +283,7 @@ struct chsc_sei_nt2_area {
283 u8 ccdf[PAGE_SIZE - 24 - 56]; /* content-code dependent field */ 283 u8 ccdf[PAGE_SIZE - 24 - 56]; /* content-code dependent field */
284} __packed; 284} __packed;
285 285
286#define CHSC_SEI_NT0 0ULL 286#define CHSC_SEI_NT0 (1ULL << 63)
287#define CHSC_SEI_NT2 (1ULL << 61) 287#define CHSC_SEI_NT2 (1ULL << 61)
288 288
289struct chsc_sei { 289struct chsc_sei {
@@ -291,7 +291,8 @@ struct chsc_sei {
291 u32 reserved1; 291 u32 reserved1;
292 u64 ntsm; /* notification type mask */ 292 u64 ntsm; /* notification type mask */
293 struct chsc_header response; 293 struct chsc_header response;
294 u32 reserved2; 294 u32 :24;
295 u8 nt;
295 union { 296 union {
296 struct chsc_sei_nt0_area nt0_area; 297 struct chsc_sei_nt0_area nt0_area;
297 struct chsc_sei_nt2_area nt2_area; 298 struct chsc_sei_nt2_area nt2_area;
@@ -496,17 +497,17 @@ static int __chsc_process_crw(struct chsc_sei *sei, u64 ntsm)
496 css_schedule_eval_all(); 497 css_schedule_eval_all();
497 } 498 }
498 499
499 switch (sei->ntsm) { 500 switch (sei->nt) {
500 case CHSC_SEI_NT0: 501 case 0:
501 chsc_process_sei_nt0(&sei->u.nt0_area); 502 chsc_process_sei_nt0(&sei->u.nt0_area);
502 return 1; 503 break;
503 case CHSC_SEI_NT2: 504 case 2:
504 chsc_process_sei_nt2(&sei->u.nt2_area); 505 chsc_process_sei_nt2(&sei->u.nt2_area);
505 return 1; 506 break;
506 default: 507 default:
507 CIO_CRW_EVENT(2, "chsc: unhandled nt (nt=%08Lx)\n", 508 CIO_CRW_EVENT(2, "chsc: unhandled nt=%d\n",
508 sei->ntsm); 509 sei->nt);
509 return 0; 510 break;
510 } 511 }
511 } else { 512 } else {
512 CIO_CRW_EVENT(2, "chsc: sei failed (rc=%04x)\n", 513 CIO_CRW_EVENT(2, "chsc: sei failed (rc=%04x)\n",
@@ -537,15 +538,7 @@ static void chsc_process_crw(struct crw *crw0, struct crw *crw1, int overflow)
537 sei = sei_page; 538 sei = sei_page;
538 539
539 CIO_TRACE_EVENT(2, "prcss"); 540 CIO_TRACE_EVENT(2, "prcss");
540 541 __chsc_process_crw(sei, CHSC_SEI_NT0 | CHSC_SEI_NT2);
541 /*
542 * The ntsm does not allow to select NT0 and NT2 together. We need to
543 * first check for NT2, than additionally for NT0...
544 */
545#ifdef CONFIG_PCI
546 if (!__chsc_process_crw(sei, CHSC_SEI_NT2))
547#endif
548 __chsc_process_crw(sei, CHSC_SEI_NT0);
549} 542}
550 543
551void chsc_chp_online(struct chp_id chpid) 544void chsc_chp_online(struct chp_id chpid)