SELinux vs. LiS-2.18

"kishore" <[email protected]> Mon, 9 Jan 2006 14:56:41 +0530
Newsgroups gmane.linux.kernel.streams
Message-ID <002001c614fe$ccc5c680$3b01a8c0@kishore>
hi,

        I am trying to load LiS-2.18 (downloaded from gcom.com)  on,
Redhat Enterprise Linux WS release 4 ( Nahant Update 2)  with kernel version
2.6.9-16.EL .
        I am using a patch to load LiS-2.18 . I am safe from kernel panic
while loading streams. Let me clarify one thing :

" Is the patch (in attachments)  is sufficient or I need to use any of the
rpms specified in ur mail. "

Can u have a glimpse on patch file in attachments.

        Thanks in advance.

regards,
kishore,packetware.



----- Original Message -----
From: <[email protected]>
To: <[email protected]>
Cc: <[email protected]>
Sent: Thursday, January 05, 2006 7:51 PM
Subject: [Linux-streams] FYI: SELinux vs. LiS-2.18


This is FYI.

We figured that additional SELinux patches have to be installed
on 'enforced' SELinux(2.6.9) system in order to avoid panic when LiS is
started.

If the following SELinux packages are installed :
policycoreutils
selinux-policy-targeted
selinux-policy-targeted-sources.rpm

then the following versions or (later) must be installed
on the system PRIOR to starting LiS :

policycoreutils-1.18.1-4.9.i386.rpm
selinux-policy-targeted-1.17.30-2.123.noarch.rpm
selinux-policy-targeted-sources-1.17.30-2.123.noarch.rpm

--
Eugene



-----Original Message-----
From: Brian F. G. Bidulock <[email protected]>
To: [email protected]
Cc: [email protected]
Sent: Wed, 7 Dec 2005 04:51:53 -0700
Subject: Re: [Linux-streams] SELinux vs. LiS-2.18


eugenelisstreams,

Read the docs, or 'man -k selinux'.  I just configure the load permissive.
(Medium security.)

--brian

On Tue, 06 Dec 2005, [email protected] wrote:

>
>
>    Brian,
>
>    Thanks for you comments.
>    Can you elaborate a little?
>    How can I tell SELinux that it is ok for LiS to register file system?
>    What is the value of magic number for LiS filesystem?
>
>    > I trust that you are enforcing, with permissive there is no problem.
>
>    Here I did not get it at all.  Could you explain?
>    Sorry I'm not SELinux pro.
>
>    --
>    Eugene
>
>

--
Brian F. G. Bidulock    ¦ The reasonable man adapts himself to the ¦
[email protected]    ¦ world; the unreasonable one persists in  ¦
http://www.openss7.org/ ¦ trying  to adapt the  world  to himself. ¦
                        ¦ Therefore  all  progress  depends on the ¦
                        ¦ unreasonable man. -- George Bernard Shaw ¦
___________________________________________________
Try the New Netscape Mail Today!
Virtually Spam-Free | More Storage | Import Your Contact List
http://mail.netscape.com
LiS-2.18.0-RHEL4.patch (application/octet-stream, 34.3 KB)
diff -Naur LiS-2.18-orig/config.mk LiS-2.18-RHEL4/config.mk
--- LiS-2.18-orig/config.mk	2004-10-11 11:40:44.000000000 -0400
+++ LiS-2.18-RHEL4/config.mk    2005-04-13 05:54:21.093568464 -0400
@@ -61,6 +61,9 @@
 
 AS	=$(CROSS_COMPILE)as
 LD	=$(CROSS_COMPILE)ld
+ifeq ($(ARCH),ppc64)
+LD	=$(CROSS_COMPILE)ld -m elf64ppc
+endif
 CPP	=$(CC_NAME) -E
 AR	=$(CROSS_COMPILE)ar
 NM	=$(CROSS_COMPILE)nm
@@ -141,7 +141,8 @@
 #
 PROBLEMS = -Wpointer-arith
 PROBLEMS = 
-XOPTS = -Wall -Wstrict-prototypes $(PROBLEMS)
+# Added -D__KERNGLUE__ to keep RHEL4 happy
+XOPTS = -Wall -Wstrict-prototypes $(PROBLEMS) -D__KERNGLUE__
 XOPTS+= -fno-strict-aliasing -Wno-sign-compare -fno-common
 
 #
@@ -170,6 +171,9 @@
 ifeq ($(ARCH),ppc)
 XOPTS += -D__powerpc__ -fno-builtin -pipe -D_PPC_LIS_
 endif
+ifeq ($(ARCH),ppc64)
+XOPTS += -D_PPC_LIS_ -D_PPC64_LIS_ -m64 -msoft-float -pipe -Wno-uninitialized -mminimal-toc -mtraceback=none -mcall-aixdesc -mtune=power4 -fno-unit-at-a-time
+endif
 # For s390 & s390x architecture we need some bypasses
 ifeq ($(ARCH),s390)
 XOPTS += -D_S390_LIS_
