Merge to ckrm-E15
authorMarc Fiuczynski <mef@cs.princeton.edu>
Fri, 16 Jul 2004 19:45:51 +0000 (19:45 +0000)
committerMarc Fiuczynski <mef@cs.princeton.edu>
Fri, 16 Jul 2004 19:45:51 +0000 (19:45 +0000)
19 files changed:
.config
.config.old
fs/Makefile
fs/exec.c
fs/proc/array.c
include/linux/autoconf.h
include/linux/ckrm.h
include/linux/sched.h
include/linux/tcp.h
include/net/sock.h
include/net/tcp.h
init/Kconfig
kernel/exit.c
kernel/fork.c
kernel/sched.c
mm/memory.c
net/ipv4/tcp.c
net/ipv4/tcp_ipv4.c
net/ipv6/tcp_ipv6.c

diff --git a/.config b/.config
index 6dd5c23..7f9bc8d 100644 (file)
--- a/.config
+++ b/.config
@@ -31,6 +31,8 @@ CONFIG_CKRM_TYPE_TASKCLASS=y
 CONFIG_CKRM_RES_NUMTASKS=y
 CONFIG_CKRM_TYPE_SOCKETCLASS=y
 CONFIG_CKRM_RES_LISTENAQ=m
+CONFIG_CKRM_RBCE=m
+CONFIG_CKRM_CRBCE=m
 # CONFIG_BSD_PROCESS_ACCT_V3 is not set
 CONFIG_SYSCTL=y
 CONFIG_AUDIT=y
index 7445bef..55ca636 100644 (file)
@@ -21,7 +21,16 @@ CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
 CONFIG_POSIX_MQUEUE=y
 CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+
+#
+# Class Based Kernel Resource Management
+#
+CONFIG_CKRM=y
+CONFIG_RCFS_FS=y
+CONFIG_CKRM_TYPE_TASKCLASS=y
+CONFIG_CKRM_RES_NUMTASKS=y
+CONFIG_CKRM_TYPE_SOCKETCLASS=y
+CONFIG_CKRM_RES_LISTENAQ=m
 CONFIG_SYSCTL=y
 CONFIG_AUDIT=y
 CONFIG_AUDITSYSCALL=y
@@ -29,6 +38,7 @@ CONFIG_LOG_BUF_SHIFT=17
 CONFIG_HOTPLUG=y
 # CONFIG_IKCONFIG is not set
 # CONFIG_EMBEDDED is not set
+CONFIG_DELAY_ACCT=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_ALL is not set
 CONFIG_FUTEX=y
@@ -189,7 +199,7 @@ CONFIG_X86_ACPI_CPUFREQ=m
 # CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
 CONFIG_X86_POWERNOW_K6=m
 CONFIG_X86_POWERNOW_K7=y
-CONFIG_X86_POWERNOW_K8=m
+# CONFIG_X86_POWERNOW_K8 is not set
 # CONFIG_X86_GX_SUSPMOD is not set
 CONFIG_X86_SPEEDSTEP_CENTRINO=y
 CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE=y
@@ -200,7 +210,7 @@ CONFIG_X86_P4_CLOCKMOD=m
 CONFIG_X86_SPEEDSTEP_LIB=y
 # CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK is not set
 CONFIG_X86_LONGRUN=y
-# CONFIG_X86_LONGHAUL is not set
+CONFIG_X86_LONGHAUL=y
 
 #
 # Bus options (PCI, PCMCIA, EISA, MCA, ISA)
@@ -251,7 +261,7 @@ CONFIG_HOTPLUG_PCI_SHPC_POLL_EVENT_MODE=y
 #
 CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_MISC=y
+CONFIG_BINFMT_MISC=m
 
 #
 # Device Drivers
@@ -404,6 +414,7 @@ CONFIG_BLK_DEV_IDE=y
 # CONFIG_BLK_DEV_HD_IDE is not set
 CONFIG_BLK_DEV_IDEDISK=y
 CONFIG_IDEDISK_MULTI_MODE=y
+# CONFIG_IDEDISK_STROKE is not set
 CONFIG_BLK_DEV_IDECS=m
 CONFIG_BLK_DEV_IDECD=y
 CONFIG_BLK_DEV_IDETAPE=m
@@ -495,9 +506,8 @@ CONFIG_SCSI_FC_ATTRS=m
 # SCSI low-level drivers
 #
 CONFIG_BLK_DEV_3W_XXXX_RAID=m
-CONFIG_SCSI_3W_9XXX=m
 # CONFIG_SCSI_7000FASST is not set
-CONFIG_SCSI_ACARD=m
+# CONFIG_SCSI_ACARD is not set
 CONFIG_SCSI_AHA152X=m
 CONFIG_SCSI_AHA1542=m
 CONFIG_SCSI_AACRAID=m
@@ -525,13 +535,14 @@ CONFIG_SCSI_SATA=y
 CONFIG_SCSI_SATA_SVW=m
 CONFIG_SCSI_ATA_PIIX=m
 CONFIG_SCSI_SATA_PROMISE=m
-CONFIG_SCSI_SATA_SX4=m
+# CONFIG_SCSI_SATA_SX4 is not set
 CONFIG_SCSI_SATA_SIL=m
 CONFIG_SCSI_SATA_SIS=m
 CONFIG_SCSI_SATA_VIA=m
 CONFIG_SCSI_SATA_VITESSE=m
 CONFIG_SCSI_BUSLOGIC=m
 # CONFIG_SCSI_OMIT_FLASHPOINT is not set
+# CONFIG_SCSI_CPQFCTS is not set
 # CONFIG_SCSI_DMX3191D is not set
 # CONFIG_SCSI_DTC3280 is not set
 # CONFIG_SCSI_EATA is not set
