2009-03-27 02:06:31

by Chen Liqin

[permalink] [raw]
Subject: Re: [PATCH 7/13] score - New architecure port to SunplusCT S+CORE processor

linux/score lastest patch place at
http://www.sunplusct.com/images/linux-score-patch/linux-score-20090324.patch

diff -uprN -x linux-2.6-git.ori/Documentation/dontdiff
linux-2.6-git.ori/arch/score/include/asm/unistd.h
linux-2.6-git.new/arch/score/include/asm/unistd.h
--- linux-2.6-git.ori/arch/score/include/asm/unistd.h 1970-01-01
08:00:00.000000000 +0800
+++ linux-2.6-git.new/arch/score/include/asm/unistd.h 2009-03-26
16:12:25.000000000 +0800
@@ -0,0 +1,612 @@
+#ifndef _ASM_UNISTD_H
+#define _ASM_UNISTD_H
+
+#define __NR_Linux 0
+#define __NR_syscall (__NR_Linux + 0)
+#define __NR_exit (__NR_Linux + 1)
+#define __NR_fork (__NR_Linux + 2)
+#define __NR_read (__NR_Linux + 3)
+#define __NR_write (__NR_Linux + 4)
+#define __NR_open (__NR_Linux + 5)
+#define __NR_close (__NR_Linux + 6)
+#define __NR_waitpid (__NR_Linux + 7)
+#define __NR_creat (__NR_Linux + 8)
+#define __NR_link (__NR_Linux + 9)
+#define __NR_unlink (__NR_Linux + 10)
+#define __NR_execve (__NR_Linux + 11)
+#define __NR_chdir (__NR_Linux + 12)
+#define __NR_time (__NR_Linux + 13)
+#define __NR_mknod (__NR_Linux + 14)
+#define __NR_chmod (__NR_Linux + 15)
+#define __NR_lchown (__NR_Linux + 16)
+#define __NR_break (__NR_Linux + 17)
+#define __NR_unused18 (__NR_Linux + 18)
+#define __NR_lseek (__NR_Linux + 19)
+#define __NR_getpid (__NR_Linux + 20)
+#define __NR_mount (__NR_Linux + 21)
+#define __NR_umount (__NR_Linux + 22)
+#define __NR_setuid (__NR_Linux + 23)
+#define __NR_getuid (__NR_Linux + 24)
+#define __NR_stime (__NR_Linux + 25)
+#define __NR_ptrace (__NR_Linux + 26)
+#define __NR_alarm (__NR_Linux + 27)
+#define __NR_unused28 (__NR_Linux + 28)
+#define __NR_pause (__NR_Linux + 29)
+#define __NR_utime (__NR_Linux + 30)
+#define __NR_stty (__NR_Linux + 31)
+#define __NR_gtty (__NR_Linux + 32)
+#define __NR_access (__NR_Linux + 33)
+#define __NR_nice (__NR_Linux + 34)
+#define __NR_ftime (__NR_Linux + 35)
+#define __NR_sync (__NR_Linux + 36)
+#define __NR_kill (__NR_Linux + 37)
+#define __NR_rename (__NR_Linux + 38)
+#define __NR_mkdir (__NR_Linux + 39)
+#define __NR_rmdir (__NR_Linux + 40)
+#define __NR_dup (__NR_Linux + 41)
+#define __NR_pipe (__NR_Linux + 42)
+#define __NR_times (__NR_Linux + 43)
+#define __NR_prof (__NR_Linux + 44)
+#define __NR_brk (__NR_Linux + 45)
+#define __NR_setgid (__NR_Linux + 46)
+#define __NR_getgid (__NR_Linux + 47)
+#define __NR_signal (__NR_Linux + 48)
+#define __NR_geteuid (__NR_Linux + 49)
+#define __NR_getegid (__NR_Linux + 50)
+#define __NR_acct (__NR_Linux + 51)
+#define __NR_umount2 (__NR_Linux + 52)
+#define __NR_lock (__NR_Linux + 53)
+#define __NR_ioctl (__NR_Linux + 54)
+#define __NR_fcntl (__NR_Linux + 55)
+#define __NR_mpx (__NR_Linux + 56)
+#define __NR_setpgid (__NR_Linux + 57)
+#define __NR_ulimit (__NR_Linux + 58)
+#define __NR_unused59 (__NR_Linux + 59)
+#define __NR_umask (__NR_Linux + 60)
+#define __NR_chroot (__NR_Linux + 61)
+#define __NR_ustat (__NR_Linux + 62)
+#define __NR_dup2 (__NR_Linux + 63)
+#define __NR_getppid (__NR_Linux + 64)
+#define __NR_getpgrp (__NR_Linux + 65)
+#define __NR_setsid (__NR_Linux + 66)
+#define __NR_sigaction (__NR_Linux + 67)
+#define __NR_sgetmask (__NR_Linux + 68)
+#define __NR_ssetmask (__NR_Linux + 69)
+#define __NR_setreuid (__NR_Linux + 70)
+#define __NR_setregid (__NR_Linux + 71)
+#define __NR_sigsuspend (__NR_Linux + 72)
+#define __NR_sigpending (__NR_Linux + 73)
+#define __NR_sethostname (__NR_Linux + 74)
+#define __NR_setrlimit (__NR_Linux + 75)
+#define __NR_getrlimit (__NR_Linux + 76)
+#define __NR_getrusage (__NR_Linux + 77)
+#define __NR_gettimeofday (__NR_Linux + 78)
+#define __NR_settimeofday (__NR_Linux + 79)
+#define __NR_getgroups (__NR_Linux + 80)
+#define __NR_setgroups (__NR_Linux + 81)
+#define __NR_reserved82 (__NR_Linux + 82)
+#define __NR_symlink (__NR_Linux + 83)
+#define __NR_unused84 (__NR_Linux + 84)
+#define __NR_readlink (__NR_Linux + 85)
+#define __NR_uselib (__NR_Linux + 86)
+#define __NR_swapon (__NR_Linux + 87)
+#define __NR_reboot (__NR_Linux + 88)
+#define __NR_readdir (__NR_Linux + 89)
+#define __NR_mmap (__NR_Linux + 90)
+#define __NR_munmap (__NR_Linux + 91)
+#define __NR_truncate (__NR_Linux + 92)
+#define __NR_ftruncate (__NR_Linux + 93)
+#define __NR_fchmod (__NR_Linux + 94)
+#define __NR_fchown (__NR_Linux + 95)
+#define __NR_getpriority (__NR_Linux + 96)
+#define __NR_setpriority (__NR_Linux + 97)
+#define __NR_profil (__NR_Linux + 98)
+#define __NR_statfs (__NR_Linux + 99)
+#define __NR_fstatfs (__NR_Linux + 100)
+#define __NR_ioperm (__NR_Linux + 101)
+#define __NR_socketcall (__NR_Linux + 102)
+#define __NR_syslog (__NR_Linux + 103)
+#define __NR_setitimer (__NR_Linux + 104)
+#define __NR_getitimer (__NR_Linux + 105)
+#define __NR_stat (__NR_Linux + 106)
+#define __NR_lstat (__NR_Linux + 107)
+#define __NR_fstat (__NR_Linux + 108)
+#define __NR_unused109 (__NR_Linux + 109)
+#define __NR_iopl (__NR_Linux + 110)
+#define __NR_vhangup (__NR_Linux + 111)
+#define __NR_idle (__NR_Linux + 112)
+#define __NR_vm86 (__NR_Linux + 113)
+#define __NR_wait4 (__NR_Linux + 114)
+#define __NR_swapoff (__NR_Linux + 115)
+#define __NR_sysinfo (__NR_Linux + 116)
+#define __NR_ipc (__NR_Linux + 117)
+#define __NR_fsync (__NR_Linux + 118)
+#define __NR_sigreturn (__NR_Linux + 119)
+#define __NR_clone (__NR_Linux + 120)
+#define __NR_setdomainname (__NR_Linux + 121)
+#define __NR_uname (__NR_Linux + 122)
+#define __NR_modify_ldt (__NR_Linux + 123)
+#define __NR_adjtimex (__NR_Linux + 124)
+#define __NR_mprotect (__NR_Linux + 125)
+#define __NR_sigprocmask (__NR_Linux + 126)
+#define __NR_create_module (__NR_Linux + 127)
+#define __NR_init_module (__NR_Linux + 128)
+#define __NR_delete_module (__NR_Linux + 129)
+#define __NR_get_kernel_syms (__NR_Linux + 130)
+#define __NR_quotactl (__NR_Linux + 131)
+#define __NR_getpgid (__NR_Linux + 132)
+#define __NR_fchdir (__NR_Linux + 133)
+#define __NR_bdflush (__NR_Linux + 134)
+#define __NR_sysfs (__NR_Linux + 135)
+#define __NR_personality (__NR_Linux + 136)
+#define __NR_afs_syscall (__NR_Linux + 137) /* Syscall for
Andrew File System */
+#define __NR_setfsuid (__NR_Linux + 138)
+#define __NR_setfsgid (__NR_Linux + 139)
+#define __NR__llseek (__NR_Linux + 140)
+#define __NR_getdents (__NR_Linux + 141)
+#define __NR__newselect (__NR_Linux + 142)
+#define __NR_flock (__NR_Linux + 143)
+#define __NR_msync (__NR_Linux + 144)
+#define __NR_readv (__NR_Linux + 145)
+#define __NR_writev (__NR_Linux + 146)
+#define __NR_cacheflush (__NR_Linux + 147)
+#define __NR_cachectl (__NR_Linux + 148)
+#define __NR_sysscore (__NR_Linux + 149)
+#define __NR_unused150 (__NR_Linux + 150)
+#define __NR_getsid (__NR_Linux + 151)
+#define __NR_fdatasync (__NR_Linux + 152)
+#define __NR__sysctl (__NR_Linux + 153)
+#define __NR_mlock (__NR_Linux + 154)
+#define __NR_munlock (__NR_Linux + 155)
+#define __NR_mlockall (__NR_Linux + 156)
+#define __NR_munlockall (__NR_Linux + 157)
+#define __NR_sched_setparam (__NR_Linux + 158)
+#define __NR_sched_getparam (__NR_Linux + 159)
+#define __NR_sched_setscheduler (__NR_Linux + 160)
+#define __NR_sched_getscheduler (__NR_Linux + 161)
+#define __NR_sched_yield (__NR_Linux + 162)
+#define __NR_sched_get_priority_max (__NR_Linux + 163)
+#define __NR_sched_get_priority_min (__NR_Linux + 164)
+#define __NR_sched_rr_get_interval (__NR_Linux + 165)
+#define __NR_nanosleep (__NR_Linux + 166)
+#define __NR_mremap (__NR_Linux + 167)
+#define __NR_accept (__NR_Linux + 168)
+#define __NR_bind (__NR_Linux + 169)
+#define __NR_connect (__NR_Linux + 170)
+#define __NR_getpeername (__NR_Linux + 171)
+#define __NR_getsockname (__NR_Linux + 172)
+#define __NR_getsockopt (__NR_Linux + 173)
+#define __NR_listen (__NR_Linux + 174)
+#define __NR_recv (__NR_Linux + 175)
+#define __NR_recvfrom (__NR_Linux + 176)
+#define __NR_recvmsg (__NR_Linux + 177)
+#define __NR_send (__NR_Linux + 178)
+#define __NR_sendmsg (__NR_Linux + 179)
+#define __NR_sendto (__NR_Linux + 180)
+#define __NR_setsockopt (__NR_Linux + 181)
+#define __NR_shutdown (__NR_Linux + 182)
+#define __NR_socket (__NR_Linux + 183)
+#define __NR_socketpair (__NR_Linux + 184)
+#define __NR_setresuid (__NR_Linux + 185)
+#define __NR_getresuid (__NR_Linux + 186)
+#define __NR_query_module (__NR_Linux + 187)
+#define __NR_poll (__NR_Linux + 188)
+#define __NR_nfsservctl (__NR_Linux + 189)
+#define __NR_setresgid (__NR_Linux + 190)
+#define __NR_getresgid (__NR_Linux + 191)
+#define __NR_prctl (__NR_Linux + 192)
+#define __NR_rt_sigreturn (__NR_Linux + 193)
+#define __NR_rt_sigaction (__NR_Linux + 194)
+#define __NR_rt_sigprocmask (__NR_Linux + 195)
+#define __NR_rt_sigpending (__NR_Linux + 196)
+#define __NR_rt_sigtimedwait (__NR_Linux + 197)
+#define __NR_rt_sigqueueinfo (__NR_Linux + 198)
+#define __NR_rt_sigsuspend (__NR_Linux + 199)
+#define __NR_pread64 (__NR_Linux + 200)
+#define __NR_pwrite64 (__NR_Linux + 201)
+#define __NR_chown (__NR_Linux + 202)
+#define __NR_getcwd (__NR_Linux + 203)
+#define __NR_capget (__NR_Linux + 204)
+#define __NR_capset (__NR_Linux + 205)
+#define __NR_sigaltstack (__NR_Linux + 206)
+#define __NR_sendfile (__NR_Linux + 207)
+#define __NR_getpmsg (__NR_Linux + 208)
+#define __NR_putpmsg (__NR_Linux + 209)
+#define __NR_mmap2 (__NR_Linux + 210)
+#define __NR_truncate64 (__NR_Linux + 211)
+#define __NR_ftruncate64 (__NR_Linux + 212)
+#define __NR_stat64 (__NR_Linux + 213)
+#define __NR_lstat64 (__NR_Linux + 214)
+#define __NR_fstat64 (__NR_Linux + 215)
+#define __NR_pivot_root (__NR_Linux + 216)
+#define __NR_mincore (__NR_Linux + 217)
+#define __NR_madvise (__NR_Linux + 218)
+#define __NR_getdents64 (__NR_Linux + 219)
+#define __NR_fcntl64 (__NR_Linux + 220)
+#define __NR_reserved221 (__NR_Linux + 221)
+#define __NR_gettid (__NR_Linux + 222)
+#define __NR_readahead (__NR_Linux + 223)
+#define __NR_setxattr (__NR_Linux + 224)
+#define __NR_lsetxattr (__NR_Linux + 225)
+#define __NR_fsetxattr (__NR_Linux + 226)
+#define __NR_getxattr (__NR_Linux + 227)
+#define __NR_lgetxattr (__NR_Linux + 228)
+#define __NR_fgetxattr (__NR_Linux + 229)
+#define __NR_listxattr (__NR_Linux + 230)
+#define __NR_llistxattr (__NR_Linux + 231)
+#define __NR_flistxattr (__NR_Linux + 232)
+#define __NR_removexattr (__NR_Linux + 233)
+#define __NR_lremovexattr (__NR_Linux + 234)
+#define __NR_fremovexattr (__NR_Linux + 235)
+#define __NR_tkill (__NR_Linux + 236)
+#define __NR_sendfile64 (__NR_Linux + 237)
+#define __NR_futex (__NR_Linux + 238)
+#define __NR_sched_setaffinity (__NR_Linux + 239)
+#define __NR_sched_getaffinity (__NR_Linux + 240)
+#define __NR_io_setup (__NR_Linux + 241)
+#define __NR_io_destroy (__NR_Linux + 242)
+#define __NR_io_getevents (__NR_Linux + 243)
+#define __NR_io_submit (__NR_Linux + 244)
+#define __NR_io_cancel (__NR_Linux + 245)
+#define __NR_exit_group (__NR_Linux + 246)
+#define __NR_lookup_dcookie (__NR_Linux + 247)
+#define __NR_epoll_create (__NR_Linux + 248)
+#define __NR_epoll_ctl (__NR_Linux + 249)
+#define __NR_epoll_wait (__NR_Linux + 250)
+#define __NR_remap_file_pages (__NR_Linux + 251)
+#define __NR_set_tid_address (__NR_Linux + 252)
+#define __NR_restart_syscall (__NR_Linux + 253)
+#define __NR_fadvise64 (__NR_Linux + 254)
+#define __NR_statfs64 (__NR_Linux + 255)
+#define __NR_fstatfs64 (__NR_Linux + 256)
+#define __NR_timer_create (__NR_Linux + 257)
+#define __NR_timer_settime (__NR_Linux + 258)
+#define __NR_timer_gettime (__NR_Linux + 259)
+#define __NR_timer_getoverrun (__NR_Linux + 260)
+#define __NR_timer_delete (__NR_Linux + 261)
+#define __NR_clock_settime (__NR_Linux + 262)
+#define __NR_clock_gettime (__NR_Linux + 263)
+#define __NR_clock_getres (__NR_Linux + 264)
+#define __NR_clock_nanosleep (__NR_Linux + 265)
+#define __NR_tgkill (__NR_Linux + 266)
+#define __NR_utimes (__NR_Linux + 267)
+#define __NR_mbind (__NR_Linux + 268)
+#define __NR_get_mempolicy (__NR_Linux + 269)
+#define __NR_set_mempolicy (__NR_Linux + 270)
+#define __NR_mq_open (__NR_Linux + 271)
+#define __NR_mq_unlink (__NR_Linux + 272)
+#define __NR_mq_timedsend (__NR_Linux + 273)
+#define __NR_mq_timedreceive (__NR_Linux + 274)
+#define __NR_mq_notify (__NR_Linux + 275)
+#define __NR_mq_getsetattr (__NR_Linux + 276)
+#define __NR_vserver (__NR_Linux + 277)
+#define __NR_waitid (__NR_Linux + 278)
+/* #define __NR_sys_setaltroot (__NR_Linux + 279) */
+#define __NR_add_key (__NR_Linux + 280)
+#define __NR_request_key (__NR_Linux + 281)
+#define __NR_keyctl (__NR_Linux + 282)
+#define __NR_set_thread_area (__NR_Linux + 283)
+#define __NR_inotify_init (__NR_Linux + 284)
+#define __NR_inotify_add_watch (__NR_Linux + 285)
+#define __NR_inotify_rm_watch (__NR_Linux + 286)
+#define __NR_migrate_pages (__NR_Linux + 287)
+#define __NR_openat (__NR_Linux + 288)
+#define __NR_mkdirat (__NR_Linux + 289)
+#define __NR_mknodat (__NR_Linux + 290)
+#define __NR_fchownat (__NR_Linux + 291)
+#define __NR_futimesat (__NR_Linux + 292)
+#define __NR_fstatat64 (__NR_Linux + 293)
+#define __NR_unlinkat (__NR_Linux + 294)
+#define __NR_renameat (__NR_Linux + 295)
+#define __NR_linkat (__NR_Linux + 296)
+#define __NR_symlinkat (__NR_Linux + 297)
+#define __NR_readlinkat (__NR_Linux + 298)
+#define __NR_fchmodat (__NR_Linux + 299)
+#define __NR_faccessat (__NR_Linux + 300)
+#define __NR_pselect6 (__NR_Linux + 301)
+#define __NR_ppoll (__NR_Linux + 302)
+#define __NR_unshare (__NR_Linux + 303)
+#define __NR_splice (__NR_Linux + 304)
+#define __NR_sync_file_range (__NR_Linux + 305)
+#define __NR_tee (__NR_Linux + 306)
+#define __NR_vmsplice (__NR_Linux + 307)
+#define __NR_move_pages (__NR_Linux + 308)
+#define __NR_set_robust_list (__NR_Linux + 309)
+#define __NR_get_robust_list (__NR_Linux + 310)
+#define __NR_kexec_load (__NR_Linux + 311)
+#define __NR_getcpu (__NR_Linux + 312)
+#define __NR_epoll_pwait (__NR_Linux + 313)
+#define __NR_ioprio_set (__NR_Linux + 314)
+#define __NR_ioprio_get (__NR_Linux + 315)
+#define __NR_utimensat (__NR_Linux + 316)
+#define __NR_signalfd (__NR_Linux + 317)
+#define __NR_timerfd (__NR_Linux + 318)
+#define __NR_eventfd (__NR_Linux + 319)
+#define __NR_fallocate (__NR_Linux + 320)
+#define __NR_timerfd_create (__NR_Linux + 321)
+#define __NR_timerfd_gettime (__NR_Linux + 322)
+#define __NR_timerfd_settime (__NR_Linux + 323)
+#define __NR_signalfd4 (__NR_Linux + 324)
+#define __NR_eventfd2 (__NR_Linux + 325)
+#define __NR_epoll_create1 (__NR_Linux + 326)
+#define __NR_dup3 (__NR_Linux + 327)
+#define __NR_pipe2 (__NR_Linux + 328)
+#define __NR_inotify_init1 (__NR_Linux + 329)
+
+#define __NR_Linux_syscalls 329
+
+#ifndef __ASSEMBLY__
+
+#define _syscall0(type,name) \
+type name(void) \
+{ \
+ register unsigned long __v0; \
+ register unsigned long __a3; \
+ \
+ __asm__ volatile ( \
+ "ldi\tr27, %2\n\t" \
+ "syscall\n\t" \
+ "mv\t%0, r4\n\t" \
+ "mv\t%1, r7\n\t" \
+ : "=&r" (__v0), "=r" (__a3) \
+ : "i" (__NR_##name) \
+ : "r4","r7", "r8", "r9", "r10", "r11", "r22", "r23", "r24", "r25",
"r26", "r27"); \
+ \
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+ return -1; \
+}
+
+/*
+ * DANGER: This macro isn't usable for the pipe(2) call
+ * which has a unusual return convention.
+ */
+#define _syscall1(type,name,atype,a) \
+type name(atype a) \
+{ \
+ register unsigned long __v0; \
+ register unsigned long __a3; \
+ \
+ __asm__ volatile ( \
+ "mv\tr4, %3\n\t" \
+ "ldi\tr27, %2\n\t" \
+ "syscall\n\t" \
+ "mv\t%0, r4\n\t" \
+ "mv\t%1, r7\n\t" \
+ : "=&r" (__v0), "=r" (__a3) \
+ : "i" (__NR_##name), "r" ((unsigned long) (a)) \
+ : "r4", "r7", "r8", "r9", "r10", "r11", "r22", "r23", \
+ "r24", "r25", "r26", "r27"); \
+ \
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+ return -1; \
+}
+
+#define _syscall2(type,name,atype,a,btype,b) \
+type name(atype a, btype b) \
+{ \
+ register unsigned long __v0; \
+ register unsigned long __a3; \
+ \
+ __asm__ volatile ( \
+ "mv\tr4, %3\n\t" \
+ "mv\tr5, %4\n\t" \
+ "ldi\tr27, %2\n\t" \
+ "syscall\n\t" \
+ "mv\t%0, r4\n\t" \
+ "mv\t%1, r7\n\t" \
+ : "=&r" (__v0), "=r" (__a3) \
+ : "i" (__NR_##name), "r" ((unsigned long) (a)), "r" ((unsigned
long) (b)) \
+ : "r4", "r5", "r7", "r8", "r9", "r10", "r11", "r22", "r23", \
+ "r24", "r25", "r26", "r27"); \
+ \
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+ return -1; \
+}
+
+#define _syscall3(type,name,atype,a,btype,b,ctype,c) \
+type name(atype a, btype b, ctype c) \
+{ \
+ register unsigned long __v0; \
+ register unsigned long __a3; \
+ \
+ __asm__ volatile ( \
+ "mv\tr4, %3\n\t" \
+ "mv\tr5, %4\n\t" \
+ "mv\tr6, %5\n\t" \
+ "ldi\tr27, %2\n\t" \
+ "syscall\n\t" \
+ "mv\t%0, r4\n\t" \
+ "mv\t%1, r7\n\t" \
+ : "=&r" (__v0), "=r" (__a3) \
+ : "i" (__NR_##name), "r" ((unsigned long) (a)), \
+ "r" ((unsigned long) (b)), "r" ((unsigned long) (c)) \
+ : "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r22", "r23",\
+ "r24", "r25", "r26", "r27"); \
+ \
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+ return -1; \
+}
+
+#define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \
+type name(atype a, btype b, ctype c, dtype d) \
+{ \
+ register unsigned long __v0; \
+ register unsigned long __a3; \
+ \
+ __asm__ volatile ( \
+ "mv\tr4, %3\n\t" \
+ "mv\tr5, %4\n\t" \
+ "mv\tr6, %5\n\t" \
+ "mv\tr7, %6\n\t" \
+ "ldi\tr27, %2\n\t" \
+ "syscall\n\t" \
+ "mv\t%0, r4\n\t" \
+ "mv\t%1, r7\n\t" \
+ : "=&r" (__v0), "=r" (__a3) \
+ : "i" (__NR_##name), "r" ((unsigned long) (a)), "r" ((unsigned
long) (b)), \
+ "r" ((unsigned long) (c)), "r"((unsigned long) (d)) \
+ : "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r22", "r23",
\
+ "r24", "r25", "r26", "r27"); \
+ \
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+ return -1; \
+}
+
+/*
+ * Using those means your brain needs more than an oil change ;-)
+ */
+
+#define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \
+type name(atype a, btype b, ctype c, dtype d, etype e) \
+{ \
+ register unsigned long __v0; \
+ register unsigned long __a3; \
+ \
+ __asm__ volatile ( \
+ "mv\tr4, %3\n\t" \
+ "mv\tr5, %4\n\t" \
+ "mv\tr6, %5\n\t" \
+ "mv\tr7, %6\n\t" \
+ "addi\tr0, -32\n\t" \
+ "sw\t%7, [r0, 16]\n\t" \
+ "ldi\tr27, %2\n\t" \
+ "syscall\n\t" \
+ "addi\tr0, 32\n\t" \
+ "mv\t%0, r4\n\t" \
+ "mv\t%1, r7\n\t" \
+ : "=&r" (__v0), "=r" (__a3) \
+ : "i" (__NR_##name), "r" ((unsigned long) (a)), \
+ "r" ((unsigned long) (b)), "r" ((unsigned long) (c)), \
+ "r"((unsigned long) (d)), "r"((unsigned long) (e)) \
+ : "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r22", "r23",
\
+ "r24", "r25", "r26", "r27"); \
+ \
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+ return -1; \
+}
+
+#define
_syscall6(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f) \
+type name(atype a, btype b, ctype c, dtype d, etype e, ftype f) \
+{ \
+ register unsigned long __v0; \
+ register unsigned long __a3; \
+ \
+ __asm__ volatile ( \
+ "mv\tr4, %3\n\t" \
+ "mv\tr5, %4\n\t" \
+ "mv\tr6, %5\n\t" \
+ "mv\tr7, %6\n\t" \
+ "addi\tr0, -32\n\t" \
+ "sw\t%7, [r0, 16]\n\t" \
+ "sw\t%8, [r0, 20]\n\t" \
+ "ldi\tr27, %2\n\t" \
+ "syscall\n\t" \
+ "addi\tr0, 32\n\t" \
+ "mv\t%0, r4\n\t" \
+ "mv\t%1, r7\n\t" \
+ : "=&r" (__v0), "=r" (__a3) \
+ : "i" (__NR_##name), "r" ((unsigned long) (a)), \
+ "r" ((unsigned long) (b)), "r" ((unsigned long) (c)), \
+ "r"((unsigned long) (d)), "r"((unsigned long) (e)),
"r"((unsigned long) (f)) \
+ : "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r22", "r23",
\
+ "r24", "r25", "r26", "r27"); \
+ \
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+ return -1; \
+}
+
+#define
_syscall7(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f,gtype,g)
\
+type name(atype a, btype b, ctype c, dtype d, etype e, ftype f, gtype g)
\
+{ \
+ register unsigned long __v0; \
+ register unsigned long __a3; \
+ \
+ __asm__ volatile ( \
+ "mv\tr4, %3\n\t" \
+ "mv\tr5, %4\n\t" \
+ "mv\tr6, %5\n\t" \
+ "mv\tr7, %6\n\t" \
+ "addi\tr0, -32\n\t" \
+ "sw\t%7, [r0, 16]\n\t" \
+ "sw\t%8, [r0, 20]\n\t" \
+ "sw\t%9, [r0, 24]\n\t" \
+ "ldi\tr27, %2\n\t" \
+ "syscall\n\t" \
+ "addi\tr0, 32\n\t" \
+ "mv\t%0, r4\n\t" \
+ "mv\t%1, r7\n\t" \
+ : "=&r" (__v0), "=r" (__a3) \
+ : "i" (__NR_##name), "r" ((unsigned long) (a)), \
+ "r" ((unsigned long) (b)), "r" ((unsigned long) (c)), \
+ "r"((unsigned long) (d)), "r"((unsigned long) (e)), \
+ "r"((unsigned long) (f)), "r" ((unsigned long) (g)) \
+ : "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r22", "r23",
\
+ "r24", "r25", "r26", "r27"); \
+ \
+ if (__a3 == 0) \
+ return (type) __v0; \
+ errno = __v0; \
+ return -1; \
+}
+#endif /* !__ASSEMBLY__ */
+
+#ifdef __KERNEL__
+
+#ifndef __ASSEMBLY__
+
+#define __ARCH_WANT_SYS_FADVISE64
+#define __ARCH_OMIT_COMPAT_SYS_GETDENTS64
+#define __ARCH_WANT_IPC_PARSE_VERSION
+#define __ARCH_WANT_OLD_READDIR
+#define __ARCH_WANT_SYS_ALARM
+#define __ARCH_WANT_SYS_GETHOSTNAME
+#define __ARCH_WANT_SYS_PAUSE
+#define __ARCH_WANT_SYS_SGETMASK
+#define __ARCH_WANT_SYS_UTIME
+#define __ARCH_WANT_SYS_WAITPID
+#define __ARCH_WANT_SYS_SOCKETCALL
+#define __ARCH_WANT_SYS_GETPGRP
+#define __ARCH_WANT_SYS_LLSEEK
+#define __ARCH_WANT_SYS_NICE
+#define __ARCH_WANT_SYS_OLD_GETRLIMIT
+#define __ARCH_WANT_SYS_OLDUMOUNT
+#define __ARCH_WANT_SYS_SIGPENDING
+#define __ARCH_WANT_SYS_SIGPROCMASK
+#define __ARCH_WANT_SYS_RT_SIGACTION
+#define __ARCH_WANT_STAT64
+#define __ARCH_WANT_SYS_TIME
+
+/* whitelists for checksyscalls */
+#define __IGNORE_select
+#define __IGNORE_vfork
+#define __IGNORE_time
+#define __IGNORE_uselib
+#define __IGNORE_fadvise64_64
+#define __IGNORE_getdents64
+
+#endif /* !__ASSEMBLY__ */
+
+/*
+ * "Conditional" syscalls
+ *
+ * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
+ * but it doesn't work on all toolchains, so we just do it by hand
+ */
+#define cond_syscall(x) asm(".weak\t" #x "\n" #x "\t=\tsys_ni_syscall")
+
+#endif /* __KERNEL__ */
+#endif /* _ASM_UNISTD_H */
diff -uprN -x linux-2.6-git.ori/Documentation/dontdiff
linux-2.6-git.ori/arch/score/include/asm/user.h
linux-2.6-git.new/arch/score/include/asm/user.h
--- linux-2.6-git.ori/arch/score/include/asm/user.h 1970-01-01
08:00:00.000000000 +0800
+++ linux-2.6-git.new/arch/score/include/asm/user.h 2009-03-13
14:26:33.000000000 +0800
@@ -0,0 +1,4 @@
+#ifndef _ASM_USER_H
+#define _ASM_USER_H
+
+#endif /* _ASM_USER_H */
diff -uprN -x linux-2.6-git.ori/Documentation/dontdiff
linux-2.6-git.ori/arch/score/Kconfig linux-2.6-git.new/arch/score/Kconfig
--- linux-2.6-git.ori/arch/score/Kconfig 1970-01-01
08:00:00.000000000 +0800
+++ linux-2.6-git.new/arch/score/Kconfig 2009-03-26
13:50:16.000000000 +0800
@@ -0,0 +1,320 @@
+config SCORE
+ bool
+ default y
+ select EMBEDDED
+
+mainmenu "Linux/SCORE Kernel Configuration"
+
+menu "Machine selection"
+
+choice
+ prompt "System type"
+ default MACH_SPCT6600
+
+config MACH_SPCT6600
+ bool "SPCT6600 series based machines"
+ select SYS_SUPPORTS_32BIT_KERNEL
+ select SYS_SUPPORTS_LITTLE_ENDIAN
+ select CPU_SCORE7
+ select GENERIC_HAS_IOMAP
+
+config MACH_SPG300
+ bool "SPG300 series based machines"
+ select SYS_SUPPORTS_32BIT_KERNEL
+ select SYS_SUPPORTS_LITTLE_ENDIAN
+ select CPU_SCORE7
+ select GENERIC_HAS_IOMAP
+
+config SCORE_SIM
+ bool "Score simulator"
+ select SYS_SUPPORTS_32BIT_KERNEL
+ select SYS_SUPPORTS_LITTLE_ENDIAN
+ select CPU_SCORE7
+ select GENERIC_HAS_IOMAP
+endchoice
+
+endmenu
+
+config CPU_SCORE7
+ bool
+
+config GENERIC_IOMAP
+ bool
+ default y
+
+config RWSEM_GENERIC_SPINLOCK
+ bool
+ default y
+
+config GENERIC_FIND_NEXT_BIT
+ bool
+ default y
+
+config GENERIC_HWEIGHT
+ bool
+ default y
+
+config GENERIC_CALIBRATE_DELAY
+ bool
+ default y
+
+config GENERIC_CLOCKEVENTS
+ bool
+ default y
+
+config GENERIC_TIME
+ bool
+ default y
+
+config SCHED_NO_NO_OMIT_FRAME_POINTER
+ bool
+ default y
+
+config GENERIC_HARDIRQS_NO__DO_IRQ
+ bool
+ default y
+
+config EARLY_PRINTK
+ bool "Early printk" if EMBEDDED
+ depends on SYS_HAS_EARLY_PRINTK
+ default y
+ help
+ This option enables special console drivers which allow the
kernel
+ to print messages very early in the bootup process.
+
+ This is useful for kernel debugging when your machine crashes
very
+ early before the console code is initialized. For normal
operation,
+ it is not recommended because it looks ugly on some machines and
+ doesn't cooperate with an X server. You should normally say N
here,
+ unless you want to debug such a crash.
+
+config SYS_HAS_EARLY_PRINTK
+ bool
+
+#
+# Endianess selection. Sufficiently obscure so many users don't know
what to
+# answer,so we try hard to limit the available choices. Also the use of
a
+# choice statement should be more obvious to the user.
+#
+choice
+ prompt "Endianess selection"
+ help
+ Some SCORE machines can be configured for either little or big
endian
+ byte order. These modes require different kernels and a
different
+ Linux distribution. In general there is one preferred byteorder
for a
+ particular system but some systems are just as commonly used in
the
+ one or the other endianness.
+
+config CPU_BIG_ENDIAN
+ bool "Big endian"
+ depends on SYS_SUPPORTS_BIG_ENDIAN
+
+config CPU_LITTLE_ENDIAN
+ bool "Little endian"
+ depends on SYS_SUPPORTS_LITTLE_ENDIAN
+
+endchoice
+
+config SYS_SUPPORTS_BIG_ENDIAN
+ bool
+
+config SYS_SUPPORTS_LITTLE_ENDIAN
+ bool
+
+config SCORE_L1_CACHE_SHIFT
+ int
+ default "5"
+
+menu "Kernel type"
+
+config 32BIT
+ bool
+ default y
+
+config PAGE_SIZE_4KB
+ bool
+ default y
+
+config GENERIC_HARDIRQS
+ bool
+ default y
+
+config ARCH_FLATMEM_ENABLE
+ bool
+ default y
+
+config ARCH_POPULATES_NODE_MAP
+ bool
+ default y
+
+source "mm/Kconfig"
+
+config MEMORY_START
+ hex
+ default 0xa0000000
+
+source "kernel/time/Kconfig"
+
+#
+# Timer Interrupt Frequency Configuration
+#
+
+choice
+ prompt "Timer frequency"
+ default HZ_250
+ help
+ Allows the configuration of the timer frequency.
+
+ config HZ_48
+ bool "48 HZ" if SYS_SUPPORTS_48HZ || SYS_SUPPORTS_ARBIT_HZ
+
+ config HZ_100
+ bool "100 HZ" if SYS_SUPPORTS_100HZ ||
SYS_SUPPORTS_ARBIT_HZ
+
+ config HZ_128
+ bool "128 HZ" if SYS_SUPPORTS_128HZ ||
SYS_SUPPORTS_ARBIT_HZ
+
+ config HZ_250
+ bool "250 HZ" if SYS_SUPPORTS_250HZ ||
SYS_SUPPORTS_ARBIT_HZ
+
+ config HZ_256
+ bool "256 HZ" if SYS_SUPPORTS_256HZ ||
SYS_SUPPORTS_ARBIT_HZ
+
+endchoice
+
+config SYS_SUPPORTS_48HZ
+ bool
+
+config SYS_SUPPORTS_100HZ
+ bool
+
+config SYS_SUPPORTS_128HZ
+ bool
+
+config SYS_SUPPORTS_250HZ
+ bool
+
+config SYS_SUPPORTS_256HZ
+ bool
+
+config SYS_SUPPORTS_ARBIT_HZ
+ bool
+ default y if !SYS_SUPPORTS_48HZ && !SYS_SUPPORTS_100HZ && \
+ !SYS_SUPPORTS_128HZ && !SYS_SUPPORTS_250HZ && \
+ !SYS_SUPPORTS_256HZ
+
+config HZ
+ int
+ default 48 if HZ_48
+ default 100 if HZ_100
+ default 128 if HZ_128
+ default 250 if HZ_250
+ default 256 if HZ_256
+
+source "kernel/Kconfig.preempt"
+
+config KEXEC
+ bool "Kexec system call (EXPERIMENTAL)"
+ depends on EXPERIMENTAL
+ help
+ kexec is a system call that implements the ability to shutdown
your
+ current kernel, and to start another kernel. It is like a
reboot
+ but it is independent of the system firmware. And like a
reboot
+ you can start any kernel with it, not just Linux.
+
+ The name comes from the similarity to the exec system call.
+
+ It is an ongoing process to be certain the hardware in a machine
+ is properly shutdown, so do not be surprised if this code does
not
+ initially work for you. It may help to enable device
hotplugging
+ support. As of this writing the exact hardware interface is
+ strongly in flux, so no good recommendation can be made.
+
+config SECCOMP
+ bool "Enable seccomp to safely compute untrusted bytecode"
+ depends on PROC_FS
+ default y
+ help
+ This kernel feature is useful for number crunching applications
+ that may need to compute untrusted bytecode during their
+ execution. By using pipes or other transports made available to
+ the process as file descriptors supporting the read/write
+ syscalls, it's possible to isolate those applications in
+ their own address space using seccomp. Once seccomp is
+ enabled via /proc/<pid>/seccomp, it cannot be disabled
+ and the task is only allowed to execute a few safe syscalls
+ defined by each seccomp mode.
+
+ If unsure, say Y. Only embedded should say N here.
+
+endmenu
+
+config RWSEM_GENERIC_SPINLOCK
+ bool
+ default y
+
+config LOCKDEP_SUPPORT
+ bool
+ default y
+
+config STACKTRACE_SUPPORT
+ bool
+ default y
+
+source "init/Kconfig"
+
+config PROBE_INITRD_HEADER
+ bool "Probe initrd header created by addinitrd"
+ depends on BLK_DEV_INITRD
+ help
+ Probe initrd header at the last page of kernel image.
+ Say Y here if you are using arch/score/boot/addinitrd.c to
+ add initrd or initramfs image to the kernel image.
+ Otherwise, say N.
+
+menu "Bus options (PCI, PCMCIA, EISA, ISA, TC)"
+
+config MMU
+ bool
+ default y
+
+source "drivers/pcmcia/Kconfig"
+
+source "drivers/pci/hotplug/Kconfig"
+
+endmenu
+
+menu "Executable file formats"
+
+source "fs/Kconfig.binfmt"
+
+config SYSVIPC_COMPAT
+ bool
+ depends on COMPAT && SYSVIPC
+ default y
+
+endmenu
+
+menu "Power management options"
+
+config ARCH_SUSPEND_POSSIBLE
+ def_bool y
+ depends on !SMP
+
+source "kernel/power/Kconfig"
+
+endmenu
+
+source "net/Kconfig"
+
+source "drivers/Kconfig"
+
+source "fs/Kconfig"
+
+source "arch/score/Kconfig.debug"
+
+source "security/Kconfig"
+
+source "crypto/Kconfig"
+
+source "lib/Kconfig"
diff -uprN -x linux-2.6-git.ori/Documentation/dontdiff
linux-2.6-git.ori/arch/score/Kconfig.debug
linux-2.6-git.new/arch/score/Kconfig.debug
--- linux-2.6-git.ori/arch/score/Kconfig.debug 1970-01-01
08:00:00.000000000 +0800
+++ linux-2.6-git.new/arch/score/Kconfig.debug 2009-03-13
14:26:33.000000000 +0800
@@ -0,0 +1,37 @@
+menu "Kernel hacking"
+
+config TRACE_IRQFLAGS_SUPPORT
+ bool
+ default y
+
+source "lib/Kconfig.debug"
+
+config CMDLINE
+ string "Default kernel command string"
+ default ""
+ help
+ On some platforms, there is currently no way for the boot loader
to
+ pass arguments to the kernel. For these platforms, you can
supply
+ some command-line options at build time by entering them here.
In
+ other cases you can specify kernel args so that you don't have
+ to set them up in board prom initialization routines.
+
+config DEBUG_STACK_USAGE
+ bool "Enable stack utilization instrumentation"
+ depends on DEBUG_KERNEL
+ help
+ Enables the display of the minimum amount of free stack which
each
+ task has ever had available in the sysrq-T and sysrq-P debug
output.
+
+ This option will slow down process creation somewhat.
+
+config RUNTIME_DEBUG
+ bool "Enable run-time debugging"
+ depends on DEBUG_KERNEL
+ help
+ If you say Y here, some debugging macros will do run-time
checking.
+ If you say N here, those macros will mostly turn to no-ops. See
+ include/asm-score/debug.h for debuging macros.
+ If unsure, say N.
+
+endmenu

Signed off by: Chen Liqin <[email protected]>


2009-03-27 16:06:00

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH 7/13] score - New architecure port to SunplusCT S+CORE processor

On Friday 27 March 2009, [email protected] wrote:

> +#define __NR_Linux 0
> +#define __NR_syscall (__NR_Linux + 0)
> +#define __NR_exit (__NR_Linux + 1)
> +#define __NR_fork (__NR_Linux + 2)
> +#define __NR_read (__NR_Linux + 3)
> +#define __NR_write (__NR_Linux + 4)
> +#define __NR_open (__NR_Linux + 5)
> +#define __NR_close (__NR_Linux + 6)
> +#define __NR_waitpid (__NR_Linux + 7)
> +#define __NR_creat (__NR_Linux + 8)
> +#define __NR_link (__NR_Linux + 9)
> +#define __NR_unlink (__NR_Linux + 10)
> +#define __NR_execve (__NR_Linux + 11)
> +#define __NR_chdir (__NR_Linux + 12)
> +#define __NR_time (__NR_Linux + 13)
> +#define __NR_mknod (__NR_Linux + 14)
> +#define __NR_chmod (__NR_Linux + 15)
> +#define __NR_lchown (__NR_Linux + 16)
> +#define __NR_break (__NR_Linux + 17)
> +#define __NR_unused18 (__NR_Linux + 18)

Do you need to keep backwards compatiblity with existing user
space code? The microblaze developers decided to do a clean
cut for merging their code into Linux, which I think is a good
idea in order to limit the system calls that you need to provide
for backwards compatibility, and to remove all the "unused" ones.

Note that you could also remove some of the traditional ones
like 'open' 'mknod' or 'link' because they implement a subset
of the newer 'openat', 'mknodat' and 'linkat' calls. There
are many other examples. The recommended way for these is to
have your libc wrap the system calls.

I actually hope that we can come up with a minimal list of syscalls
that we can put into asm-generic/unistd.h and share with microblaze
and all future architectures. Unfortunately, the same is not
possible with the existing architectures because of binary
compatibility with existing user binaries.

> +#define __NR_sigsuspend (__NR_Linux + 72)
> +#define __NR_sigpending (__NR_Linux + 73)

All the 'sig*' syscalls can be left out, in favour of the 'rt_sig*'
variants.

> +#define __NR_profil (__NR_Linux + 98)

What is this one?

> +#define __NR_statfs (__NR_Linux + 99)
> +#define __NR_fstatfs (__NR_Linux + 100)
> +#define __NR_ioperm (__NR_Linux + 101)
> +#define __NR_socketcall (__NR_Linux + 102)

You should not have socketcall and ipc, but rather use
their subcalls directly. See e.g. how blackfin does it.

> +#define __NR_iopl (__NR_Linux + 110)
> +#define __NR_vhangup (__NR_Linux + 111)
> +#define __NR_idle (__NR_Linux + 112)
> +#define __NR_vm86 (__NR_Linux + 113)

iopl and vm86 are x86 specific, you should not have them.
sys_idle has been removed a long time ago.

> +#define __NR_create_module (__NR_Linux + 127)
> +#define __NR_init_module (__NR_Linux + 128)
> +#define __NR_delete_module (__NR_Linux + 129)

create_module is long gone as well.

> +#define __NR_get_kernel_syms (__NR_Linux + 130)
> +#define __NR_quotactl (__NR_Linux + 131)
> +#define __NR_getpgid (__NR_Linux + 132)
> +#define __NR_fchdir (__NR_Linux + 133)
> +#define __NR_bdflush (__NR_Linux + 134)
> +#define __NR_sysfs (__NR_Linux + 135)

bdflush is not a nop, sysfs (the syscall, not the file system)
is deprecated.

> +#define __NR_cacheflush (__NR_Linux + 147)
> +#define __NR_cachectl (__NR_Linux + 148)
> +#define __NR_sysscore (__NR_Linux + 149)

Are these your own? Do you really need them?

> +#define _syscall0(type,name) \
> +type name(void) \
> +{ \
> + register unsigned long __v0; \
> + register unsigned long __a3; \
> + \
> + __asm__ volatile ( \
> + "ldi\tr27, %2\n\t" \
> + "syscall\n\t" \
> + "mv\t%0, r4\n\t" \
> + "mv\t%1, r7\n\t" \
> + : "=&r" (__v0), "=r" (__a3) \
> + : "i" (__NR_##name) \
> + : "r4","r7", "r8", "r9", "r10", "r11", "r22", "r23", "r24", "r25",
> "r26", "r27"); \
> + \
> + if (__a3 == 0) \
> + return (type) __v0; \
> + errno = __v0; \
> + return -1; \
> +}

These macros were traditionally part of the kernel headers, but are
no more, you should remove them here.

> +#define __ARCH_WANT_SYS_FADVISE64
> +#define __ARCH_OMIT_COMPAT_SYS_GETDENTS64
> +#define __ARCH_WANT_IPC_PARSE_VERSION
> +#define __ARCH_WANT_OLD_READDIR
> +#define __ARCH_WANT_SYS_ALARM
> +#define __ARCH_WANT_SYS_GETHOSTNAME
> +#define __ARCH_WANT_SYS_PAUSE
> +#define __ARCH_WANT_SYS_SGETMASK
> +#define __ARCH_WANT_SYS_UTIME
> +#define __ARCH_WANT_SYS_WAITPID
> +#define __ARCH_WANT_SYS_SOCKETCALL
> +#define __ARCH_WANT_SYS_GETPGRP
> +#define __ARCH_WANT_SYS_LLSEEK
> +#define __ARCH_WANT_SYS_NICE
> +#define __ARCH_WANT_SYS_OLD_GETRLIMIT
> +#define __ARCH_WANT_SYS_OLDUMOUNT
> +#define __ARCH_WANT_SYS_SIGPENDING
> +#define __ARCH_WANT_SYS_SIGPROCMASK
> +#define __ARCH_WANT_SYS_RT_SIGACTION
> +#define __ARCH_WANT_STAT64
> +#define __ARCH_WANT_SYS_TIME

This list should be empty. A new architecture should
not need any of them, because they have all been
superceded. I'm trying to clean this list up to make
sure it is up-to-date and you also don't get other
syscalls that you don't need any more.

> +/* whitelists for checksyscalls */
> +#define __IGNORE_select
> +#define __IGNORE_vfork
> +#define __IGNORE_time
> +#define __IGNORE_uselib

It's good that you don't implement these syscalls, because they
have been superceded, but the right solution would be to change
checksyscalls to no longer require them.

> +#define __IGNORE_fadvise64_64
> +#define __IGNORE_getdents64

I believe you actually need these two syscalls.

> +menu "Machine selection"
> +
> +choice
> + prompt "System type"
> + default MACH_SPCT6600
> +
> +config MACH_SPCT6600
> + bool "SPCT6600 series based machines"
> + select SYS_SUPPORTS_32BIT_KERNEL
> + select SYS_SUPPORTS_LITTLE_ENDIAN
> + select CPU_SCORE7
> + select GENERIC_HAS_IOMAP
> +
> +config MACH_SPG300
> + bool "SPG300 series based machines"
> + select SYS_SUPPORTS_32BIT_KERNEL
> + select SYS_SUPPORTS_LITTLE_ENDIAN
> + select CPU_SCORE7
> + select GENERIC_HAS_IOMAP
> +
> +config SCORE_SIM
> + bool "Score simulator"
> + select SYS_SUPPORTS_32BIT_KERNEL
> + select SYS_SUPPORTS_LITTLE_ENDIAN
> + select CPU_SCORE7
> + select GENERIC_HAS_IOMAP
> +endchoice

On powerpc and x86, we found it very helpful to be able to build a
kernel that actually runs on all the machines, rather than a subset.

You may want to think about changing your code to enable that as
well, though that is not something you should do before merging
your tree.

> +config HZ
> + int
> + default 48 if HZ_48
> + default 100 if HZ_100
> + default 128 if HZ_128
> + default 250 if HZ_250
> + default 256 if HZ_256

This is an unusual selection of clock tick frequencies. Are you
limited by the hardware implementation here?
If not, you should consider implementing tickless operation, which
is often more efficient.

Arnd <><

2009-03-27 17:09:21

by Kyle McMartin

[permalink] [raw]
Subject: Re: [PATCH 7/13] score - New architecure port to SunplusCT S+CORE processor

On Fri, Mar 27, 2009 at 05:05:29PM +0100, [email protected] wrote:
> > +config MACH_SPCT6600
> > + bool "SPCT6600 series based machines"
> > + select SYS_SUPPORTS_32BIT_KERNEL
> > + select SYS_SUPPORTS_LITTLE_ENDIAN
> > + select CPU_SCORE7
> > + select GENERIC_HAS_IOMAP
> > +

Huh, is it intended to add big endian support? <asm/byteorder.h>
was just including <asm-generic/little_endian.h> and should probably
be conditional on your SYS_SUPPROTS_BIG_ENDIAN if so...

I've dug a bit at your code for this, and can't see where you obviously
set a byte order bit in a control register... is it hard wired on the
board?

regards, Kyle