diff -Naur LiS-2.18-orig/Configure LiS-2.18-RHEL4/Configure
--- LiS-2.18-orig/Configure	2004-10-11 16:20:49.000000000 -0400
+++ LiS-2.18-RHEL4/Configure    2005-04-11 02:46:49.335246168 -0400
@@ -464,7 +464,7 @@
 ac_get_config()
 {
     if [ -f $KSRC/include/linux/config.h ]; then
-	cc -I$KSRC/include -E -dM \
+	cc -D__KERNGLUE__ -I$KSRC/include -E -dM \
 		-include $KSRC/include/linux/config.h dummy.c >kconfig
 	x=`grep $1 kconfig 2>&1`
 	if [ $? -eq 0 ]; then			# found it
@@ -600,7 +600,7 @@
 get_vers_h()
 {
     if [ -f $1 ]; then
-	cc -I$KSRC/include -E -dM -include $1 dummy.c > kver
+	cc -D__KERNGLUE__ -I$KSRC/include -E -dM -include $1 dummy.c > kver
 	KVER_H=`grep UTS_RELEASE kver | \
 	     sed -e 's/^.*UTS_RELEASE.//' -e's/"//g' -e's/  *$//'`
 	NKVER_H=`echo $KVER_H | sed -e 's/-.*//'`
@@ -1332,10 +1332,19 @@
 
 if [ "$MACHINE" = "s390" -o "$MACHINE" = "s390x" ]; then
   SMP_GREP_ID='smp_num_cpus'
+elif [ "$MACHINE" = "ppc64" ]; then
+  SMP_GREP_ID='smp_cpus_done'
 else
   SMP_GREP_ID='cpu_online_map'
 fi
 
+if [ "$MACHINE" = "s390x" ]; then
+  INT_PSW=n
+fi
+if [ "$MACHINE" = "ppc64" ]; then
+  INT_PSW=n
+fi
+
 #
 # TARGET
 #
diff -Naur LiS-2.18-orig/Makefile LiS-2.18-RHEL4/Makefile
--- LiS-2.18-orig/Makefile	2004-09-10 10:28:47.000000000 -0400
+++ LiS-2.18-RHEL4/Makefile     2005-04-11 02:49:00.192352864 -0400
@@ -74,12 +74,15 @@
 endif
 
 #
-# If building on 64-bit s390 then build libc for 32-bit applications
+# If building on 64-bit s390x or ppc64 then build libc for 32-bit applications
 # running over 64-bit kernel.
 #
 ifeq ($(ARCH),s390x)
 ALL_TARGETS += libc32over64
 endif
+ifeq ($(ARCH),ppc64)
+ALL_TARGETS += libc32over64
+endif
 
 #
 # Does the user want us to install streams.o in the official
@@ -161,6 +164,9 @@
 ifeq ($(ARCH),s390x)
 	$(Q)$(MAKE) -C $(LIBOBJ32OVER64) $@
 endif
+ifeq ($(ARCH),ppc64)
+	$(Q)$(MAKE) -C $(LIBOBJ32OVER64) $@
+endif
 	$(Q)$(MAKE) -C $(UTILOBJ) $@
 	$(Q)$(MAKE) -C $(DRVROBJ) $@
 	$(Q)$(MAKE) -C $(HEADOBJ) $@
@@ -275,6 +281,9 @@
 ifeq ($(ARCH),s390x)
 	-$(Q)$(MAKE) -C $(LIBOBJ32OVER64) $@
 endif
+ifeq ($(ARCH),ppc64)
+	-$(Q)$(MAKE) -C $(LIBOBJ32OVER64) $@
+endif
 	-$(Q)$(MAKE) -C $(UTILOBJ) $@
 	-$(Q)$(MAKE) -C $(DRVROBJ) $@
 	-$(Q)$(MAKE) -C man $@
@@ -282,6 +282,7 @@
 ifeq ($(CONFIG_STREAMS),m)
 	-$(Q) scripts/update_conf.modules
 	-$(Q) (cd $(MOD_INST_DIR); rm -f streams.o streams-*.o)
+	-$(Q) (cd $(MOD_INST_DIR); rm -f streams.ko streams-*.ko)
 endif
 endif	# .config_mk
 	$(nothing)
@@ -363,7 +363,11 @@
 #
 streams.o: $(DRVROBJ)/drivers.o $(HEADOBJ)/streamshead.o pkg/drivers.o
 	$(Q_ECHO) $(qtag_LDm)$(reltarget)
+ifeq ($(ARCH),ppc64)
+	$(Q)$(LD) -r -d -m elf64ppc -o $@ $^
+else
 	$(Q)$(LD) -r -d -o $@ $^
+endif
 
 $(HEADOBJ)/streamshead.o: config
 	$(Q)$(MAKE) -C $(HEADOBJ)
@@ -559,6 +568,9 @@
 ifeq ($(ARCH),s390x)
 	-$(Q)$(MAKE) -C $(LIBOBJ32OVER64) $@
 endif
+ifeq ($(ARCH),ppc64)
+	-$(Q)$(MAKE) -C $(LIBOBJ32OVER64) $@
+endif
 	-$(Q)$(MAKE) -C $(HEADOBJ) $@
 	-$(Q)$(MAKE) -C $(DRVROBJ) $@
 	-$(Q)$(MAKE) -C $(UTILOBJ) $@
@@ -576,6 +588,9 @@
 ifeq ($(ARCH),s390x)
 	$(Q)$(MAKE) -C $(LIBOBJ32OVER64) $@
 endif
+ifeq ($(ARCH),ppc64)
+	$(Q)$(MAKE) -C $(LIBOBJ32OVER64) $@
+endif
 	$(Q)$(MAKE) -C $(HEADOBJ) $@
 	$(Q)$(MAKE) -C $(DRVROBJ) $@
 	$(Q)$(MAKE) -C $(UTILOBJ) $@
diff -Naur LiS-2.18-orig/drivers/str/Config LiS-2.18-RHEL4/drivers/str/Config
--- LiS-2.18-orig/drivers/str/Config	2004-09-02 12:42:46.000000000 -0400
+++ LiS-2.18-RHEL4/drivers/str/Config   2005-04-11 02:40:01.106306400 -0400
@@ -36,7 +36,7 @@
 module	connld          connld_
 module	relay		relay_
 module	relay2		relay2_
-module	ip_strms	ip_to_streams_
+#module	ip_strms	ip_to_streams_
 module	timod		timod_
 module	tirdwr		tirdwr_
 
@@ -72,7 +72,7 @@
 objname module pipemod         pipemod
 objname module connld          connld
 objname module relay2          relay
-objname module ip_strms        ip_strm_mod
+#objname module ip_strms        ip_strm_mod
 objname module timod           timod
 objname module tirdwr          tirdwr
 
diff -Naur LiS-2.18-orig/drivers/str/loop.c LiS-2.18-RHEL4/drivers/str/loop.c
--- LiS-2.18-orig/drivers/str/loop.c	2004-09-13 11:12:31.000000000 -0400
+++ LiS-2.18-RHEL4/drivers/str/loop.c   2005-04-12 08:43:19.235999680 -0400
@@ -145,7 +145,9 @@
     if (rtn < 0 && rtn != -ENOENT)
     {
 	printk("unlink %s: error %d\n", name, rtn);
+#if !defined(__ppc64__)
 	return ;
+#endif
     }
 
     if (maj == 0)			/* don't make the node */
diff -Naur LiS-2.18-orig/drivers/str/mk.bdy LiS-2.18-RHEL4/drivers/str/mk.bdy
--- LiS-2.18-orig/drivers/str/mk.bdy	2004-06-06 17:05:25.000000000 -0400
+++ LiS-2.18-RHEL4/drivers/str/mk.bdy   2005-04-12 08:49:15.441028864 -0400
@@ -28,7 +28,11 @@
 
 drivers.o: $(DRVRS) $(TDRVRS)
 	$(Q_ECHO) $(qtag_LD)$(relpwdtarget)
+ifeq ($(ARCH),ppc64)
+	$(Q)$(LD) -r -m elf64ppc -o $@ $^
+else
 	$(Q)$(LD) -r -o $@ $^
+endif
 
 # Compiling a target-specific object ( $(TDRVRS) )
 %.o: %.c
diff -Naur LiS-2.18-orig/drivers/str/linux/liskmod.c LiS-2.18-RHEL4/drivers/str/linux/liskmod.c
--- LiS-2.18-orig/drivers/str/linux/liskmod.c	2004-06-06 17:05:25.000000000 -0400
+++ LiS-2.18-RHEL4/drivers/str/linux/liskmod.c  2005-04-11 02:40:01.107306248 -0400
@@ -49,7 +49,9 @@
 # ifdef LISMODVERS
 #  include <sys/modversions.h>	/* /usr/src/LiS/include/sys */
 # else
-#  include <linux/modversions.h>	/* BEFORE module.h, kernel.h, ... */
+#  if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,5)
+#   include <linux/modversions.h>      /* BEFORE module.h, kernel.h, ... */
+#  endif
 # endif
 #endif
 
diff -Naur LiS-2.18-orig/drivers/str/linux/Makefile LiS-2.18-RHEL4/drivers/str/linux/Makefile
--- LiS-2.18-orig/drivers/str/linux/Makefile	2004-09-10 10:52:18.000000000 -0400
+++ LiS-2.18-RHEL4/drivers/str/linux/Makefile   2005-04-11 02:40:01.107306248 -0400
@@ -47,10 +47,10 @@
 TOBJS += ip_to_dlpi
 endif
 ifeq ($(ARCH),s390)
-TOBJS := connld
+TOBJS := connld mtdrv
 endif
 ifeq ($(ARCH),s390x)
-TOBJS := connld
+TOBJS := connld mtdrv
 endif
 
 # Similar to TOBJS, but non-streams modules
diff -Naur LiS-2.18-orig/head/linux/exports.c LiS-2.18-RHEL4/head/linux/exports.c
--- LiS-2.18-orig/head/linux/exports.c	2004-09-16 12:42:48.000000000 -0400
+++ LiS-2.18-RHEL4/head/linux/exports.c 2005-04-13 02:40:01.107306248 -0400
@@ -34,7 +34,9 @@
 # ifdef LISMODVERS
 #  include <sys/modversions.h>      /* /usr/src/LiS/include/sys */
 # else
-#  include <linux/modversions.h>
+#  if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,5)
+#    include <linux/modversions.h>
+#  endif
 # endif
 #endif
 #define CONFIG_MODULES  1
@@ -172,9 +174,9 @@
 EXPORT_SYMBOL_NOVERS(lis_major);
 EXPORT_SYMBOL_NOVERS(lis_malloc);
 EXPORT_SYMBOL_NOVERS(lis_mark_mem_fcn);
-#if (!defined(_S390_LIS_) && !defined(_S390X_LIS_))
+#if (!defined(_S390_LIS_) && !defined(_S390X_LIS_) && !defined(_PPC64_LIS_))
 EXPORT_SYMBOL_NOVERS(lis_membar);
-#endif          /* S390 or S390X */
+#endif          /* S390 or S390X or PPC64 */
 EXPORT_SYMBOL_NOVERS(lis_milli_to_ticks);
 EXPORT_SYMBOL_NOVERS(lis_mknod);
 #if 0 && defined(CONFIG_DEV)
@@ -205,7 +207,7 @@
 EXPORT_SYMBOL_NOVERS(lis_osif_pci_write_config_word);
 EXPORT_SYMBOL_NOVERS(lis_osif_sti);
 EXPORT_SYMBOL_NOVERS(lis_own_spl);
-#if (!defined(_S390_LIS_) && !defined(_S390X_LIS_))
+#if (!defined(_S390_LIS_) && !defined(_S390X_LIS_) && !defined(_PPC64_LIS_))
 EXPORT_SYMBOL_NOVERS(lis_pcibios_find_class);
 EXPORT_SYMBOL_NOVERS(lis_pcibios_find_device);
 EXPORT_SYMBOL_NOVERS(lis_pcibios_init);
@@ -238,7 +240,7 @@
 EXPORT_SYMBOL_NOVERS(lis_pci_write_config_byte);
 EXPORT_SYMBOL_NOVERS(lis_pci_write_config_dword);
 EXPORT_SYMBOL_NOVERS(lis_pci_write_config_word);
-#endif          /* S390 or S390X */
+#endif          /* S390 or S390X or PPC64 */
 EXPORT_SYMBOL_NOVERS(lis_phys_to_virt);
 EXPORT_SYMBOL_NOVERS(lis_print_block);
 EXPORT_SYMBOL_NOVERS(lis_print_data);
@@ -351,7 +353,7 @@
 EXPORT_SYMBOL_NOVERS(lis_xmsgsize);
 EXPORT_SYMBOL_NOVERS(lis_zmalloc);
 
-#if (!defined(_S390_LIS_) && !defined(_S390X_LIS_))
+#if (!defined(_S390_LIS_) && !defined(_S390X_LIS_) && !defined(_PPC64_LIS_))
 
 EXPORT_SYMBOL_NOVERS(lis_osif_pci_alloc_consistent);
 EXPORT_SYMBOL_NOVERS(lis_osif_pci_dma_supported);
@@ -395,4 +397,4 @@
 EXPORT_SYMBOL_NOVERS(__wrap_memcmp);
 
 
-#endif          /* S390 or S390X */
+#endif          /* S390 or S390X or PPC64 */
diff -Naur LiS-2.18-orig/head/linux-mdep.c LiS-2.18-RHEL4/head/linux-mdep.c
--- LiS-2.18-orig/head/linux-mdep.c	2004-10-13 12:07:36.000000000 -0400
+++ LiS-2.18-RHEL4/head/linux-mdep.c    2005-04-13 06:46:59.859912072 -0400
@@ -53,6 +53,9 @@
 #include <linux/module.h>
 #include <sys/LiS/modcnt.h>		/* after linux-mdep.h & module.h */
 #include <linux/version.h>
+#if defined(KERNEL_2_5)
+#include <linux/init.h>
+#endif
 
 #include <linux/sched.h>
 #define	__KERNEL_SYSCALLS__	1	/* to make kernel_thread visible */
@@ -94,7 +97,7 @@
  */
 #if ( defined(__s390__) || defined(__s390x__) ) && defined(KERNEL_2_4)
 #define NUM_CPUS		smp_num_cpus
-#elif defined(KERNEL_2_5)
+#elif defined(KERNEL_2_5)	/*? really ?*/
 #define NUM_CPUS		num_online_cpus()
 #else
 #define NUM_CPUS		smp_num_cpus
@@ -194,7 +197,7 @@
 static struct inode * lis_get_inode( mode_t mode, dev_t dev );
 void lis_print_dentry(struct dentry *d, char *comment) ;
 
-#ifdef _S390X_LIS_
+#if (defined(_S390X_LIS_) || defined(_PPC64_LIS_))
 extern long sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg);
 extern int register_ioctl32_conversion(unsigned int fd, 
                                        int (*handler)(unsigned int fd,
@@ -998,7 +1001,11 @@
 	if (inode && inode->i_cdev)
 	    printk(">> i->i_cdev: c@0x%p/%d/%x \"%s\"\n",
 		inode->i_cdev,
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,8)
 		K_ATOMIC_READ(&inode->i_cdev->kobj.refcount),
+#else
+		K_ATOMIC_READ(&inode->i_cdev->kobj.kref.refcount),
+#endif
 		DEV_TO_INT(inode->i_cdev->dev),
 		(inode->i_cdev->owner ?
 		 inode->i_cdev->owner->name : "No-Owner")) ;
@@ -1020,6 +1027,16 @@
 #endif
 }
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,9)
+void cdev_put (struct cdev *p)
+{
+    if (p) {
+        kobject_put(&p->kobj);
+        module_put(p->owner);
+    }
+}
+#endif
+
 void lis_dput(struct dentry *d)
 {
     struct super_block	*sb = NULL ;
@@ -3621,7 +3638,7 @@
 }
 
 
