[Click] AMD64

Qinghua(Kevin) Ye qye at trlabs.ca
Mon Jul 25 18:17:15 EDT 2005


Yes, I have this version. 
The problem is:

'LOCK_PREFIX' undeclared 

Regards,
Qinghua(Kevin) Ye
----- Original Message ----- 
From: "Eddie Kohler" <kohler at CS.UCLA.EDU>
To: "Qinghua(Kevin) Ye" <qye at trlabs.ca>
Cc: <click at amsterdam.lcs.mit.edu>
Sent: Monday, July 25, 2005 3:56 PM
Subject: Re: [Click] AMD64


> Hi Qinghua,
> 
> Great!  Now, did you have a version of read-pmc.c that had "#include  
> <click/config.h>" at the top?  That's how we tried to fix the problem.
> 
> Eddie
> 
> 
> On Jul 25, 2005, at 3:00 PM, Qinghua(Kevin) Ye wrote:
> 
> > Hi, Eddie,
> >
> > I just checked out the new source from CVS, and installed on my SMP  
> > Operaton
> > platform. It works perfect, except one fix at the beginning of the  
> > file
> > CLICKDIR/linuxmodule/read-pmc.c like:
> > #ifdef __x86_64__
> > #define __KERNEL__
> > #endif
> >
> > The configuration of my test is like:
> > ./configure --with-linux=/clusteros/test/linux-2.6.11.6 --enable- 
> > multithread
> > =2 --prefix=/usr/local/click -enable-adaptive -enable-greedy - 
> > enable-warp9 -
> > enable-etherswitch -enable-local -enable-ip6
> >
> > I will let you know if problem occurred as the test going on. Thanks.
> >
> > Regards,
> > Qinghua(Kevin) Ye
> > ----- Original Message -----
> > From: "Eddie Kohler" <kohler at cs.ucla.edu>
> > To: "Qinghua(Kevin) Ye" <qye at trlabs.ca>
> > Cc: "Adam Greenhalgh" <a.greenhalgh at cs.ucl.ac.uk>;
> > <click at amsterdam.lcs.mit.edu>; <qinghua at cs.ualberta.ca>
> > Sent: Sunday, July 24, 2005 3:02 PM
> > Subject: Re: [Click] AMD64
> >
> >
> >
> >> Hi Qinghua,
> >>
> >> By the way, I think the current Click CVS sources should work on  
> >> AMD64,
> >>
> > thanks
> >
> >> to your patches and Felipe and Adam's.  There are several changes  
> >> relative
> >>
> > to
> >
> >> your fixes below.  So I'd be interested in your experiences with it!
> >>
> >> Eddie
> >>
> >>
> >> Qinghua(Kevin) Ye wrote:
> >>
> >>> Hi Adam,
> >>>
> >>> I have been working on AMD64  and kernel 2.6.11.6 smp based on  
> >>> the CVS
> >>> version on May.20. The following is some minor modifications for the
> >>>
> > Linux
> >
> >>> Kernel module. I am still testing on it and plan to report it to  
> >>> Eddie
> >>>
> > once
> >
> >>> I finish testing. Since you are also working on this, let's share
> >>> information.
> >>>
> >>> The patch for 2.6.11.6 on my server has some minor problem. But  
> >>> they are
> >>> obvious. I will give it at the end.
> >>>
> >>> Eddie, could you check that if there are any incorrect  
> >>> modifications?
> >>> Thanks.
> >>>
> >>> Modifications for the type problem:
> >>> 1. In lib/glue.cc, modify void *operator new(unsigned sz) throw ()
> >>>
> >>> to operator new(size_t sz) throw ()
> >>>
> >>>    Reason: The size_t in i386 is unsigned int, but in x86_64 is  
> >>> unsigned
> >>> long. We put here size_t to compatible with both
> >>>
> >>>    Modify void * operator new[](unsigned sz) throw () to operator
> >>> new[](size_t sz) throw ()
> >>>
> >>> 2. In elements/linxumodule/cpuqueue.cc,for function String
> >>> CPUQueue::read_handler(Element *e, void *thunk)
> >>>
> >>>    Change int which = reinterpret_cast<int>(thunk);
> >>>
> >>>    to
> >>>
> >>>       long which = reinterpret_cast<long>(thunk);
> >>>
> >>> 3. In elements/linuxmodule/fromdevice.cc",
> >>>
> >>>  In static String FromDevice_read_stats(Element *e, void *thunk)
> >>>
> >>>     Change     int which = reinterpret_cast<int>(thunk);
> >>>
> >>>     to     long which = reinterpret_cast<long>(thunk);
> >>>
> >>> 4. in elements/linuxmodule/polldevice.cc",
> >>>
> >>>  In static String PollDevice_read_stats(Element *e, void *thunk)
> >>>
> >>>     Change     int which = reinterpret_cast<int>(thunk);
> >>>
> >>>     to      long which = reinterpret_cast<long>(thunk);
> >>>
> >>> 5. In elements/linuxmodule/rtcycles.cc",
> >>>
> >>>         In static String FromDevice_read_stats(Element *e, void  
> >>> *thunk)
> >>>
> >>>     Change     int which = reinterpret_cast<int>(thunk);
> >>>
> >>>                          to      long which =
> >>>
> > reinterpret_cast<long>(thunk);
> >
> >>>
> >>> 6. /linuxmodule/clickfs.c
> >>>
> >>>  Change  #define FILP_STRINGNO(filp)
> >>> (reinterpret_cast<int>((filp)->private_data))
> >>>
> >>> To: #define FILP_STRINGNO(filp)
> >>> (reinterpret_cast<long>((filp)->private_data))
> >>>
> >>>
> >>> Modifications for the 64 bit int problem:
> >>> 1. include/click/string.hh
> >>>
> >>>  Change  #if HAVE_INT64_TYPES && !HAVE_64_BIT_LONG
> >>>
> >>>  To #if HAVE_INT64_TYPES && (!HAVE_64_BIT_LONG||defined(__KERNEL__))
> >>>
> >>> 2. include/click/straccum.hh
> >>>
> >>>  Change  #if HAVE_INT64_TYPES && !HAVE_64_BIT_LONG
> >>>
> >>>  To #if HAVE_INT64_TYPES && (!HAVE_64_BIT_LONG||defined(__KERNEL__))
> >>>
> >>> 3. lib/string.cc
> >>>
> >>>  Change  #if HAVE_INT64_TYPES && !HAVE_64_BIT_LONG
> >>>
> >>>  To #if HAVE_INT64_TYPES && (!HAVE_64_BIT_LONG||defined(__KERNEL__))
> >>>
> >>> 4. lib/straccum.cc
> >>>
> >>>  Change  #if HAVE_INT64_TYPES && !HAVE_64_BIT_LONG
> >>>
> >>>  To #if HAVE_INT64_TYPES && (!HAVE_64_BIT_LONG||defined(__KERNEL__))
> >>>
> >>> 5. /linuxmodule/proclikefs.c
> >>>
> >>> comment the line #include <linux/modversions.h>
> >>>
> >>>
> >>> Support for SMP:
> >>> 1.      In include/click/atomic.hh, modify inline uint32_t
> >>> atomic_uint32_t::read_and_add(uint32_t delta)
> >>> after #else in line 85
> >>>
> >>>
> >>>
> >>> /* Modified by Qinghua Ye, to add support for __x86_64__ */
> >>>
> >>> #if defined(__x86_64__)
> >>>
> >>> #  if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0)
> >>>
> >>>     asm volatile (LOCK "xaddl %0,%1"
> >>>
> >>>                   : "=r" (delta), "=m" (_val.counter)
> >>>
> >>>                   : "0" (delta), "m" (_val.counter));
> >>>
> >>> #  else
> >>>
> >>>     asm volatile (LOCK "xaddl %0,%1"
> >>>
> >>>                   : "=r" (delta), "=m" (__atomic_fool_gcc(&_val))
> >>>
> >>>                   : "0" (delta), "m" (__atomic_fool_gcc(&_val)));
> >>>
> >>> #  endif
> >>>
> >>>     return delta;
> >>>
> >>> # else
> >>>
> >>> ...
> >>>
> >>> ...
> >>>
> >>> #endif
> >>>
> >>> 2.     include/click/atomic.hh, modify inline
> >>> atomic_uint32_t::compare_and_swap(uint32_t test_value, uint32_t
> >>>
> > new_value)
> >
> >>>
> >>> after #else
> >>>
> >>> /* Modified by Qinghua Ye*/
> >>>
> >>> # if defined(__x86_64__)
> >>>
> >>> #  if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0)
> >>>
> >>>     asm (LOCK "cmpxchgl %2,%0"
> >>>
> >>>          : "=m" (_val.counter), "=a" (old_value)
> >>>
> >>>          : "r" (new_value), "m" (_val.counter), "a" (test_value)
> >>>
> >>>          // : "eax", "cc", "memory");
> >>>
> >>>          : "cc", "memory");
> >>>
> >>> #  else
> >>>
> >>>     asm (LOCK "cmpxchgl %2,%0"
> >>>
> >>>          : "=m" (__atomic_fool_gcc(&_val)), "=a" (old_value)
> >>>
> >>>          : "r" (new_value), "m" (__atomic_fool_gcc(&_val)), "a"
> >>>
> > (test_value)
> >
> >>>
> >>>          // : "eax", "cc", "memory");
> >>>
> >>>          : "cc", "memory");
> >>>
> >>> #  endif
> >>>
> >>> #else
> >>>
> >>> ....
> >>>
> >>> # endif
> >>>
> >>> #endif
> >>>
> >>> return old_value;
> >>>
> >>> }
> >>>
> >>> 3.     In include/click/sync.hh, modify inline Spinlock::Spinlock 
> >>> () as:
> >>>
> >>> /* Modify by Qinghua Ye*/
> >>>
> >>> #if ((!defined(__i386__))&&(!defined(__x86_64__)))
> >>>
> >>> # error "no multithread support for non i386 or x86_64 click"
> >>>
> >>> #endif
> >>>
> >>>
> >>> Modifications on patched kernel 2.6.11.6
> >>>     1. include/asm-x86_64/mmu_context.h
> >>> 57c57
> >>>
> >>>     < asm volatile("movq %0,%%cr3" : "r" (__pa(next->pgd)) :  
> >>> "memory");
> >>>     ---
> >>>
> >>>
> >>>> asm volatile("movq %0,%%cr3" :: "r" (__pa(next->pgd)) : "memory");
> >>>>
> >>>
> >>>     2. include/asm-x86_64/mmu_context.h
> >>> 7,9d6
> >>>
> >>> < #ifdef __KERNEL__
> >>>
> >>> 15a13,14
> >>>
> >>>
> >>>
> >>>> #ifdef CONFIG_SMP
> >>>>
> >>>
> >>>
> >>>     3.include/asm-x86_64/thread_info.h
> >>>
> >>> 63c63
> >>>
> >>> < ti = (void *)(read_pda(kernelstack) + PDA_STACKOFFSET -  
> >>> THREAD_SIZE);
> >>>
> >>> ---
> >>>
> >>>
> >>>
> >>>> ti = (struct thread_info *)(read_pda(kernelstack) +  
> >>>> PDA_STACKOFFSET -
> >>>>
> >>>
> >>> THREAD_SIZE);
> >>>
> >>>     4.include/linux/fs.h
> >>>
> >>> 1644c1644
> >>>
> >>> < struct simple_transaction_argresp *ar = file->private_data;
> >>>
> >>> ---
> >>>
> >>>
> >>>
> >>>> struct simple_transaction_argresp *ar = (struct
> >>>>
> > simple_transaction_argresp
> >
> >>>
> >>> *)file->private_data;
> >>>
> >>>     5.include/net/sock.h
> >>> 1017,1018c1017,1018
> >>>
> >>> < unsigned int csum = csum_and_copy_from_user(from,
> >>>
> >>> < page_address(page) + off,
> >>>
> >>> ---
> >>>
> >>>
> >>>
> >>>> unsigned int csum = csum_and_copy_from_user((unsigned char *)from,
> >>>>
> >>>
> >>>
> >>>
> >>>> (unsigned char *)page_address(page) + off,
> >>>>
> >>>
> >>>
> >>> 1023c1023
> >>>
> >>> < } else if (copy_from_user(page_address(page) + off, from, copy))
> >>>
> >>> ---
> >>>
> >>>
> >>>
> >>>> } else if (copy_from_user((unsigned char *)page_address(page) +  
> >>>> off,
> >>>>
> > from,
> >
> >>>
> >>> copy))
> >>>
> >>>
> >>> Regards,
> >>> Qinghua(Kevin) Ye
> >>> ----- Original Message -----
> >>> From: "Adam Greenhalgh" <a.greenhalgh at cs.ucl.ac.uk>
> >>> To: <click at amsterdam.lcs.mit.edu>
> >>> Sent: Friday, June 03, 2005 10:37 AM
> >>> Subject: [Click] AMD64
> >>>
> >>>
> >>>
> >>>
> >>>> Hi
> >>>>
> >>>> We are part way through getting click to work on an amd 64 box, has
> >>>> anyone else done this and tested it ?
> >>>>
> >>>> Adam
> >>>> _______________________________________________
> >>>> click mailing list
> >>>> click at amsterdam.lcs.mit.edu
> >>>> https://amsterdam.lcs.mit.edu/mailman/listinfo/click
> >>>>
> >>>
> >>>
> >>>
> >>> _______________________________________________
> >>> click mailing list
> >>> click at amsterdam.lcs.mit.edu
> >>> https://amsterdam.lcs.mit.edu/mailman/listinfo/click
> >>>
> >>
> >>
> >
> >
> >
> 
> 



More information about the click mailing list