@@ -568,7 +579,7 @@ CONFIG_SCSI_QLA6312=m
 CONFIG_SCSI_QLA6322=m
 # CONFIG_SCSI_SYM53C416 is not set
 # CONFIG_SCSI_DC395x is not set
-CONFIG_SCSI_DC390T=m
+# CONFIG_SCSI_DC390T is not set
 # CONFIG_SCSI_T128 is not set
 # CONFIG_SCSI_U14_34F is not set
 # CONFIG_SCSI_ULTRASTOR is not set
@@ -582,7 +593,7 @@ CONFIG_PCMCIA_AHA152X=m
 CONFIG_PCMCIA_FDOMAIN=m
 CONFIG_PCMCIA_NINJA_SCSI=m
 CONFIG_PCMCIA_QLOGIC=m
-CONFIG_PCMCIA_SYM53C500=m
+# CONFIG_PCMCIA_SYM53C500 is not set
 
 #
 # Old CD-ROM drivers (not SCSI, not IDE)
@@ -602,9 +613,6 @@ CONFIG_MD_RAID6=m
 CONFIG_MD_MULTIPATH=m
 CONFIG_BLK_DEV_DM=m
 CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
 
 #
 # Fusion MPT device support
@@ -618,32 +626,7 @@ CONFIG_FUSION_LAN=m
 #
 # IEEE 1394 (FireWire) support
 #
-CONFIG_IEEE1394=m
-
-#
-# Subsystem Options
-#
-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
-CONFIG_IEEE1394_OUI_DB=y
-# CONFIG_IEEE1394_EXTRA_CONFIG_ROMS is not set
-
-#
-# Device Drivers
-#
-# CONFIG_IEEE1394_PCILYNX is not set
-CONFIG_IEEE1394_OHCI1394=m
-
-#
-# Protocol Drivers
-#
-CONFIG_IEEE1394_VIDEO1394=m
-CONFIG_IEEE1394_SBP2=m
-# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
-# CONFIG_IEEE1394_ETH1394 is not set
-CONFIG_IEEE1394_DV1394=m
-CONFIG_IEEE1394_RAWIO=m
-CONFIG_IEEE1394_CMP=m
-CONFIG_IEEE1394_AMDTP=m
+# CONFIG_IEEE1394 is not set
 
 #
 # I2O device support
@@ -688,6 +671,7 @@ CONFIG_SYN_COOKIES=y
 CONFIG_INET_AH=m
 CONFIG_INET_ESP=m
 CONFIG_INET_IPCOMP=m
+CONFIG_ACCEPT_QUEUES=y
 
 #
 # IP: Virtual Server Configuration
@@ -1066,7 +1050,7 @@ CONFIG_PCMCIA_XIRCOM=m
 CONFIG_DEPCA=m
 CONFIG_HP100=m
 # CONFIG_NET_ISA is not set
-CONFIG_NE2000=m
+# CONFIG_NE2000 is not set
 CONFIG_NET_PCI=y
 CONFIG_PCNET32=m
 CONFIG_AMD8111_ETH=m
@@ -1099,7 +1083,6 @@ CONFIG_SUNDANCE=m
 CONFIG_TLAN=m
 CONFIG_VIA_RHINE=m
 CONFIG_VIA_RHINE_MMIO=y
-CONFIG_VIA_VELOCITY=m
 CONFIG_NET_POCKET=y
 CONFIG_ATP=m
 CONFIG_DE600=m
@@ -1593,7 +1576,6 @@ CONFIG_DRM_SIS=m
 CONFIG_SYNCLINK_CS=m
 CONFIG_MWAVE=m
 # CONFIG_RAW_DRIVER is not set
-# CONFIG_HPET is not set
 CONFIG_HANGCHECK_TIMER=m
 
 #
@@ -1650,7 +1632,7 @@ CONFIG_SENSORS_LM80=m
 CONFIG_SENSORS_LM83=m
 CONFIG_SENSORS_LM85=m
 CONFIG_SENSORS_LM90=m
-CONFIG_SENSORS_MAX1619=m
+# CONFIG_SENSORS_MAX1619 is not set
 CONFIG_SENSORS_VIA686A=m
 CONFIG_SENSORS_W83781D=m
 CONFIG_SENSORS_W83L785TS=m
@@ -1662,7 +1644,7 @@ CONFIG_SENSORS_W83627HF=m
 CONFIG_SENSORS_EEPROM=m
 CONFIG_SENSORS_PCF8574=m
 CONFIG_SENSORS_PCF8591=m
-CONFIG_SENSORS_RTC8564=m
+# CONFIG_SENSORS_RTC8564 is not set
 # CONFIG_I2C_DEBUG_CORE is not set
 # CONFIG_I2C_DEBUG_ALGO is not set
 # CONFIG_I2C_DEBUG_BUS is not set
@@ -1799,9 +1781,8 @@ CONFIG_FB_VGA16=m
 CONFIG_FB_VESA=y
 CONFIG_VIDEO_SELECT=y
 CONFIG_FB_HGA=m
-CONFIG_FB_HGA_ACCEL=y
+# CONFIG_FB_HGA_ACCEL is not set
 CONFIG_FB_RIVA=m
-# CONFIG_FB_RIVA_I2C is not set
 CONFIG_FB_I810=m
 CONFIG_FB_I810_GTF=y
 CONFIG_FB_MATROX=m
@@ -1825,10 +1806,10 @@ CONFIG_FB_ATY_GX=y
 CONFIG_FB_NEOMAGIC=m
 CONFIG_FB_KYRO=m
 CONFIG_FB_3DFX=m
-CONFIG_FB_3DFX_ACCEL=y
+# CONFIG_FB_3DFX_ACCEL is not set
 CONFIG_FB_VOODOO1=m
 CONFIG_FB_TRIDENT=m