-#ifdef _S390X_LIS_
+#if (defined(_S390X_LIS_) || defined(_PPC64_LIS_))
 int lis_ioctl32_str (unsigned int fd, unsigned int cmd, unsigned long arg)
 {
   strioctl_t par64;
@@ -3774,7 +3791,7 @@
 
     lis_start_qsched() ;		/* ensure q running process going */
 
-#ifdef _S390X_LIS_
+#if (defined(_S390X_LIS_) || defined(_PPC64_LIS_))
     register_ioctl32_conversion(I_SETSIG,sys_ioctl);
     register_ioctl32_conversion(I_SRDOPT,sys_ioctl);
     register_ioctl32_conversion(I_PUSH,sys_ioctl);
@@ -3805,7 +3822,7 @@
  * Magic named routine called by kernel module support code.
  */
 #ifdef KERNEL_2_5
-int _lis_init_module( void )
+static int __init _lis_init_module( void )
 #else
 int init_module( void )
 #endif
@@ -3817,7 +3834,7 @@
  * Magic named routine called by kernel module support code.
  */
 #ifdef KERNEL_2_5
-void _lis_cleanup_module( void )
+static void __exit _lis_cleanup_module( void )
 #else
 void cleanup_module( void )
 #endif
@@ -3851,12 +3868,12 @@
     lis_kill_qsched() ;			/* drivers/str/runq.c */
     lis_terminate_head();
 
-#if (!defined(_S390_LIS_) && !defined(_S390X_LIS_))
+#if (!defined(_S390_LIS_) && !defined(_S390X_LIS_) && !defined(_PPC64_LIS)) 
     {
         extern void	lis_pci_cleanup(void) ;
         lis_pci_cleanup() ;
     } 
-#endif          /* S390 or S390X */
+#endif          /* S390 or S390X or PPC64 */
 
     unregister_chrdev(lis_major,"streams");
     MNTSYNC();
@@ -3885,7 +3902,7 @@
     lis_terminate_final() ;		/* LiS internal memory */
     lis_mem_terminate() ;		/* LiS use of slab allocator */
 
-#ifdef _S390X_LIS_
+#if (defined(_S390X_LIS_) || defined(_PPC64_LIS_))
     unregister_ioctl32_conversion(I_SETSIG);
     unregister_ioctl32_conversion(I_SRDOPT);
     unregister_ioctl32_conversion(I_PUSH);
diff -Naur LiS-2.18-orig/head/mk.bdy LiS-2.18-RHEL4/head/mk.bdy
--- LiS-2.18-orig/head/mk.bdy	2004-10-11 11:40:44.000000000 -0400
+++ LiS-2.18-RHEL4/head/mk.bdy  2005-04-12 08:50:00.564091792 -0400
@@ -51,7 +51,11 @@
 
 streamshead.o: $(OBJS) $(XOBJS) $(ASMOBJS)
 	$(Q_ECHO) $(qtag_LD)$(relpwdtarget)
+ifeq ($(ARCH),ppc64)
+	$(Q)$(LD) -r -m elf64ppc -o $@ $^
+else
 	$(Q)$(LD) -r -o $@ $^
+endif
 
 #
 # Some rules to make object files
diff -Naur LiS-2.18-orig/head/mod.c LiS-2.18-RHEL4/head/mod.c
--- LiS-2.18-orig/head/mod.c	2004-10-11 11:40:44.000000000 -0400
+++ LiS-2.18-RHEL4/head/mod.c   2005-04-13 06:47:42.641931072 -0400
@@ -1022,7 +1022,7 @@
     if (devptr->irq <= 0)
 	return ;
 
-#if (!defined(_S390_LIS_) && !defined(_S390X_LIS_))
+#if (!defined(_S390_LIS_) && !defined(_S390X_LIS_) && !defined(_PPC64_LIS_))
     retval =  request_irq(devptr->irq, devptr->handler, 0, name, NULL);
     if (retval)
     {
@@ -1169,7 +1169,7 @@
 		devptr = &lis_device_config[i] ;
 		if (devptr->irq > 0)
 		{
-#if (!defined(_S390_LIS_) && !defined(_S390X_LIS_))
+#if (!defined(_S390_LIS_) && !defined(_S390X_LIS_) && !defined(_PPC64_LIS_))
 		    free_irq(devptr->irq, NULL) ;
 #endif
 		
diff -Naur LiS-2.18-orig/head/osif.c LiS-2.18-RHEL4/head/osif.c
--- LiS-2.18-orig/head/osif.c	2004-10-11 17:49:31.000000000 -0400
+++ LiS-2.18-RHEL4/head/osif.c  2005-04-13 06:48:09.149895440 -0400
@@ -335,7 +335,7 @@
 #endif
 
 #if LINUX_VERSION_CODE >= 0x020400		/* 2.4 kernel */
-#if (!defined(_S390_LIS_) && !defined(_S390X_LIS_))
+#if (!defined(_S390_LIS_) && !defined(_S390X_LIS_) && !defined(_PPC64_LIS_))
 
 	 /***************************************
 	 *        PCI DMA Mapping Fcns		*
@@ -473,7 +473,7 @@
 
 #endif                                  /* 2.4.13 */
 
-#endif          /* S390 or S390X */
+#endif          /* S390 or S390X or PPC64 */
 
 #endif		/* LINUX_VERSION_CODE >= 0x020400 */
 
@@ -536,7 +536,9 @@
 	if (dv->handler && dv->dev_id && dv->irq)
 	{
 	    printk("LiS freeing IRQ%u\n", dv->irq) ;
+#if !defined(__s390__)
 	    free_irq(dv->irq, dv) ;
+#endif
 	}
 	FREE(dv) ;
 	dv = nxt ;
@@ -879,7 +881,11 @@
 ************************************************************************/
 void  _RP lis_sleep_on(OSIF_WAIT_Q_ARG)
 {
+#  if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,8)
     sleep_on(wq) ;
+#else
+    wait_event(wq,0) ;
+#endif
 }
 
 void  _RP lis_interruptible_sleep_on(OSIF_WAIT_Q_ARG)
diff -Naur LiS-2.18-orig/head/stream.c LiS-2.18-RHEL4/head/stream.c
--- LiS-2.18-orig/head/stream.c		2004-09-10 17:34:18.000000000 -0400
+++ LiS-2.18-RHEL4/head/stream.c        2005-05-12 13:01:52.838008472 -0400
@@ -142,10 +142,7 @@
 	lis_currq[cpu_id] = q ;			/* for debugging */
 	if (!LIS_CHECK_Q_MAGIC(q))
 	{
-	    printk("queuerun: scan queue is broken\n") ;
-	    lis_scanqhead = NULL ;
-	    lis_scanqtail = NULL ;
-	    K_ATOMIC_SET(&lis_runq_req_cnt, 0) ;
+	    printk("queuerun: queue flags are 0x%lx\n",q->q_flag) ;
 	    goto scan_loop_bottom ;
 	}
 
@@ -245,10 +242,7 @@
 	lis_currq[cpu_id] = q ;			/* for debugging */
 	if (!LIS_CHECK_Q_MAGIC(q))
 	{
-	    printk("queuerun: service queue is broken\n") ;
-	    lis_qhead = NULL ;
-	    lis_qtail = NULL ;
-	    K_ATOMIC_SET(&lis_runq_req_cnt, 0) ;
+	    printk("queuerun(2): queue flags are 0x%lx\n",q->q_flag) ;
 	    goto qsched_loop_bottom ;
 	}
 
diff -Naur LiS-2.18-orig/include/sys/osif.h LiS-2.18-RHEL4/include/sys/osif.h
--- LiS-2.18-orig/include/sys/osif.h	2004-09-16 14:50:09.000000000 -0400
+++ LiS-2.18-RHEL4/include/sys/osif.h   2005-04-13 06:50:34.702997496 -0400
@@ -173,7 +173,7 @@
 
 #if LINUX_VERSION_CODE >= 0x020400	/* 2.4 kernel */
 
-#if (!defined(_S390_LIS_) && !defined(_S390X_LIS_))
+#if (!defined(_S390_LIS_) && !defined(_S390X_LIS_) && !defined(_PPC64_LIS_))
 #ifdef pci_alloc_consistent
 #undef pci_alloc_consistent
 #endif
@@ -255,7 +255,7 @@
 #endif
 #define sg_dma_len lis_osif_sg_dma_len
 
-#endif          /* S390 or S390X */
+#endif          /* S390 or S390X or PPC64 */
 #endif
 
 
@@ -526,7 +526,7 @@
 extern size_t lis_osif_sg_dma_len(struct scatterlist *sg)_RP;
 
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,13)	/* 2.4.13 or later */
-#if (!defined(_S390_LIS_) && !defined(_S390X_LIS_))
+#if (!defined(_S390_LIS_) && !defined(_S390X_LIS_) && !defined(_PPC64_LIS_))
 extern void lis_osif_pci_unmap_page(struct pci_dev *hwdev,
 				dma_addr_t dma_address, size_t size,
 				int direction)_RP;
@@ -544,7 +544,7 @@
 					dma64_addr_t dma_addr)_RP;
 extern void lis_osif_pci_dac_dma_sync_single(struct pci_dev *pdev,
 			    dma64_addr_t dma_addr, size_t len, int direction)_RP;
-#endif					/* S390 or S390X */
+#endif					/* S390 or S390X or PPC64 */
 #endif					/* 2.4.13 */
 
 
diff -Naur LiS-2.18-orig/include/sys/gnu.stropts.h LiS-2.18-RHEL4/include/sys/gnu.stropts.h
--- LiS-2.18-orig/include/sys/gnu.stropts.h	1999-12-04 15:00:31.000000000 -0500
+++ LiS-2.18-RHEL4/include/sys/gnu.stropts.h    2005-04-11 02:40:01.113305336 -0400
@@ -22,7 +22,7 @@
 #include <bits/types.h>
 
 /* Macros used as `request' argument to `ioctl'.  */
-#define __SID		('S' << 8)
+#define __SID		(0xdc << 8)
 
 #define I_NREAD	    (__SID | 1)	/* Counts the number of data bytes in the data
 				   block in the first message.  */
diff -Naur LiS-2.18-orig/include/sys/LiS/linux-mdep.h LiS-2.18-RHEL4/include/sys/LiS/linux-mdep.h
--- LiS-2.18-orig/include/sys/LiS/linux-mdep.h	2004-09-16 12:41:59.000000000 -0400
+++ LiS-2.18-RHEL4/include/sys/LiS/linux-mdep.h 2005-04-11 02:40:01.111305640 -0400
@@ -82,14 +82,16 @@
  * versions.
  */
 #define queue_t	irda_queue_t
+#include <linux/version.h>
 #ifdef MODVERSIONS
 # ifdef LISMODVERS
 # include <sys/modversions.h>           /* /usr/src/LiS/include/sys */
 # else
-# include <linux/modversions.h>
+#  if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,5)
+#   include <linux/modversions.h>
+#  endif
 # endif
 #endif
-#include <linux/version.h>
 #ifndef KERNEL_VERSION
 #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
 #endif
diff -Naur LiS-2.18-orig/include/sys/LiS/module.h LiS-2.18-RHEL4/include/sys/LiS/module.h
--- LiS-2.18-orig/include/sys/LiS/module.h	2004-09-08 11:48:31.000000000 -0400
+++ LiS-2.18-RHEL4/include/sys/LiS/module.h     2005-04-11 02:40:01.111305640 -0400
@@ -40,7 +40,9 @@
 #     ifdef LISMODVERS
 #      include <sys/modversions.h>      /* /usr/src/LiS/include/sys */
 #     else
-#      include <linux/modversions.h>
+#      if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,5)
+#       include <linux/modversions.h>
+#      endif
 #     endif
 #    endif
 #    include <linux/module.h>
diff -Naur LiS-2.18-orig/include/sys/strmsg.h LiS-2.18-RHEL4/include/sys/strmsg.h
--- LiS-2.18-orig/include/sys/strmsg.h	2004-02-19 16:24:24.000000000 -0500
+++ LiS-2.18-RHEL4/include/sys/strmsg.h 2005-04-11 02:40:01.111305640 -0400
@@ -92,34 +92,33 @@
     QNORM       = 0x00,		/* - S U O A H M L */
     M_DATA      = 0x00,		/* | S U O A H M L */
     M_PROTO     = 0x01,		/* | S U O A H M L */
-    M_BREAK     = 0x08,		/* v S U O(0x10) A H M L(0x02) */
-    M_PASSFP    = 0x09,		/* | S U O(0x11) A H M L(0x06) */
-    M_EVENT     = 0x0a,		/* ? S */
-    M_SIG       = 0x0b,		/* ^ S U O(0x13) A H M L(0x09) */
-    M_DELAY     = 0x0c,		/* v S U O(0x14) A H M L(0x04) */
-    M_CTL       = 0x0d,		/* | S U O(0x15) A H M L(0x03) */
-    M_IOCTL     = 0x0e,		/* v S U O(0x16) A H M L(0x05) */
-    M_SETOPTS   = 0x10,		/* ^ S U O(0x20) A H M L(0x08) */
-    M_RSE       = 0x11,		/* | S U O(0x21) A H M L(0x07) */
+    M_BREAK     = 0x02,		/* v S U O(0x10) A H M L(0x02) */
+    M_PASSFP    = 0x06,		/* | S U O(0x11) A H M L(0x06) */
+    M_SIG       = 0x09,		/* ^ S U O(0x13) A H M L(0x09) */
+    M_DELAY     = 0x04,		/* v S U O(0x14) A H M L(0x04) */
+    M_CTL       = 0x03,		/* | S U O(0x15) A H M L(0x03) */
+    M_IOCTL     = 0x05,		/* v S U O(0x16) A H M L(0x05) */
+    M_SETOPTS   = 0x08,		/* ^ S U O(0x20) A H M L(0x08) */
+    M_RSE       = 0x07,		/* | S U O(0x21) A H M L(0x07) */
     M_TRAIL     = 0x12,		/* ? U */
     M_BACKWASH  = 0x13,		/* v A */
-    QPCTL       = 0x80,		/* - S U O A H M L(0x0a) */
-    M_IOCACK    = 0x81,		/* ^ S U O A H M L(0x0f) */
-    M_IOCNAK    = 0x82,		/* ^ S U O A H M L(0x10) */
-    M_PCPROTO   = 0x83,		/* | S U O A H M L(0x12) */
-    M_PCSIG     = 0x84,		/* ^ S U O A H M L(0x14) */
-    M_READ      = 0x85,		/* v S U O(0x8b) A H(0x8b) M(0x8b) L(0x15) */
-    M_FLUSH     = 0x86,		/* | S U O A H M L(0x0d) */
-    M_STOP      = 0x87,		/* v S U O A H M L(0x16) */
-    M_START     = 0x88,		/* v S U O A H M L(0x17) */
-    M_HANGUP    = 0x89,		/* ^ S U O A H M L(0x0e) */
-    M_ERROR     = 0x8a,		/* ^ S U O A H M L(0x0c) */
-    M_COPYIN    = 0x8b,		/* ^ S U O(0x8d) A H(0x8d) M(0x8c) L(0x0a) */
-    M_COPYOUT   = 0x8c,		/* ^ S U O(0x8e) A H(0x8e) M(0x8d) L(0x0b) */
-    M_IOCDATA   = 0x8d,		/* v S U O(0x8f) A H(0x8f) M(0x8e) L(0x11) */
-    M_PCRSE     = 0x8e,		/* | S U O(0x90) A H(0x90) M(0x90) L(0x13) */
-    M_STOPI     = 0x8f,		/* v S U O(0x91) A H(0x91) M(0x91) L(0x19) */
-    M_STARTI    = 0x90,		/* v S U O(0x92) A H(0x92) M(0x92) L(0x18) */
+    QPCTL       = 0x0a,		/* - S U O A H M L(0x0a) */
+    M_IOCACK    = 0x0f,		/* ^ S U O A H M L(0x0f) */
+    M_IOCNAK    = 0x10,		/* ^ S U O A H M L(0x10) */
+    M_PCPROTO   = 0x12,		/* | S U O A H M L(0x12) */
+    M_PCSIG     = 0x14,		/* ^ S U O A H M L(0x14) */
+    M_READ      = 0x15,		/* v S U O(0x8b) A H(0x8b) M(0x8b) L(0x15) */
+    M_FLUSH     = 0x0d,		/* | S U O A H M L(0x0d) */
+    M_STOP      = 0x16,		/* v S U O A H M L(0x16) */
+    M_START     = 0x17,		/* v S U O A H M L(0x17) */
+    M_HANGUP    = 0x0e,		/* ^ S U O A H M L(0x0e) */
+    M_ERROR     = 0x0c,		/* ^ S U O A H M L(0x0c) */
+    M_COPYIN    = 0x0a,		/* ^ S U O(0x8d) A H(0x8d) M(0x8c) L(0x0a) */
+    M_COPYOUT   = 0x0b,		/* ^ S U O(0x8e) A H(0x8e) M(0x8d) L(0x0b) */
+    M_IOCDATA   = 0x11,		/* v S U O(0x8f) A H(0x8f) M(0x8e) L(0x11) */
+    M_PCRSE     = 0x13,		/* | S U O(0x90) A H(0x90) M(0x90) L(0x13) */
+    M_STOPI     = 0x19,		/* v S U O(0x91) A H(0x91) M(0x91) L(0x19) */
+    M_STARTI    = 0x18,		/* v S U O(0x92) A H(0x92) M(0x92) L(0x18) */
 
     /* the rest of these are all over the board, only M_UNHANGUP is common,
      * they have been renumbered so that at least they don't overlap
diff -Naur LiS-2.18-orig/include/sys/stropts.h LiS-2.18-RHEL4/include/sys/stropts.h
--- LiS-2.18-orig/include/sys/stropts.h	2004-07-30 11:52:59.000000000 -0400
+++ LiS-2.18-RHEL4/include/sys/stropts.h        2005-04-11 02:40:01.113305336 -0400
@@ -260,8 +260,8 @@
 #undef STR
 #endif
 
-#define __SID           ('S'<<8)	/* for GNU libc compatibility */
-#define STR             ('S'<<8)	/* for UnixWare/Solaris compatibility */
+#define __SID           (0xdc<<8)	/* for GNU libc compatibility */
+#define STR             (0xdc<<8)	/* for UnixWare/Solaris compatibility */
 #define I_NREAD         (__SID | 1)
 #define I_PUSH          (__SID | 2)
 #define I_POP           (__SID | 3)
diff -Naur LiS-2.18-orig/libc/linux/Makefile LiS-2.18-RHEL4/libc/linux/Makefile
--- LiS-2.18-orig/libc/linux/Makefile	2004-09-09 16:14:13.000000000 -0400
+++ LiS-2.18-RHEL4/libc/linux/Makefile  2005-04-11 02:56:49.932941440 -0400
@@ -13,6 +13,11 @@
 # For 64-bit zSeries, specify use of position independent code
 XOPTS  += -fPIC
 endif
+# For 64-bit ppc64, specify use of position independent code
+ifeq ($(ARCH), ppc64)
+XOPTS  += -fPIC -m64
+endif
+
 
 
 include $(LIBDIR)/mk.bdy
diff -Naur LiS-2.18-orig/libc/mk.bdy LiS-2.18-RHEL4/libc/mk.bdy
--- LiS-2.18-orig/libc/mk.bdy   2005-04-12 08:39:09.827976880 -0400
+++ LiS-2.18-RHEL4/libc/mk.bdy  2005-04-12 09:04:40.416987608 -0400
@@ -28,11 +28,19 @@
 
 $(LIB_SHARED): $(LIBOBJS)
 	$(Q_ECHO) $(qtag_LD)$(reltarget)
+ifeq ($(ARCH),ppc64)
+	$(Q)$(LD) -shared -m elf64ppc -o $@ $^ -lc
+else
 	$(Q)$(LD) -shared -o $@ $^ -lc
+endif
 
 $(LIB_PSHARED): $(PRELDOBJS)
 	$(Q_ECHO) $(qtag_LD)$(reltarget)
+ifeq ($(ARCH),ppc64)
+	$(Q)$(LD) -shared -m elf64ppc -o $@ $^ -lc
+else
 	$(Q)$(LD) -shared -o $@ $^ -lc
+endif
 
 $(LIB_STATIC): $(LIBOBJS)
 	-$(Q)rm -f $@
@@ -63,18 +71,22 @@
 
 install: .compiler all
 	$(Q_ECHO) $(qtag_INSTALL)$(relpwd)
-ifneq ($(ARCH),s390x)
-	$(Q)install -d $(DEST_LIBDIR)
-	$(Q)install -m 0755 $(LIB_SHARED) $(DEST_LIBDIR)/$(LIBFILE_SHARED)
-	$(Q)install -m 0755 $(LIB_PSHARED) $(DEST_LIBDIR)/$(LIBFILE_PSHARED)
-	$(Q)install -m 0644 $(LIB_STATIC) $(DEST_LIBDIR)/$(LIBFILE_STATIC)
+ifeq ($(ARCH),s390x)
+	$(Q)install -d $(DEST_LIB64DIR)
+	$(Q)install -m 0755 $(LIB_SHARED) $(DEST_LIB64DIR)/$(LIBFILE_SHARED)
+	$(Q)install -m 0755 $(LIB_PSHARED) $(DEST_LIB64DIR)/$(LIBFILE_PSHARED)
+	$(Q)install -m 0644 $(LIB_STATIC) $(DEST_LIB64DIR)/$(LIBFILE_STATIC)
 else
-#	FIXME - someone should define this directory
-ifneq ($(lib64dir),)
+ifeq ($(ARCH),ppc64)
 	$(Q)install -d $(DEST_LIB64DIR)
 	$(Q)install -m 0755 $(LIB_SHARED) $(DEST_LIB64DIR)/$(LIBFILE_SHARED)
 	$(Q)install -m 0755 $(LIB_PSHARED) $(DEST_LIB64DIR)/$(LIBFILE_PSHARED)
 	$(Q)install -m 0644 $(LIB_STATIC) $(DEST_LIB64DIR)/$(LIBFILE_STATIC)
+else
+	$(Q)install -d $(DEST_LIBDIR)
+	$(Q)install -m 0755 $(LIB_SHARED) $(DEST_LIBDIR)/$(LIBFILE_SHARED)
+	$(Q)install -m 0755 $(LIB_PSHARED) $(DEST_LIBDIR)/$(LIBFILE_PSHARED)
+	$(Q)install -m 0644 $(LIB_STATIC) $(DEST_LIBDIR)/$(LIBFILE_STATIC)
 endif
 endif
 ifeq ($(DESTDIR),)
diff -Naur LiS-2.18-orig/libc/getpmsg.c LiS-2.18-RHEL4/libc/getpmsg.c
--- LiS-2.18-orig/libc/getpmsg.c	2004-03-11 15:16:14.000000000 -0500
+++ LiS-2.18-RHEL4/libc/getpmsg.c       2005-04-11 02:40:01.112305488 -0400
@@ -6,16 +6,16 @@
 typedef struct strbuf6 {
     int       maxlen;
     int       len;
-    long long buf;
+    unsigned long long buf;
 } strbuf6_t;
 
 typedef struct getpmsg_args6
 {
     int                  fd ;
-    long long            ctl ;
-    long long            dat ;
-    long long            bandp ;
-    long long            flagsp ;
+    unsigned long long   ctl ;
+    unsigned long long   dat ;
+    unsigned long long   bandp ;
+    unsigned long long   flagsp ;
 
 } getpmsg_args6_t ;
 
@@ -33,7 +33,7 @@
     {
       ctl6.maxlen = ctlptr->maxlen;
       ctl6.len    = ctlptr->len;
-      ctl6.buf    = (long long)ctlptr->buf;
+      ctl6.buf    = (unsigned long long)(unsigned long)ctlptr->buf;
       ptrc6 = &ctl6;
     }
 
@@ -41,16 +41,16 @@
     {
       dat6.maxlen = dataptr->maxlen;
       dat6.len    = dataptr->len;
-      dat6.buf    = (long long)dataptr->buf;
+      dat6.buf    = (unsigned long long)(unsigned long)dataptr->buf;
       ptrd6 = &dat6;
     }
 
     memset((void*)&args,0,sizeof(getpmsg_args6_t));
     args.fd	= fd ;
-    args.ctl	= (long long)ptrc6 ;
-    args.dat	= (long long)ptrd6 ;
-    args.bandp	= (long long)bandp ;
-    args.flagsp	= (long long)flagsp ;
+    args.ctl	= (unsigned long long)(unsigned long)ptrc6 ;
+    args.dat	= (unsigned long long)(unsigned long)ptrd6 ;
+    args.bandp	= (unsigned long long)(unsigned long)bandp ;
+    args.flagsp	= (unsigned long long)(unsigned long)flagsp ;
 
     rc = read(fd, &args, LIS_GETMSG_PUTMSG_ULEN);
 
diff -Naur LiS-2.18-orig/libc/putpmsg.c LiS-2.18-RHEL4/libc/putpmsg.c
--- LiS-2.18-orig/libc/putpmsg.c	2004-03-11 15:16:14.000000000 -0500
+++ LiS-2.18-RHEL4/libc/putpmsg.c       2005-04-11 02:40:01.112305488 -0400
@@ -6,14 +6,14 @@
 typedef struct strbuf6 {
     int       maxlen;
     int       len;
-    long long buf;
+    unsigned long long buf;
 } strbuf6_t;
 
 typedef struct putpmsg_args6
 {
     int                  fd ;
-    long long            ctl ;
-    long long            dat ;
+    unsigned long long   ctl ;
+    unsigned long long   dat ;
     int                  band ;
     int                  flags ;
 
@@ -32,7 +32,7 @@
     {
       ctl6.maxlen = ctlptr->maxlen;
       ctl6.len    = ctlptr->len;
-      ctl6.buf    = (long long)ctlptr->buf;
+      ctl6.buf    = (unsigned long long)(unsigned long)ctlptr->buf;
       ptrc6 = &ctl6;
     }
 
@@ -40,14 +40,14 @@
     {
       dat6.maxlen = dataptr->maxlen;
       dat6.len    = dataptr->len;
-      dat6.buf    = (long long)dataptr->buf;
+      dat6.buf    = (unsigned long long)(unsigned long)dataptr->buf;
       ptrd6 = &dat6;
     }
 
     memset((void*)&args,0,sizeof(putpmsg_args6_t));
     args.fd	= fd ;
-    args.ctl	= (long long)ptrc6 ;
-    args.dat	= (long long)ptrd6 ;
+    args.ctl	= (unsigned long long)(unsigned long)ptrc6 ;
+    args.dat	= (unsigned long long)(unsigned long)ptrd6 ;
     args.band	= band ;
     args.flags	= flags ;
 
diff -Naur LiS-2.18-orig/libc32over64/linux/Makefile LiS-2.18-RHEL4/libc32over64/linux/Makefile
--- LiS-2.18-orig/libc32over64/linux/Makefile	2004-09-09 16:14:13.000000000 -0400
+++ LiS-2.18-RHEL4/libc32over64/linux/Makefile  2005-04-12 09:26:56.903074248 -0400
@@ -7,8 +7,21 @@
 
 CP_OPTS	= -f
 XOPTS  += -D__KERNEL_SYSCALLS__
+ifeq ($(ARCH),s390x)
 XOPTS  += -DBLD32OVER64 -m31
 LDOPTS = -melf_s390
+endif
+ifeq ($(ARCH),ppc64)
+XOPTS  = -D__KERNEL_SYSCALLS__
+XOPTS  += -DBLD32OVER64 -m32 -msoft-float -pipe -ffixed-r2 -mmultiple -mstring
+XOPTS  += -Wall -Wstrict-prototypes $(PROBLEMS)
+XOPTS  += -fno-strict-aliasing -Wno-sign-compare -fno-common
+XOPTS  += -D__powerpc__ -fno-builtin -pipe -D_PPC_LIS_
+XOPTS  += -D__SMP__
+XOPTS  += -I$(LIS_INCL)
+XOPTS  += -I$(KINCL) $(KINCL_MACH_GENERIC) $(KINCL_MACH_DEFAULT)
+LDOPTS = -m elf32ppc
+endif
 
 include $(LIBDIR32OVER64)/mk.bdy
 
diff -Naur LiS-2.18-orig/libc32over64/mk.bdy LiS-2.18-RHEL4/libc32over64/mk.bdy
--- LiS-2.18-orig/libc32over64/mk.bdy	2004-10-11 11:40:44.000000000 -0400
+++ LiS-2.18-RHEL4/libc32over64/mk.bdy  2005-04-12 11:50:30.379984136 -0400
@@ -20,7 +20,13 @@
 LIB_PSHARED = $(LIBDIR32OVER64)/$(LIBFILE_PSHARED)
 LIB_STATIC = $(LIBDIR32OVER64)/$(LIBFILE_STATIC)
 
+ifeq ($(ARCH),s390x)
 CC += -c $(XOPTS)
+endif
+ifeq ($(ARCH),ppc64)
+CC += -c $(XOPTS) -fPIC -m32 -msoft-float -pipe -ffixed-r2 -mmultiple -mstring
+LD = ld -m elf32ppc
+endif
 
 
 all: compiler $(LIB_SHARED) $(LIB_PSHARED) $(LIB_STATIC)
diff -Naur LiS-2.18-orig/pkg/Makefile LiS-2.18-RHEL4/pkg/Makefile
--- LiS-2.18-orig/pkg/Makefile	2004-09-09 16:14:13.000000000 -0400
+++ LiS-2.18-RHEL4/pkg/Makefile 2005-04-12 09:03:25.143983048 -0400
@@ -60,7 +60,11 @@
 #	file.
 #
 	$(Q_ECHO) $(qtag_continue) */*.o
-	$(Q)$(LD) -r -o $@ */*.o 
+ifeq ($(ARCH),ppc64)
+	$(Q)$(LD) -r -m elf64ppc -o $@ */*.o 
+else
+	$(Q)$(LD) -r -o $@ */*.o
+endif
 
 .objects: $(OBJECTS)
 	$(Q)echo $(relpwddeps) > $@
diff -Naur LiS-2.18-orig/scripts/update_conf.modules LiS-2.18-RHEL4/scripts/update_conf.modules
--- LiS-2.18-orig/scripts/update_conf.modules	2004-06-06 17:06:55.000000000 -0400
+++ LiS-2.18-RHEL4/scripts/update_conf.modules  2005-04-12 08:11:06.686000048 -0400
@@ -54,9 +54,12 @@
     fi
 }
 
-CONF=modules.conf			# new name
+CONF=modprobe.conf.streams              # newest name
 if [ ! -f /etc/$CONF ]; then
-    CONF=conf.modules			# old name
+    CONF=modules.conf                   # new name
+    if [ ! -f /etc/$CONF ]; then
+        CONF=conf.modules               # old name
+    fi
 fi
 
 cp /etc/$CONF ${CONF}.save && \
diff -Naur LiS-2.18-orig/util/streams.c LiS-2.18-RHEL4/util/streams.c
--- LiS-2.18-orig/util/streams.c	2004-07-30 11:52:59.000000000 -0400
+++ LiS-2.18-RHEL4/util/streams.c       2005-04-13 02:40:01.113305336 -0400
@@ -152,7 +152,11 @@
 
 	printf("%-28s: ", lis_itemnames[i].name);
 	for (j = 0; j < 4; j++)
+#if (defined(_S390X_LIS_) || defined(_PPC64_LIS_))
+	    printf("%12lu", strstats[inx][j]/4294967296);
+#else
 	    printf("%12lu", strstats[inx][j]);
+#endif
 	printf("\n");
     }
 
