[Click] AMD64

Eddie Kohler kohler at CS.UCLA.EDU
Mon Jul 25 17:56:03 EDT 2005


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