Hello community, here is the log from the commit of package ppc64-diag for openSUSE:Factory checked in at 2014-03-11 17:28:23 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ppc64-diag (Old) and /work/SRC/openSUSE:Factory/.ppc64-diag.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ppc64-diag" Changes: -------- --- /work/SRC/openSUSE:Factory/ppc64-diag/ppc64-diag.changes 2014-01-30 12:52:25.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.ppc64-diag.new/ppc64-diag.changes 2014-03-11 17:28:24.000000000 +0100 @@ -1,0 +2,6 @@ +Mon Mar 10 12:41:50 UTC 2014 - [email protected] + +- version update to 2.6.3 (BNC#867346, FATE#315459) + No upstream changelog provided + +------------------------------------------------------------------- Old: ---- ppc64-diag-2.6.2.tar.gz New: ---- ppc64-diag-2.6.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ppc64-diag.spec ++++++ --- /var/tmp/diff_new_pack.TK6wPo/_old 2014-03-11 17:28:25.000000000 +0100 +++ /var/tmp/diff_new_pack.TK6wPo/_new 2014-03-11 17:28:25.000000000 +0100 @@ -18,7 +18,7 @@ Url: http://sourceforge.net/projects/linux-diag/files/ppc64-diag Name: ppc64-diag -Version: 2.6.2 +Version: 2.6.3 Release: 0 Summary: Linux for Power Platform Diagnostics License: EPL-1.0 ++++++ ppc64-diag-2.6.2.tar.gz -> ppc64-diag-2.6.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/common/platform.c new/ppc64-diag-2.6.3/common/platform.c --- old/ppc64-diag-2.6.2/common/platform.c 1970-01-01 01:00:00.000000000 +0100 +++ new/ppc64-diag-2.6.3/common/platform.c 2014-03-07 10:15:01.000000000 +0100 @@ -0,0 +1,51 @@ +/** + * @file platform.c + * + * Copyright (C) 2014 IBM Corporation + * See 'COPYRIGHT' for License of this code + * + * @author Aruna Balakrishnaiah <[email protected]> + */ + +#include <stdio.h> +#include <string.h> + +#include "platform.h" + +#define LENGTH 512 + +const char *__platform_name[] = { + "Unknown", + "PowerKVM Host", + "PowerKVM pSeries Guest", + "PowerVM pSeries LPAR", + /* Add new platforms name here */ +}; + +int +get_platform(void) +{ + int rc = PLATFORM_UNKNOWN; + FILE *fp; + char line[LENGTH]; + + if((fp = fopen(PLATFORM_FILE, "r")) == NULL) + return rc; + + while (fgets(line, LENGTH, fp)) { + if (strstr(line, "PowerNV")) { + rc = PLATFORM_POWERKVM; + break; + } else if (strstr(line, "pSeries (emulated by qemu)")) { + rc = PLATFORM_POWERKVM_GUEST; + break; + } else if (strstr(line, "pSeries")) { + rc = PLATFORM_PSERIES_LPAR; + /* catch model for PowerNV guest */ + continue; + } + } + + fclose(fp); + return rc; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/common/platform.h new/ppc64-diag-2.6.3/common/platform.h --- old/ppc64-diag-2.6.2/common/platform.h 1970-01-01 01:00:00.000000000 +0100 +++ new/ppc64-diag-2.6.3/common/platform.h 2014-03-07 10:15:01.000000000 +0100 @@ -0,0 +1,31 @@ +/** + * Copyright (C) 2014 IBM Corporation + * See 'COPYRIGHT' for License of this code. + */ + +#ifndef PLATFORM_H +#define PLARFORM_H + +#define PLATFORM_FILE "/proc/cpuinfo" + +enum { + PLATFORM_UNKNOWN = 0, + PLATFORM_POWERKVM, + PLATFORM_POWERKVM_GUEST, + PLATFORM_PSERIES_LPAR, + /* Add new platforms here */ + PLATFORM_MAX, +}; + +extern const char *__platform_name[]; + +extern int get_platform(void); + +static inline const char * __power_platform_name(int platform) +{ + if (platform > PLATFORM_UNKNOWN && platform < PLATFORM_MAX) + return __platform_name[platform]; + + return __platform_name[PLATFORM_UNKNOWN]; +} +#endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/diags/diag_encl.c new/ppc64-diag-2.6.3/diags/diag_encl.c --- old/ppc64-diag-2.6.2/diags/diag_encl.c 2013-08-20 13:21:13.000000000 +0200 +++ new/ppc64-diag-2.6.3/diags/diag_encl.c 2014-03-07 10:15:01.000000000 +0100 @@ -19,6 +19,7 @@ #include "encl_util.h" #include "diag_encl.h" +#include "platform.c" static struct option long_options[] = { {"cmp_prev", no_argument, NULL, 'c'}, @@ -488,11 +489,19 @@ main(int argc, char *argv[]) { int failure = 0, option_index, rc; + int platform = 0; char path[128]; DIR *edir, *sdir; struct dirent *sdirent, *edirent; struct dev_vpd *diagnosed = NULL; + platform = get_platform(); + if (platform != PLATFORM_PSERIES_LPAR) { + fprintf(stderr, "%s is not supported on the %s platform\n", + argv[0], __power_platform_name(platform)); + return -1; + } + memset(&cmd_opts, 0, sizeof(cmd_opts)); for (;;) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/diags/encl_led.c new/ppc64-diag-2.6.3/diags/encl_led.c --- old/ppc64-diag-2.6.2/diags/encl_led.c 2013-08-20 13:21:13.000000000 +0200 +++ new/ppc64-diag-2.6.3/diags/encl_led.c 2014-03-07 10:15:01.000000000 +0100 @@ -14,6 +14,7 @@ #include "encl_util.h" #include "encl_led.h" +#include "platform.c" static struct { char *mtm; @@ -160,6 +161,7 @@ main(int argc, char **argv) { int rc, option_index, i; + int platform = 0; int list_opt = 0, verbose = 0, found = 0; int fault_setting = LED_SAME, ident_setting = LED_SAME; const char *enclosure = NULL, *component = NULL; @@ -167,6 +169,14 @@ struct dev_vpd vpd; progname = argv[0]; + + platform = get_platform(); + if (platform != PLATFORM_PSERIES_LPAR) { + fprintf(stderr, "%s is not supported on the %s platform\n", + argv[0], __power_platform_name(platform)); + exit(1); + } + for (;;) { option_index = 0; rc = getopt_long(argc, argv, "f:hi:lvV", long_options, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/ela/Makefile new/ppc64-diag-2.6.3/ela/Makefile --- old/ppc64-diag-2.6.2/ela/Makefile 2013-08-20 13:21:13.000000000 +0200 +++ new/ppc64-diag-2.6.3/ela/Makefile 2014-03-07 10:15:01.000000000 +0100 @@ -4,7 +4,7 @@ include ../rules.mk -CMDS = explain_syslog add_regex +CMDS = explain_syslog add_regex syslog_to_svclog CATALOG = message_catalog/cxgb3 message_catalog/e1000e \ message_catalog/exceptions message_catalog/reporters \ message_catalog/gpfs @@ -12,13 +12,6 @@ message_catalog/with_regex/e1000e \ message_catalog/with_regex/gpfs MANPAGES = doc/explain_syslog.8.gz doc/syslog_to_svclog.8.gz -ARCH := $(shell uname -p) -ifeq ($(ARCH), ppc) - CMDS += syslog_to_svclog -endif -ifeq ($(ARCH), ppc64) - CMDS += syslog_to_svclog -endif COMMON_OBJS = rr.tab.o lex.rr.o ev.tab.o lex.ev.o date.o ES_OBJS = explain_syslog.o catalogs.o $(COMMON_OBJS) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/ela/add_regex.cpp new/ppc64-diag-2.6.3/ela/add_regex.cpp --- old/ppc64-diag-2.6.2/ela/add_regex.cpp 2013-08-20 13:21:13.000000000 +0200 +++ new/ppc64-diag-2.6.3/ela/add_regex.cpp 2014-03-07 10:15:01.000000000 +0100 @@ -4,6 +4,9 @@ #include <unistd.h> #include <iostream> #include "catalogs.h" +extern "C" { +#include "platform.c" +} static const char *progname; @@ -17,8 +20,17 @@ { const char *catalog_dir = ELA_CATALOG_DIR; int c; + int platform = 0; progname = argv[0]; + + platform = get_platform(); + if (platform != PLATFORM_PSERIES_LPAR) { + cerr << progname << ": is not supported on the " << + __power_platform_name(platform) << " platform" << endl; + + exit(1); + } opterr = 0; while ((c = getopt(argc, argv, "C:")) != -1) { switch (c) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/ela/explain_syslog.cpp new/ppc64-diag-2.6.3/ela/explain_syslog.cpp --- old/ppc64-diag-2.6.2/ela/explain_syslog.cpp 2013-08-20 13:21:13.000000000 +0200 +++ new/ppc64-diag-2.6.3/ela/explain_syslog.cpp 2014-03-07 10:15:01.000000000 +0100 @@ -11,6 +11,9 @@ #include <iostream> #include "catalogs.h" +extern "C" { +#include "platform.c" +} static const char *progname; bool debug = 0; @@ -106,6 +109,7 @@ int main(int argc, char **argv) { int c; + int platform = 0; time_t begin_date = 0, end_date = 0; const char *catalog_dir = ELA_CATALOG_DIR; const char *msg_path = NULL; @@ -113,6 +117,15 @@ vector<SyslogEvent*>::iterator ie; progname = argv[0]; + + platform = get_platform(); + if (platform != PLATFORM_PSERIES_LPAR) { + cerr << progname << ": is not supported on the " + << __power_platform_name(platform) << " platform" << endl; + + exit(1); + } + opterr = 0; while ((c = getopt(argc, argv, "b:C:de:hm:M")) != -1) { switch (c) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/ela/syslog_to_svclog.cpp new/ppc64-diag-2.6.3/ela/syslog_to_svclog.cpp --- old/ppc64-diag-2.6.2/ela/syslog_to_svclog.cpp 2013-08-20 13:21:13.000000000 +0200 +++ new/ppc64-diag-2.6.3/ela/syslog_to_svclog.cpp 2014-03-07 10:15:01.000000000 +0100 @@ -33,6 +33,9 @@ #include "catalogs.h" #include <servicelog-1/servicelog.h> +extern "C" { +#include "platform.c" +} #define SYSLOG_PATH "/var/log/messages" #define LAST_EVENT_PATH "/var/log/ppc64-diag/last_syslog_event" @@ -668,8 +671,18 @@ { int c, result; int args_seen[0x100] = { 0 }; + int platform = 0; progname = argv[0]; + + platform = get_platform(); + if (platform != PLATFORM_PSERIES_LPAR) { + cerr << progname << ": is not supported on the " + << __power_platform_name(platform) << " platform" << endl; + + exit(1); + } + opterr = 0; while ((c = getopt(argc, argv, "b:C:de:Fhm:M")) != -1) { if (isalpha(c)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/lpd/files.c new/ppc64-diag-2.6.3/lpd/files.c --- old/ppc64-diag-2.6.2/lpd/files.c 2013-08-20 13:21:13.000000000 +0200 +++ new/ppc64-diag-2.6.3/lpd/files.c 2014-03-07 10:15:01.000000000 +0100 @@ -8,6 +8,7 @@ * @author Vasant Hegde <[email protected]> */ +#include <stdio.h> #include <stdint.h> #include <unistd.h> #include <string.h> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/lpd/lp_diag.c new/ppc64-diag-2.6.3/lpd/lp_diag.c --- old/ppc64-diag-2.6.2/lpd/lp_diag.c 2013-08-20 13:21:13.000000000 +0200 +++ new/ppc64-diag-2.6.3/lpd/lp_diag.c 2014-03-07 10:15:01.000000000 +0100 @@ -19,6 +19,7 @@ #include <ncurses/menu.h> #include <signal.h> +#include "platform.c" #include "lp_diag.h" #include "lp_util.h" @@ -1146,8 +1147,16 @@ int repair_flag = 0; int event_id = 0; int repair_id = 0; + int platform = 0; char *next_char; + platform = get_platform(); + if (platform != PLATFORM_PSERIES_LPAR) { + fprintf(stderr, "%s is not supported on the %s platform\n", + argv[0], __power_platform_name(platform)); + return 1; + } + opterr = 0; while ((c = getopt_long(argc, argv, LP_DIAG_ARGS, longopts, NULL)) != EOF) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/lpd/servicelog.c new/ppc64-diag-2.6.3/lpd/servicelog.c --- old/ppc64-diag-2.6.2/lpd/servicelog.c 2013-08-20 13:21:13.000000000 +0200 +++ new/ppc64-diag-2.6.3/lpd/servicelog.c 2014-03-07 10:15:01.000000000 +0100 @@ -8,6 +8,7 @@ * @author Vasant Hegde <[email protected]> */ +#include <stdio.h> #include <string.h> #include "lp_diag.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/lpd/usysident.c new/ppc64-diag-2.6.3/lpd/usysident.c --- old/ppc64-diag-2.6.2/lpd/usysident.c 2013-08-20 13:21:13.000000000 +0200 +++ new/ppc64-diag-2.6.3/lpd/usysident.c 2014-03-07 10:15:01.000000000 +0100 @@ -23,6 +23,7 @@ #include <string.h> #include <stdint.h> +#include "platform.c" #include "lp_diag.h" #define CMD_LINE_OPTIONS "d:l:s:-:thV" @@ -93,6 +94,7 @@ int rc = 0; int trunc = 0; int truncated = 0; + int platform = 0; char temp[LOCATION_LENGTH]; char dloc[LOCATION_LENGTH]; char *dvalue = NULL; @@ -102,6 +104,13 @@ struct loc_code *current; struct loc_code *list = NULL; + platform = get_platform(); + if (platform != PLATFORM_PSERIES_LPAR) { + fprintf(stderr, "%s is not supported on the %s platform\n", + argv[0], __power_platform_name(platform)); + return 1; + } + opterr = 0; while ((c = getopt(argc, argv, CMD_LINE_OPTIONS)) != -1) { switch (c) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/ppc64-diag.spec new/ppc64-diag-2.6.3/ppc64-diag.spec --- old/ppc64-diag-2.6.2/ppc64-diag.spec 2013-08-20 13:21:13.000000000 +0200 +++ new/ppc64-diag-2.6.3/ppc64-diag.spec 2014-03-07 10:15:01.000000000 +0100 @@ -1,5 +1,5 @@ Name: ppc64-diag -Version: 2.6.2 +Version: 2.6.3 Release: 0 Summary: PowerLinux Platform Diagnostics Group: System Environment/Base @@ -7,13 +7,17 @@ Packager: IBM Corp. Vendor: IBM Corp. ExclusiveArch: ppc ppc64 -BuildRequires: libservicelog-devel, libvpd-devel, flex, perl, /usr/bin/yacc +BuildRequires: libservicelog-devel, flex, perl, /usr/bin/yacc +BuildRequires: libvpd-devel +BuildRequires: librtas-devel >= 1.3.9 BuildRequires: ncurses-devel -Requires: servicelog, /usr/sbin/lsvpd, /sbin/chkconfig -# PRRN RTAS event notification handler depends on below librtas -# and powerpc-utils versions. -Requires: librtas >= 1.3.8 -Requires: powerpc-utils >= 1.2.16 + +Requires: servicelog, /sbin/chkconfig +# PCI hotplug support on PowerKVM guest depends on below +# powerpc-utils version. +Requires: powerpc-utils >= 1.2.19 +# Light Path Diagnostics depends on below lsvpd version. +Requires: lsvpd >= 1.7.1 BuildRoot: %{_tmppath}/%{name}-%{version}-build Source0: ppc64-diag-%{version}.tar.gz @@ -78,6 +82,11 @@ fi %changelog +* Fri Mar 07 2014 - Vasant Hegde <[email protected]> - 2.6.3 +- Added platform validation code +- Add support for hotplugging qemu pci devices via RTAS event +- Minor bug fixes in rtas_errd code + * Tue Aug 20 2013 - Vasant Hegde <[email protected]> - 2.6.2 - Minor bug fix in diag_encl and encl_led diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/rtas_errd/Makefile new/ppc64-diag-2.6.3/rtas_errd/Makefile --- old/ppc64-diag-2.6.2/rtas_errd/Makefile 2013-08-20 13:21:13.000000000 +0200 +++ new/ppc64-diag-2.6.3/rtas_errd/Makefile 2014-03-07 10:15:01.000000000 +0100 @@ -10,7 +10,7 @@ RTAS_ERRD_OBJS = rtas_errd.o epow.o dump.o guard.o eeh.o update.o \ files.o config.o diag_support.o ela.o v6ela.o servicelog.o \ - signal.o prrn.o + signal.o prrn.o hotplug.o RTAS_ERRD_LIBS = -lrtas -lrtasevent -lservicelog -lsqlite3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/rtas_errd/convert_dt_node_props.c new/ppc64-diag-2.6.3/rtas_errd/convert_dt_node_props.c --- old/ppc64-diag-2.6.2/rtas_errd/convert_dt_node_props.c 2013-08-20 13:21:13.000000000 +0200 +++ new/ppc64-diag-2.6.3/rtas_errd/convert_dt_node_props.c 2014-03-07 10:15:01.000000000 +0100 @@ -14,6 +14,7 @@ #include <stdint.h> #include <dirent.h> #include <fcntl.h> +#include "platform.c" #define MAX_IRQ_SERVERS_PER_CPU 16 @@ -119,12 +120,22 @@ int main(int argc, char *argv[]) { int option_index, rc, i; + int platform = 0; char *context=NULL, *from=NULL, *to=NULL; uint32_t interruptserver, drcindex; unsigned long drc_tmp_idx; uint32_t intservs_array[MAX_IRQ_SERVERS_PER_CPU]; char drcname[20]; + platform = get_platform(); + switch (platform) { + case PLATFORM_UNKNOWN: + case PLATFORM_POWERKVM: + fprintf(stderr, "%s: is not supported on the %s platform\n", + argv[0], __power_platform_name(platform)); + return -1; + } + for (;;) { option_index = 0; rc = getopt_long(argc, argv, "hc:f:t:", long_options, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/rtas_errd/epow.c new/ppc64-diag-2.6.3/rtas_errd/epow.c --- old/ppc64-diag-2.6.2/rtas_errd/epow.c 2013-08-20 13:21:13.000000000 +0200 +++ new/ppc64-diag-2.6.3/rtas_errd/epow.c 2014-03-07 10:15:01.000000000 +0100 @@ -375,7 +375,7 @@ * * @param event pointer to the RTAS event */ -void +int check_epow(struct event *event) { pid_t child; @@ -411,5 +411,5 @@ } } - return; + return current_status; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/rtas_errd/extract_platdump.c new/ppc64-diag-2.6.3/rtas_errd/extract_platdump.c --- old/ppc64-diag-2.6.2/rtas_errd/extract_platdump.c 2013-08-20 13:21:13.000000000 +0200 +++ new/ppc64-diag-2.6.3/rtas_errd/extract_platdump.c 2014-03-07 10:15:01.000000000 +0100 @@ -18,6 +18,7 @@ #include <librtas.h> #include <sys/stat.h> #include "rtas_errd.h" +#include "platform.c" #define DUMP_HDR_PREFIX_OFFSET 0x16 /* prefix size in dump header */ #define DUMP_HDR_FNAME_OFFSET 0x18 /* suggested filename in dump header */ @@ -344,8 +345,18 @@ main(int argc, char *argv[]) { int option_index, rc, fail=0; + int platform = 0; uint64_t dump_tag; + platform = get_platform(); + switch (platform) { + case PLATFORM_UNKNOWN: + case PLATFORM_POWERKVM: + fprintf(stderr, "%s: is not supported on the %s platform\n", + argv[0], __power_platform_name(platform)); + return -1; + } + for (;;) { option_index = 0; rc = getopt_long(argc, argv, "hv", long_options, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/rtas_errd/hotplug.c new/ppc64-diag-2.6.3/rtas_errd/hotplug.c --- old/ppc64-diag-2.6.2/rtas_errd/hotplug.c 1970-01-01 01:00:00.000000000 +0100 +++ new/ppc64-diag-2.6.3/rtas_errd/hotplug.c 2014-03-07 10:15:01.000000000 +0100 @@ -0,0 +1,98 @@ +/** + * @file hotplug.c + * + * Copyright (C) 2013 IBM Corporation + */ + +#include <stdio.h> +#include <unistd.h> +#include <string.h> +#include <stdlib.h> +#include <errno.h> +#include <sys/wait.h> + +#include <librtas.h> +#include "rtas_errd.h" + +#define DRMGR_PROGRAM "/usr/sbin/drmgr" +#define DRMGR_PROGRAM_NOPATH "drmgr" + +void handle_hotplug_event(struct event *re) +{ + struct rtas_event_hdr *rtas_hdr = re->rtas_hdr; + struct rtas_hotplug_scn *hotplug; + pid_t child; + int status, rc; + char drc_index[11]; + char *drmgr_args[] = { DRMGR_PROGRAM_NOPATH, "-c", NULL, NULL, NULL, + NULL, NULL, "-d4", "-V", NULL}; + + /* Retrieve Hotplug section */ + if (rtas_hdr->version >= 6) { + hotplug = rtas_get_hotplug_scn(re->rtas_event); + + /* Build drmgr argument list */ + dbg("Build drmgr command\n"); + + switch (hotplug->type) { + case RTAS_HP_TYPE_PCI: + drmgr_args[2] = "pci"; + drmgr_args[6] = "-n"; + break; + default: + dbg("Unknown or unsupported hotplug type %d\n", + hotplug->type); + return; + } + + switch (hotplug->action) { + case RTAS_HP_ACTION_ADD: + drmgr_args[3] = "-a"; + break; + case RTAS_HP_ACTION_REMOVE: + drmgr_args[3] = "-r"; + break; + default: + dbg("Unknown hotplug action %d\n", hotplug->action); + return; + } + + switch (hotplug->identifier) { + case RTAS_HP_ID_DRC_INDEX: + drmgr_args[4] = "-s"; + snprintf(drc_index, 11, "%#x", hotplug->u1.drc_index); + drmgr_args[5] = drc_index; + break; + default: + dbg("Unknown or unsupported hotplug identifier %d\n", + hotplug->identifier); + return; + } + + dbg("run: %s %s %s %s %s %s %s\n", drmgr_args[0], + drmgr_args[1], drmgr_args[2], drmgr_args[3], + drmgr_args[4], drmgr_args[5], drmgr_args[6]); + + /* invoke drmgr */ + dbg("Invoke drmgr command\n"); + + child = fork(); + if (child == -1) { + log_msg(NULL, "%s cannot be run to handle a hotplug event, %s", + DRMGR_PROGRAM, strerror(errno)); + return; + } else if (child == 0) { + /* child process */ + rc = execv(DRMGR_PROGRAM, drmgr_args); + + /* shouldn't get here */ + log_msg(NULL, "Couldn not exec %s in response to hotplug event, %s", + DRMGR_PROGRAM, strerror(errno)); + exit(1); + } + + child = waitpid(child, &status, 0); + + dbg("drmgr call exited with %d\n", WEXITSTATUS(status)); + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/rtas_errd/rtas_errd.c new/ppc64-diag-2.6.3/rtas_errd/rtas_errd.c --- old/ppc64-diag-2.6.2/rtas_errd/rtas_errd.c 2013-08-20 13:21:13.000000000 +0200 +++ new/ppc64-diag-2.6.3/rtas_errd/rtas_errd.c 2014-03-07 10:15:01.000000000 +0100 @@ -17,6 +17,7 @@ #include <sys/wait.h> #include <librtas.h> #include "rtas_errd.h" +#include "platform.c" /** * @var debug @@ -137,7 +138,10 @@ case RTAS_HDR_TYPE_EPOW: dbg("Entering check_epow()"); - check_epow(event); + if (check_epow(event) <= 0) { + dbg("Recevied EPOW 0 (all is normal) event"); + return 0; + } break; case RTAS_HDR_TYPE_PLATFORM_ERROR: @@ -160,6 +164,11 @@ */ return 0; + case RTAS_HDR_TYPE_HOTPLUG: + dbg("Entering Hotplug handler"); + handle_hotplug_event(event); + break; + default: /* Nothing to do for this event */ break; @@ -369,6 +378,16 @@ #ifdef DEBUG int f_flag = 0, s_flag = 0; #endif + int platform = 0; + + platform = get_platform(); + switch (platform) { + case PLATFORM_UNKNOWN: + case PLATFORM_POWERKVM: + fprintf(stderr, "%s: is not supported on the %s platform\n", + argv[0], __power_platform_name(platform)); + return -1; + } while ((c = getopt_long(argc, argv, RTAS_ERRD_ARGS, longopts, NULL)) != EOF) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/rtas_errd/rtas_errd.h new/ppc64-diag-2.6.3/rtas_errd/rtas_errd.h --- old/ppc64-diag-2.6.2/rtas_errd/rtas_errd.h 2013-08-20 13:21:13.000000000 +0200 +++ new/ppc64-diag-2.6.3/rtas_errd/rtas_errd.h 2014-03-07 10:15:01.000000000 +0100 @@ -152,7 +152,7 @@ /* epow.c */ void epow_timer_handler(int, siginfo_t, void *); -void check_epow(struct event *); +int check_epow(struct event *); /* servicelog.c */ time_t get_event_date(struct event *event); @@ -169,4 +169,7 @@ /* prrn.c */ void handle_prrn_event(struct event *); +/* hotplug.c */ +void handle_hotplug_event(struct event *); + #endif /* _RTAS_ERRD_H */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/rtas_errd/servicelog.c new/ppc64-diag-2.6.3/rtas_errd/servicelog.c --- old/ppc64-diag-2.6.2/rtas_errd/servicelog.c 2013-08-20 13:21:13.000000000 +0200 +++ new/ppc64-diag-2.6.3/rtas_errd/servicelog.c 2014-03-07 10:15:01.000000000 +0100 @@ -126,8 +126,6 @@ { struct sl_callout *callout = event->sl_entry->callouts; - event->flags |= RE_SERVICEABLE; - if (!callout) { event->sl_entry->callouts = (struct sl_callout *)malloc( sizeof(*callout)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/rtas_errd/v6ela.c new/ppc64-diag-2.6.3/rtas_errd/v6ela.c --- old/ppc64-diag-2.6.2/rtas_errd/v6ela.c 2013-08-20 13:21:13.000000000 +0200 +++ new/ppc64-diag-2.6.3/rtas_errd/v6ela.c 2014-03-07 10:15:01.000000000 +0100 @@ -272,9 +272,6 @@ frupn, frusn, ccin); } - if (event->flags & RE_SERVICEABLE) - event->sl_entry->serviceable = 1; - if ((usrhdr->action & 0x8000) && (usrhdr->action & 0x0800)) event->sl_entry->call_home_status = SL_CALLHOME_CANDIDATE; @@ -472,7 +469,6 @@ MSGMENUGPEL_EVENT, msg); } - event->sl_entry->serviceable = 1; event->sl_entry->call_home_status = SL_CALLHOME_NONE; snprintf(menu_num_str, 20, "#%d", menu_num); @@ -582,6 +578,10 @@ rtas_data->event_subtype = usrhdr->event_type; } + /* Enable serviceable flag based on "Error Action Flags" */ + if (usrhdr->action & RTAS_UH_ACTION_SERVICE) + event->sl_entry->serviceable = 1; + /* * if a "primary SRC" section exists, this is an SRC; otherwise, it * is a menugoal diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ppc64-diag-2.6.2/rules.mk new/ppc64-diag-2.6.3/rules.mk --- old/ppc64-diag-2.6.2/rules.mk 2013-08-20 13:21:13.000000000 +0200 +++ new/ppc64-diag-2.6.3/rules.mk 2014-03-07 10:15:01.000000000 +0100 @@ -70,12 +70,14 @@ TARBALL = $(PROJECT)-$(VERSION).tar.gz TARBALL_FILES = Makefile rules.mk COPYRIGHT $(SPECFILENAME) TB_DIR = $(PROJECT)-$(VERSION) +COM_DIR = common # Build a tarball of the source code BUILD_TARBALL = \ $(shell \ echo CVS > ./ignore; \ mkdir $(TB_DIR); \ + cp -R $(COM_DIR) $(TB_DIR); \ cp -R $(SUBDIRS) $(TARBALL_FILES) $(TB_DIR); \ tar -zcf $(TARBALL) -X ./ignore $(TB_DIR);) @@ -88,6 +90,9 @@ # Uncomment this for debug builds CFLAGS += -g -DDEBUG +# Build with common directory included +CFLAGS += -I $(ROOT_DIR)/$(COM_DIR) + # Build with version string AM_CFLAGS = -DVERSION='"$(VERSION)"' @@ -97,6 +102,9 @@ # Uncomment this for debug builds CXXFLAGS += -g -DDEBUG +# Build with common directory included +CXXFLAGS += -I $(ROOT_DIR)/$(COM_DIR) + # Build with version string AM_CXXFLAGS = -DVERSION='"$(VERSION)"' -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