diff -Naur LiS-2.18-orig/util/strtst.c LiS-2.18-RHEL4/util/strtst.c
--- LiS-2.18-orig/util/strtst.c	2004-10-05 10:37:05.000000000 -0400
+++ LiS-2.18-RHEL4/util/strtst.c        2005-04-11 02:40:01.106306400 -0400
@@ -5411,7 +5411,11 @@
 
     print("band_test: band 2 full (%d msgs), write band 1\n", n_sent) ;
     send_band(fd1, 1, 23, _M_DATA) ;
+#if defined(__s390__) || defined(__s390x__)
+    sleep(2) ;				/* allow messages to flow */
+#else
     sleep(1) ;				/* allow messages to flow */
+#endif
     print("   %d messages available to read\n", nread_wait_msgs(fd2, 1)) ;
     flow_ok = 0 ;
     for (i = 0; i < n_sent; i++)
diff -Naur LiS-2.18-orig/util/linux/Makefile LiS-2.18-RHEL4/util/linux/Makefile
--- LiS-2.18-orig/util/linux/Makefile	2004-09-09 16:14:13.000000000 -0400
+++ LiS-2.18-RHEL4/util/linux/Makefile  2005-04-12 09:08:13.672047560 -0400
@@ -1,8 +1,13 @@
 include .config_mk
 
 OPT	= -DLINUX