-CONFIG_FB_TRIDENT_ACCEL=y
+# CONFIG_FB_TRIDENT_ACCEL is not set
 # CONFIG_FB_VIRTUAL is not set
 
 #
@@ -2012,7 +1993,6 @@ CONFIG_USB_ACM=m
 CONFIG_USB_PRINTER=m
 CONFIG_USB_STORAGE=m
 # CONFIG_USB_STORAGE_DEBUG is not set
-CONFIG_USB_STORAGE_RW_DETECT=y
 CONFIG_USB_STORAGE_DATAFAB=y
 CONFIG_USB_STORAGE_FREECOM=y
 CONFIG_USB_STORAGE_ISD200=y
@@ -2037,7 +2017,7 @@ CONFIG_USB_WACOM=m
 CONFIG_USB_KBTAB=m
 CONFIG_USB_POWERMATE=m
 CONFIG_USB_MTOUCH=m
-CONFIG_USB_EGALAX=m
+# CONFIG_USB_EGALAX is not set
 CONFIG_USB_XPAD=m
 CONFIG_USB_ATI_REMOTE=m
 
@@ -2149,8 +2129,8 @@ CONFIG_USB_RIO500=m
 CONFIG_USB_LEGOTOWER=m
 CONFIG_USB_LCD=m
 CONFIG_USB_LED=m
-# CONFIG_USB_CYTHERM is not set
-CONFIG_USB_PHIDGETSERVO=m
+CONFIG_USB_CYTHERM=m
+# CONFIG_USB_PHIDGETSERVO is not set
 CONFIG_USB_TEST=m
 
 #
@@ -2175,9 +2155,7 @@ CONFIG_FS_MBCACHE=y
 CONFIG_REISERFS_FS=m
 # CONFIG_REISERFS_CHECK is not set
 CONFIG_REISERFS_PROC_INFO=y
-CONFIG_REISERFS_FS_XATTR=y
-CONFIG_REISERFS_FS_POSIX_ACL=y
-CONFIG_REISERFS_FS_SECURITY=y
+# CONFIG_REISERFS_FS_XATTR is not set
 CONFIG_JFS_FS=m
 CONFIG_JFS_POSIX_ACL=y
 # CONFIG_JFS_DEBUG is not set
@@ -2212,7 +2190,9 @@ CONFIG_UDF_FS=m
 CONFIG_FAT_FS=m
 CONFIG_MSDOS_FS=m
 CONFIG_VFAT_FS=m
-# CONFIG_NTFS_FS is not set
+CONFIG_NTFS_FS=y
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
 
 #
 # Pseudo filesystems
@@ -2227,6 +2207,10 @@ CONFIG_TMPFS=y
 CONFIG_HUGETLBFS=y
 CONFIG_HUGETLB_PAGE=y
 CONFIG_RAMFS=y
+CONFIG_RELAYFS_FS=y
+CONFIG_KLOG_CHANNEL=y
+CONFIG_KLOG_CHANNEL_AUTOENABLE=y
+CONFIG_KLOG_CHANNEL_SHIFT=21
 
 #
 # Miscellaneous filesystems
@@ -2300,6 +2284,7 @@ CONFIG_MINIX_SUBPARTITION=y
 CONFIG_SOLARIS_X86_PARTITION=y
 CONFIG_UNIXWARE_DISKLABEL=y
 # CONFIG_LDM_PARTITION is not set
+# CONFIG_NEC98_PARTITION is not set
 CONFIG_SGI_PARTITION=y
 # CONFIG_ULTRIX_PARTITION is not set
 CONFIG_SUN_PARTITION=y
@@ -2364,11 +2349,23 @@ CONFIG_DEBUG_STACKOVERFLOW=y
 CONFIG_MAGIC_SYSRQ=y
 # CONFIG_DEBUG_SPINLOCK is not set
 # CONFIG_DEBUG_PAGEALLOC is not set
-# CONFIG_DEBUG_HIGHMEM is not set
+CONFIG_DEBUG_HIGHMEM=y
 CONFIG_DEBUG_INFO=y
 CONFIG_DEBUG_SPINLOCK_SLEEP=y
 # CONFIG_FRAME_POINTER is not set
 
+#
+# Linux VServer
+#
+CONFIG_VSERVER_LEGACY=y
+CONFIG_PROC_SECURE=y
+# CONFIG_VSERVER_HARDCPU is not set
+# CONFIG_INOXID_NONE is not set
+# CONFIG_INOXID_GID16 is not set
+CONFIG_INOXID_GID24=y
+# CONFIG_INOXID_GID32 is not set
+# CONFIG_INOXID_MAGIC is not set
+
 #
 # Security options
 #
@@ -2414,4 +2411,5 @@ CONFIG_LIBCRC32C=m
 CONFIG_ZLIB_INFLATE=y
 CONFIG_ZLIB_DEFLATE=m
 CONFIG_X86_BIOS_REBOOT=y
+CONFIG_X86_STD_RESOURCES=y
 CONFIG_PC=y
index e39e43f..8abcedf 100644 (file)
@@ -52,7 +52,6 @@ obj-$(CONFIG_EXT2_FS)         += ext2/
 obj-$(CONFIG_CRAMFS)           += cramfs/
 obj-$(CONFIG_RAMFS)            += ramfs/
 obj-$(CONFIG_HUGETLBFS)                += hugetlbfs/
-obj-$(CONFIG_RELAYFS_FS)       += relayfs/
 obj-$(CONFIG_CODA_FS)          += coda/
 obj-$(CONFIG_MINIX_FS)         += minix/
 obj-$(CONFIG_FAT_FS)           += fat/
index 2902dda..afe3dbb 100644 (file)
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -1052,6 +1052,7 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)
                                        fput(bprm->file);
                                bprm->file = NULL;
                                current->did_exec = 1;