+ifeq ($(ARCH),ppc64)
+XUTILS  = ldlconfig test test2 fattach fdetach \
+	  oc rwf mkfifo psfd pafd thrtst
+else
 XUTILS  = ldltest ldlconfig test test2 fattach fdetach \
 	  oc rwf mkfifo psfd pafd thrtst
+endif
 XINST	= install_xutils
 XUNINST	= uninstall_xutils
 XCLEAN	= makenodes.c
@@ -19,7 +24,11 @@
 #strtst:	../strtst.c
 #	$(CC) -o $@ $^ $(ULOPTS) -lpthread
 	
+ifeq ($(ARCH),ppc64)
+install_xutils:	ldlconfig fattach fdetach
+else
 install_xutils:	ldltest ldlconfig fattach fdetach
+endif
 	$(Q)install -d $(DESTDIR)$(sbindir)
 	$(Q)install $^ $(DESTDIR)$(sbindir)
 
diff -Naur LiS-2.18-orig/modules/.config LiS-2.18-RHEL4/modules/.config
--- LiS-2.18-orig/modules/.config      2004-09-10 13:06:49.000000000 -0400
+++ LiS-2.18-RHEL4/modules/.config     2005-04-11 16:39:53.758957792 -0400
@@ -36,6 +36,9 @@
 CPPFLAGS += -D__KERNEL__ -I$(KSRC)/include
 CFLAGS   := $(subst -Iinclude,-I$(KSRC)/include,$(CFLAGS))
 CFLAGS   += -O2
+ifeq ($(ARCH),ppc64)
+CFLAGS   += -m64 -msoft-float -pipe -Wno-uninitialized -mminimal-toc -mtraceback=none -mcall-aixdesc -mtune=power4 -fno-unit-at-a-time
+endif
 c_flags += $(CPPFLAGS) $(CFLAGS) -I$(KSRC)/include
 
 LDFLAGS_MODULE  = -r
diff -Naur LiS-2.18-orig/head/version.c LiS-2.18-RHEL4/head/version.c
--- LiS-2.18-orig/head/version.c        2004-10-13 12:31:15.000000000 -0400
+++ LiS-2.18-RHEL4/head/version.c       2005-05-12 07:07:07.070707070 -0400
@@ -34,8 +34,8 @@
 #ident "@(#) LiS version.c 2.18 10/12/04 16:25:34 "


-char	lis_version[] = "2.18.0" ;
-char	lis_date[]    = "10/13/04" ;
+char   lis_version[] = "2.18.0r4" ;
+char   lis_date[]    = "12/12/05" ;

 #if 0