+                               ckrm_cb_exec(bprm->filename);
                                return retval;
                        }
                        read_lock(&binfmt_lock);
@@ -1157,8 +1158,6 @@ int do_execve(char * filename,
        if (retval >= 0) {
                free_arg_pages(&bprm);
 
-               ckrm_cb_exec(filename);
-
                /* execve success */
                security_bprm_free(&bprm);
                return retval;
index c156807..dfca2ff 100644 (file)
@@ -491,15 +491,14 @@ int proc_pid_delay(struct task_struct *task, char * buffer)
 {
        int res;
 
-       res  = sprintf(buffer,"%lu %lu %lu %lu %lu %lu %lu\n",
+       res  = sprintf(buffer,"%u %llu %llu %u %llu %u %llu\n",
                       get_delay(task,runs),
                       get_delay(task,runcpu_total),
                       get_delay(task,waitcpu_total),
-                      get_delay(task,iowait_total),
                       get_delay(task,num_iowaits),
-                      get_delay(task,mem_iowait_total),
-                      get_delay(task,num_memwaits)
-                      
+                      get_delay(task,iowait_total),
+                      get_delay(task,num_memwaits),
+                      get_delay(task,mem_iowait_total)
                );
        return res;
 }
index f0db33b..5ee385a 100644 (file)
@@ -32,6 +32,8 @@
 #define CONFIG_CKRM_RES_NUMTASKS 1
 #define CONFIG_CKRM_TYPE_SOCKETCLASS 1
 #define CONFIG_CKRM_RES_LISTENAQ_MODULE 1
+#define CONFIG_CKRM_RBCE_MODULE 1
+#define CONFIG_CKRM_CRBCE_MODULE 1
 #undef CONFIG_BSD_PROCESS_ACCT_V3
 #define CONFIG_SYSCTL 1
 #define CONFIG_AUDIT 1
index 4ac2c18..8dba643 100644 (file)
 
 enum ckrm_event {
        /* we distinguish various events types
-         *
+        *
         * (a) CKRM_LATCHABLE_EVENTS
-         *      events can be latched for event callbacks by classtypes
-         *
+        *      events can be latched for event callbacks by classtypes
+        *
         * (b) CKRM_NONLATACHBLE_EVENTS
-         *     events can not be latched but can be used to call classification
-         
+        *     events can not be latched but can be used to call classification
+        * 
         * (c) event that are used for notification purposes
         *     range: [ CKRM_EVENT_CANNOT_CLASSIFY .. )
-         */
+        */
 
        /* events (a) */
 
@@ -83,7 +83,7 @@ enum ckrm_event {
        CKRM_NOTCLASSIFY_EVENTS,
 
        CKRM_EVENT_MANUAL = CKRM_NOTCLASSIFY_EVENTS,
-       
+
        CKRM_NUM_EVENTS
 };
 #endif
@@ -93,7 +93,7 @@ enum ckrm_event {
 
 extern void ckrm_invoke_event_cb_chain(enum ckrm_event ev, void *arg);
 
-typedef void (*ckrm_event_cb)(void *arg);
+typedef void (*ckrm_event_cb) (void *arg);
 
 struct ckrm_hook_cb {
        ckrm_event_cb fct;
@@ -112,7 +112,7 @@ static inline void ckrm_cb_##fct(argtp arg)                         \
          ckrm_invoke_event_cb_chain(CKRM_EVENT_##EV,(void*)arg);       \
 }
 
-#else // !CONFIG_CKRM
+#else                          // !CONFIG_CKRM
 
 #define CKRM_DEF_CB(EV,fct)                    \
 static inline void ckrm_cb_##fct(void)  { }
@@ -120,11 +120,7 @@ static inline void ckrm_cb_##fct(void)  { }
 #define CKRM_DEF_CB_ARG(EV,fct,argtp)          \
 static inline void ckrm_cb_##fct(argtp arg) { }
 
-#define ckrm_cb_newtask(task_struct)
-#define ckrm_cb_exit(task_struct)
-#define ckrm_init()
-
-#endif // CONFIG_CKRM
+#endif                         // CONFIG_CKRM
 
 /*-----------------------------------------------------------------
  *   define the CKRM event functions 
@@ -136,27 +132,30 @@ struct task_struct;
 struct sock;
 struct user_struct;
 
-CKRM_DEF_CB_ARG( FORK         , fork,         struct task_struct *);
-CKRM_DEF_CB_ARG( EXEC         , exec,         const char*         );
-CKRM_DEF_CB    ( UID          , uid                               );
-CKRM_DEF_CB    ( GID          , gid                               );
-CKRM_DEF_CB    ( APPTAG       , apptag                            );
-CKRM_DEF_CB    ( LOGIN        , login                             );
-CKRM_DEF_CB_ARG( USERADD      , useradd,      struct user_struct *);
-CKRM_DEF_CB_ARG( USERDEL      , userdel,      struct user_struct *);
-CKRM_DEF_CB_ARG( LISTEN_START , listen_start, struct sock *       );
-CKRM_DEF_CB_ARG( LISTEN_STOP  , listen_stop,  struct sock *       );
+CKRM_DEF_CB_ARG(FORK, fork, struct task_struct *);
+CKRM_DEF_CB_ARG(EXEC, exec, const char *);
+CKRM_DEF_CB(UID, uid);
+CKRM_DEF_CB(GID, gid);
+CKRM_DEF_CB(APPTAG, apptag);
+CKRM_DEF_CB(LOGIN, login);
+CKRM_DEF_CB_ARG(USERADD, useradd, struct user_struct *);
+CKRM_DEF_CB_ARG(USERDEL, userdel, struct user_struct *);
+CKRM_DEF_CB_ARG(LISTEN_START, listen_start, struct sock *);
+CKRM_DEF_CB_ARG(LISTEN_STOP, listen_stop, struct sock *);
 
+// some other functions required
 #ifdef CONFIG_CKRM
-// and a few special one's
+extern void ckrm_init(void);
 void ckrm_cb_newtask(struct task_struct *);
 void ckrm_cb_exit(struct task_struct *);
+#else
+#define ckrm_init(x)           do { } while (0)
+#define ckrm_cb_newtask(x)     do { } while (0)
+#define ckrm_cb_exit(x)                do { } while (0)
+#endif
 
-// some other functions required
-extern void ckrm_init(void);
 extern int get_exe_path_name(struct task_struct *, char *, int);
-#endif // CONFIG_CKRM
 
-#endif // __KERNEL__
+#endif                         // __KERNEL__
 
-#endif // _LINUX_CKRM_H
+#endif                         // _LINUX_CKRM_H
index 5d41995..385b390 100644 (file)
@@ -1154,6 +1154,10 @@ static inline void add_io_delay(unsigned long dstart)
        clear_delay_flag(tsk,PF_IOWAIT);
 }
 
+inline static void init_delays(struct task_struct *tsk)
+{
+       memset((void*)&tsk->delays,0,sizeof(tsk->delays));
+}
 
 #else
 
@@ -1171,6 +1175,7 @@ static inline void add_io_delay(unsigned long dstart)
 #define add_delay_ts(tsk,field,start_ts,now)    do { } while (0)
 #define add_delay_clear(tsk,field,start_ts,flg) do { } while (0)
 #define add_io_delay(dstart)                   do { } while (0) 
+#define init_delays(tsk)                        do { } while (0)
 #endif
 
 
index dadabee..9ceaf73 100644 (file)
@@ -454,8 +454,7 @@ struct tcp_opt {
                unsigned int             aq_qcount;
                unsigned int             aq_backlog;
                unsigned int             aq_wait_time;
-               int                      aq_valid;
-       } acceptq[NUM_ACCEPT_QUEUES];
+       } acceptq[NUM_ACCEPT_QUEUES];
 #endif
 };
 
index 4cf8c90..80aa714 100644 (file)
@@ -409,6 +409,7 @@ static inline int sock_flag(struct sock *sk, enum sock_flags flag)
        return test_bit(flag, &sk->sk_flags);
 }
 
+#ifndef CONFIG_ACCEPT_QUEUES
 static inline void sk_acceptq_removed(struct sock *sk)
 {
        sk->sk_ack_backlog--;
@@ -424,6 +425,8 @@ static inline int sk_acceptq_is_full(struct sock *sk)
        return sk->sk_ack_backlog > sk->sk_max_ack_backlog;
 }
 
+#endif
+
 /*
  * Compute minimal free write space needed to queue new packets.
  */
index 7aa687f..b1513f5 100644 (file)
@@ -1788,18 +1788,32 @@ static inline int tcp_full_space( struct sock *sk)
        return tcp_win_from_space(sk->sk_rcvbuf); 
 }
 
+struct tcp_listen_opt
+{
+       u8                      max_qlen_log;   /* log_2 of maximal queued SYNs */
+       int                     qlen;
+#ifdef CONFIG_ACCEPT_QUEUES
+       int                     qlen_young[NUM_ACCEPT_QUEUES];
+#else
+       int                     qlen_young;
+#endif
+       int                     clock_hand;
+       u32                     hash_rnd;
+       struct open_request     *syn_table[TCP_SYNQ_HSIZE];
+};
+
 #ifdef CONFIG_ACCEPT_QUEUES
-static inline void tcp_acceptq_removed(struct sock *sk, int class)
+static inline void sk_acceptq_removed(struct sock *sk, int class)
 {
        tcp_sk(sk)->acceptq[class].aq_backlog--;
 }
 
-static inline void tcp_acceptq_added(struct sock *sk, int class)
+static inline void sk_acceptq_added(struct sock *sk, int class)
 {
        tcp_sk(sk)->acceptq[class].aq_backlog++;
 }
 
-static inline int tcp_acceptq_is_full(struct sock *sk, int class)
+static inline int sk_acceptq_is_full(struct sock *sk, int class)
 {
        return tcp_sk(sk)->acceptq[class].aq_backlog >
                sk->sk_max_ack_backlog;
@@ -1847,25 +1861,10 @@ static inline void tcp_acceptq_queue(struct sock *sk, struct open_request *req,
 {
        tcp_set_acceptq(tcp_sk(sk),req);
        req->sk = child;
-       tcp_acceptq_added(sk,req->acceptq_class);
+       sk_acceptq_added(sk,req->acceptq_class);
 }
 
 #else
-static inline void tcp_acceptq_removed(struct sock *sk)
-{
-       sk->sk_ack_backlog--;
-}
-
-static inline void tcp_acceptq_added(struct sock *sk)
-{
-       sk->sk_ack_backlog++;
-}
-
-static inline int tcp_acceptq_is_full(struct sock *sk)
-{
-       return sk->sk_ack_backlog > sk->sk_max_ack_backlog;
-}
-
 static inline void tcp_acceptq_queue(struct sock *sk, struct open_request *req,
                                         struct sock *child)
 {
@@ -1885,19 +1884,6 @@ static inline void tcp_acceptq_queue(struct sock *sk, struct open_request *req,
 
 #endif
 
-struct tcp_listen_opt
-{
-       u8                      max_qlen_log;   /* log_2 of maximal queued SYNs */
-       int                     qlen;
-#ifdef CONFIG_ACCEPT_QUEUES
-       int                     qlen_young[NUM_ACCEPT_QUEUES];
-#else
-       int                     qlen_young;
-#endif
-       int                     clock_hand;
-       u32                     hash_rnd;
-       struct open_request     *syn_table[TCP_SYNQ_HSIZE];
-};
 
 #ifdef CONFIG_ACCEPT_QUEUES
 static inline void
index 1b1d1a0..d9153c5 100644 (file)
@@ -85,6 +85,8 @@ config SYSVIPC
          you want to run the DOS emulator dosemu under Linux (read the
          DOSEMU-HOWTO, available from <http://www.tldp.org/docs.html#howto>),
          you'll need to say Y here.
+         DOSEMU-HOWTO, available from <http://www.tldp.org/docs.html#howto>),
+         you'll need to say Y here.
 
          You can find documentation about IPC with "info ipc" and also in
          section 6.4 of the Linux Programmer's Guide, available from
@@ -188,6 +190,30 @@ config CKRM_RES_LISTENAQ
  
          If unsure, say N.
 
+config CKRM_RBCE
+       tristate "Vanilla Rule-based Classification Engine (RBCE)"
+       depends on CKRM && RCFS_FS
+       default m
+       help
+         Provides an optional module to support creation of rules for automatic
+         classification of kernel objects. Rules are created/deleted/modified 
+          through an rcfs interface. RBCE is not required for CKRM. 
+         If unsure, say N.
+
+config CKRM_CRBCE
+       tristate "Enhanced Rule-based Classification Engine (RBCE)"
+       depends on CKRM && RCFS_FS && RELAYFS_FS && DELAY_ACCT
+       default m
+       help
+         Provides an optional module to support creation of rules for automatic
+         classification of kernel objects, just like RBCE above. In addition,
+         CRBCE provides per-process delay data (requires DELAY_ACCT configured)
+         enabled) and makes information on significant kernel events available
+         to userspace tools through relayfs (requires RELAYFS_FS configured). 
+       
+         If unsure, say N.
+
 endmenu
 
 config BSD_PROCESS_ACCT_V3
@@ -313,9 +339,9 @@ config DELAY_ACCT
        bool "Enable delay accounting (EXPERIMENTAL)"
        help
          In addition to counting frequency the total delay in ns is also
-         recorded. CPU delays are specified as cpu-wait and cpu-run. Memory
-         delay is recorded for minor and major faults. Information is
-         accessible through /proc/<pid>/delay.
+         recorded. CPU delays are specified as cpu-wait and cpu-run. 
+         I/O delays are recorded for memory and regular I/O.
+         Information is accessible through /proc/<pid>/delay.
 
 
 config KALLSYMS
index 05f2029..979c5d4 100644 (file)
@@ -834,7 +834,9 @@ asmlinkage NORET_TYPE void do_exit(long code)
                module_put(tsk->binfmt->module);
 
        tsk->exit_code = code;
+#ifdef CONFIG_CKRM_TYPE_TASKCLASS
        numtasks_put_ref(tsk->taskclass);
+#endif
        exit_notify(tsk);
        schedule();
        BUG();
index 5edc154..ca4a6f9 100644 (file)
@@ -968,6 +968,7 @@ struct task_struct *copy_process(unsigned long clone_flags,
        if (p->binfmt && !try_module_get(p->binfmt->module))
                goto bad_fork_cleanup_put_domain;
 
+       init_delays(p);
        p->did_exec = 0;
        copy_flags(clone_flags, p);
        if (clone_flags & CLONE_IDLETASK)
@@ -1228,9 +1229,11 @@ long do_fork(unsigned long clone_flags,
                        clone_flags |= CLONE_PTRACE;
        }
 
+#ifdef CONFIG_CKRM_TYPE_TASKCLASS
        if (numtasks_get_ref(current->taskclass, 0) == 0) {
                return -ENOMEM;
        }
+#endif
 
        p = copy_process(clone_flags, stack_start, regs, stack_size, parent_tidptr, child_tidptr);
        /*
@@ -1300,7 +1303,9 @@ long do_fork(unsigned long clone_flags,
                         */
                        set_need_resched();
        } else {
+#ifdef CONFIG_CKRM_TYPE_TASKCLASS
                numtasks_put_ref(current->taskclass);
+#endif
        }
        return pid;
 }
index f9be596..a5058d6 100644 (file)
@@ -46,6 +46,8 @@
 
 #include <asm/unistd.h>
 
+#include <asm/unistd.h>
+
 #ifdef CONFIG_NUMA
 #define cpu_to_node_mask(cpu) node_to_cpumask(cpu_to_node(cpu))
 #else
@@ -1879,6 +1881,7 @@ static void active_load_balance(runqueue_t *busiest, int busiest_cpu)
 next_group:
                group = group->next;
        } while (group != sd->groups);
+>>>>>>> 1.1.9.3
 }
 
 /*
index fcc91fd..2511ddf 100644 (file)
@@ -687,7 +687,7 @@ follow_page_pfn(struct mm_struct *mm, unsigned long address, int write,
                goto out;
        if (pmd_huge(*pmd))
                return follow_huge_pmd(mm, address, pmd, write);
-       if (pmd_bad(*pmd))
+       if (unlikely(pmd_bad(*pmd)))
                goto out;
 
        ptep = pte_offset_map(pmd, address);
@@ -699,15 +699,11 @@ follow_page_pfn(struct mm_struct *mm, unsigned long address, int write,
        if (pte_present(pte)) {
                if (write && !pte_write(pte))
                        goto out;
-               if (write && !pte_dirty(pte)) {
-                       struct page *page = pte_page(pte);
-                       if (!PageDirty(page))
-                               set_page_dirty(page);
-               }
                pfn = pte_pfn(pte);
                if (pfn_valid(pfn)) {
-                       struct page *page = pfn_to_page(pfn);
-                       
+                       page = pfn_to_page(pfn);
+                       if (write && !pte_dirty(pte) && !PageDirty(page))
+                               set_page_dirty(page);
                        mark_page_accessed(page);
                        return page;
                } else {
index 531034e..d4430f6 100644 (file)
 #include <linux/smp_lock.h>
 #include <linux/fs.h>
 #include <linux/random.h>
+
+#ifdef CONFIG_CKRM
 #include <linux/ckrm.h>
+#endif
 
 #include <net/icmp.h>
 #include <net/tcp.h>
@@ -278,7 +281,6 @@ kmem_cache_t *tcp_timewait_cachep;
 atomic_t tcp_orphan_count = ATOMIC_INIT(0);
 
 int sysctl_tcp_default_win_scale = 7;
-
 int sysctl_tcp_mem[3];
 int sysctl_tcp_wmem[3] = { 4 * 1024, 16 * 1024, 128 * 1024 };
 int sysctl_tcp_rmem[3] = { 4 * 1024, 87380, 87380 * 2 };
@@ -528,7 +530,24 @@ int tcp_listen_start(struct sock *sk)
 
        sk->sk_max_ack_backlog = 0;
        sk->sk_ack_backlog = 0;
+#ifdef CONFIG_ACCEPT_QUEUES
        tp->accept_queue = NULL;
+#else
+       tp->accept_queue = tp->accept_queue_tail = NULL;
+#endif 
+       tp->syn_wait_lock = RW_LOCK_UNLOCKED;
+       tcp_delack_init(tp);
+
+       lopt = kmalloc(sizeof(struct tcp_listen_opt), GFP_KERNEL);
+       if (!lopt)
+               return -ENOMEM;
+
+       memset(lopt, 0, sizeof(struct tcp_listen_opt));
+       for (lopt->max_qlen_log = 6; ; lopt->max_qlen_log++)
+               if ((1 << lopt->max_qlen_log) >= sysctl_max_syn_backlog)
+                       break;
+       get_random_bytes(&lopt->hash_rnd, 4);
+
 #ifdef CONFIG_ACCEPT_QUEUES
        tp->class_index = 0;
        for (i=0; i < NUM_ACCEPT_QUEUES; i++) {
@@ -538,27 +557,13 @@ int tcp_listen_start(struct sock *sk)
                tp->acceptq[i].aq_qcount = 0; 
                tp->acceptq[i].aq_count = 0; 
                if (i == 0) {
-                       tp->acceptq[i].aq_valid = 1; 
                        tp->acceptq[i].aq_ratio = 1; 
                }
                else {
-                       tp->acceptq[i].aq_valid = 0; 
                        tp->acceptq[i].aq_ratio = 0; 
                }
        }
 #endif
-       tp->syn_wait_lock = RW_LOCK_UNLOCKED;
-       tcp_delack_init(tp);
-
-       lopt = kmalloc(sizeof(struct tcp_listen_opt), GFP_KERNEL);
-       if (!lopt)
-               return -ENOMEM;
-
-       memset(lopt, 0, sizeof(struct tcp_listen_opt));
-       for (lopt->max_qlen_log = 6; ; lopt->max_qlen_log++)
-               if ((1 << lopt->max_qlen_log) >= sysctl_max_syn_backlog)
-                       break;
-       get_random_bytes(&lopt->hash_rnd, 4);
 
        write_lock_bh(&tp->syn_wait_lock);
        tp->listen_opt = lopt;
@@ -668,7 +673,7 @@ static void tcp_listen_stop (struct sock *sk)
                sock_put(child);
 
 #ifdef CONFIG_ACCEPT_QUEUES
-               tcp_acceptq_removed(sk, req->acceptq_class);
+               sk_acceptq_removed(sk, req->acceptq_class);
 #else
                sk_acceptq_removed(sk);
 #endif
@@ -2250,8 +2255,8 @@ struct sock *tcp_accept(struct sock *sk, int flags, int *err)
        req = tp->accept_queue;
        if ((tp->accept_queue = req->dl_next) == NULL)
                tp->accept_queue_tail = NULL;
-
-       tcp_acceptq_removed(sk);
+       newsk = req->sk;
+       sk_acceptq_removed(sk);
 #else
        first = tp->class_index;
        /* We should always have  request queued here. The accept_queue
@@ -2281,17 +2286,11 @@ struct sock *tcp_accept(struct sock *sk, int flags, int *err)
 
        if((++(tp->acceptq[first].aq_cnt)) >= tp->acceptq[first].aq_ratio){
                tp->acceptq[first].aq_cnt = 0;
-               tp->class_index = ++first & ~NUM_ACCEPT_QUEUES;
+               tp->class_index = ++first & (NUM_ACCEPT_QUEUES-1);
        }       
-       tcp_acceptq_removed(sk, req->acceptq_class);
-#endif
        newsk = req->sk;
-
-       /* MEF REVISIT: The following sk_acceptq_removed(sk); wasn't
-          in CKRM E13, but a latter patch should fix this
-          properly.
-        */
-       sk_acceptq_removed(sk);
+       sk_acceptq_removed(sk, req->acceptq_class);
+#endif
        tcp_openreq_fastfree(req);
        BUG_TRAP(newsk->sk_state != TCP_SYN_RECV);
        release_sock(sk);
@@ -2303,6 +2302,7 @@ out:
        return NULL;
 }
 
+
 /*
  *     Socket option code for TCP.
  */
@@ -2464,6 +2464,12 @@ int tcp_setsockopt(struct sock *sk, int level, int optname, char __user *optval,
                
 #ifdef CONFIG_ACCEPT_QUEUES
        case TCP_ACCEPTQ_SHARE:
+#ifdef CONFIG_CKRM
+               // If CKRM is set then the shares are set through rcfs.
+               // Get shares will still succeed.
+               err = -EOPNOTSUPP;
+               break;
+#else          
                {
                        char share_wt[NUM_ACCEPT_QUEUES];
                        int i,j;
@@ -2483,10 +2489,9 @@ int tcp_setsockopt(struct sock *sk, int level, int optname, char __user *optval,
                                        else if (share_wt[i] < j) {
                                                j = share_wt[i];
                                        }
-                                       tp->acceptq[i].aq_valid = 1;
                                }
                                else
-                                       tp->acceptq[i].aq_valid = 0;
+                                       tp->acceptq[i].aq_ratio = 0;
                                        
                        }
                        if (j == 0) {
@@ -2494,7 +2499,6 @@ int tcp_setsockopt(struct sock *sk, int level, int optname, char __user *optval,
                                 * specified set class 0 as 1.
                                 */
                                share_wt[0] = 1;
-                               tp->acceptq[0].aq_valid = 1;
                                j = 1;
                        }
                        for (i=0; i < NUM_ACCEPT_QUEUES; i++)  {
@@ -2504,7 +2508,7 @@ int tcp_setsockopt(struct sock *sk, int level, int optname, char __user *optval,
                }
                break;
 #endif
-
+#endif
        default:
                err = -ENOPROTOOPT;
                break;
@@ -2587,7 +2591,8 @@ int tcp_getsockopt(struct sock *sk, int level, int optname, char __user *optval,
                break;
 
 #ifdef CONFIG_ACCEPT_QUEUES
-       case TCP_ACCEPTQ_SHARE: {
+       case TCP_ACCEPTQ_SHARE: 
+       {
                struct tcp_acceptq_info tinfo[NUM_ACCEPT_QUEUES];
                int i;
 
@@ -2601,13 +2606,10 @@ int tcp_getsockopt(struct sock *sk, int level, int optname, char __user *optval,
 
                for(i=0; i < NUM_ACCEPT_QUEUES; i++) {
                        tinfo[i].acceptq_wait_time = 
-                               tp->acceptq[i].aq_wait_time/(HZ/USER_HZ);
+                            jiffies_to_msecs(tp->acceptq[i].aq_wait_time);
                        tinfo[i].acceptq_qcount = tp->acceptq[i].aq_qcount;
                        tinfo[i].acceptq_count = tp->acceptq[i].aq_count;
-                       if (tp->acceptq[i].aq_valid) 
-                               tinfo[i].acceptq_shares=tp->acceptq[i].aq_ratio;
-                       else
-                               tinfo[i].acceptq_shares = 0;
+                       tinfo[i].acceptq_shares=tp->acceptq[i].aq_ratio;
                }
 
                len = min_t(unsigned int, len, sizeof(tinfo));
@@ -2619,6 +2621,7 @@ int tcp_getsockopt(struct sock *sk, int level, int optname, char __user *optval,
                
                return 0;
        }
+       break;
 #endif
        default:
                return -ENOPROTOOPT;
index a9c91a3..53d710d 100644 (file)
@@ -1529,8 +1529,8 @@ int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
         * Accept only if the class has shares set or if the default class
         * i.e. class 0 has shares
         */
-       if (!(tcp_sk(sk)->acceptq[class].aq_valid)) {
-               if (tcp_sk(sk)->acceptq[0].aq_valid
+       if (!(tcp_sk(sk)->acceptq[class].aq_ratio)) {
+               if (tcp_sk(sk)->acceptq[0].aq_ratio
                        class = 0;
                else
                        goto drop;
@@ -1543,7 +1543,7 @@ int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
         * timeout.
         */
 #ifdef CONFIG_ACCEPT_QUEUES
-       if (tcp_acceptq_is_full(sk, class) && tcp_synq_young(sk, class) > 1)
+       if (sk_acceptq_is_full(sk, class) && tcp_synq_young(sk, class) > 1)
 #else
        if (sk_acceptq_is_full(sk) && tcp_synq_young(sk) > 1)
 #endif
@@ -1675,7 +1675,7 @@ struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
        struct sock *newsk;
 
 #ifdef CONFIG_ACCEPT_QUEUES
-       if (tcp_acceptq_is_full(sk, req->acceptq_class))
+       if (sk_acceptq_is_full(sk, req->acceptq_class))
 #else
        if (sk_acceptq_is_full(sk))
 #endif
index 1c8b8ec..e674ff7 100644 (file)
@@ -1197,21 +1197,14 @@ static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
         * Accept only if the class has shares set or if the default class
         * i.e. class 0 has shares
         */
-        if (!(tcp_sk(sk)->acceptq[class].aq_valid)) {
-               if (tcp_sk(sk)->acceptq[0].aq_valid
+        if (!(tcp_sk(sk)->acceptq[class].aq_ratio)) {
+               if (tcp_sk(sk)->acceptq[0].aq_ratio
                        class = 0; 
                else 
                        goto drop;
        }
-#endif
 
-        /* Accept backlog is full. If we have already queued enough
-        * of warm entries in syn queue, drop request. It is better than
-        * clogging syn queue with openreqs with exponentially increasing
-        * timeout.
-        */
-#ifdef CONFIG_ACCEPT_QUEUES
-        if (tcp_acceptq_is_full(sk, class) && tcp_synq_young(sk, class) > 1)
+       if (sk_acceptq_is_full(sk, class) && tcp_synq_young(sk, class) > 1)
 #else
        if (sk_acceptq_is_full(sk) && tcp_synq_young(sk) > 1)
 #endif
@@ -1336,7 +1329,7 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
        opt = np->opt;
 
 #ifdef CONFIG_ACCEPT_QUEUES
-       if (tcp_acceptq_is_full(sk, req->acceptq_class))
+       if (sk_acceptq_is_full(sk, req->acceptq_class))
 #else
        if (sk_acceptq_is_full(sk))
 #endif