On 2/25/10, Garrett Cooper <[email protected]> wrote: > On Wed, Feb 24, 2010 at 11:07 PM, Garrett Cooper <[email protected]> wrote: >> On Wed, Feb 24, 2010 at 10:40 PM, Silesh C V <[email protected]> wrote: >>> Hi Garrett, >>> >>> Thanks for the review and suggestions. >>> >>> On 2/25/10, Garrett Cooper <[email protected]> wrote: >>>> On Wed, Feb 24, 2010 at 4:10 AM, Silesh C V <[email protected]> wrote: >>>>> >>>>> Hi , >>>>> >>>>> This patch contains tests for the linux RTC driver.The patch is taken >>>>> against feb intermediate release.I have also attached the patch.Please >>>>> find >>>>> the test log at the end of this mail.Build/Run instructions are >>>>> explained >>>>> in >>>>> the README. >>>>> >>>>> >>>>> Signed-off-By: Silesh C V <[email protected]> >>>>> -- >>>>> diff -purN ltp-intermediate-20100228. >>>>> orig/testcases/kernel/device-drivers/rtc/Makefile >>>>> ltp-intermediate-20100228/testcases/kernel/device-drivers/rtc/Makefile >>>>> --- >>>>> ltp-intermediate-20100228.orig/testcases/kernel/device-drivers/rtc/Makefile >>>>> 1970-01-01 05:30:00.000000000 +0530 >>>>> +++ >>>>> ltp-intermediate-20100228/testcases/kernel/device-drivers/rtc/Makefile >>>>> 2010-02-24 15:21:33.000000000 +0530 >>>>> @@ -0,0 +1,28 @@ >>>>> +# >>>>> +# Copyright (c) Larsen & Toubro Infotech Ltd., 2010 >>>>> +# >>>>> +# This program is free software; you can redistribute it and/or >>>>> modify >>>>> +# it under the terms of the GNU General Public License as published >>>>> by >>>>> +# the Free Software Foundation; either version 2 of the License, or >>>>> +# (at your option) any later version. >>>>> +# >>>>> +# This program is distributed in the hope that it will be useful, >>>>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of >>>>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See >>>>> +# the GNU General Public License for more details. >>>>> +# >>>>> +# You should have received a copy of the GNU General Public License >>>>> +# along with this program; if not, write to the Free Software >>>>> +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA >>>>> 02110-1301 >>>>> USA >>>>> +# >>>>> +# >>>>> + >>>>> +CFLAGS = -O2 -Wall >>>>> +SRC = test_rtc.c >>>>> + >>>>> + >>>>> +all: $(SRC) >>>>> + $(CC) $(CFLAGS) $(SRC) -o rtc-test >>>>> + >>>>> +clean: >>>>> + rm -f rtc-test >>>> >>>> Please integrate into the Makefile infrastructure. See README.mk-devel >>>> for more details. >>> >>> I can see that under kernel/ directory, the device-drivers directory >>> does not follow the new Makefile infrastructure. I tried adding >>> device-drivers SUBDIRS to testcases/kernel/Makefile. As none of the >>> other device driver test cases follow this Makefile approach, the >>> build breaks . >> >> Because those are kernel modules, and don't yet have an appropriate >> template for LTP with the new Makefile infrastructure. Your test uses >> straight ioctl(2) calls and doesn't need to be built with kernel >> sources, s.t. it can be built perfectly fine within the new makefile >> infrastructure. >> >>>>> diff -purN >>>>> ltp-intermediate-20100228.orig/testcases/kernel/device-drivers/rtc/README >>>>> ltp-intermediate-20100228/testcases/kernel/device-drivers/rtc/README >>>>> --- >>>>> ltp-intermediate-20100228.orig/testcases/kernel/device-drivers/rtc/README >>>>> 1970-01-01 05:30:00.000000000 +0530 >>>>> +++ >>>>> ltp-intermediate-20100228/testcases/kernel/device-drivers/rtc/README >>>>> 2010-02-24 14:34:01.000000000 +0530 >>>>> @@ -0,0 +1,29 @@ >>>>> +test_rtc.c : Test the Real Time Clock driver >>>>> + >>>>> +Tests supported as of now >>>>> +-------------------------- >>>>> +1. Read test : This reads the time/date from the RTC >>>>> + ioctls tested :- RTC_RD_TIME. >>>>> + >>>>> +2. Alarm Test: Sets the alarm to 5 seconds in future and makes sure it >>>>> rings. >>>>> + ioctls tested :- RTC_ALM_SET, RTC_ALM_READ, RTC_AIE_ON, >>>>> RTC_AIE_OFF. >>>>> + >>>>> +3. Update interrupts test : Sets Update interrupts enable on, waits >>>>> for >>>>> five >>>>> + interrupts and then turns it off. >>>>> + ioctls tested :- RTC_UIE_ON, RTC_UIE_OFF. >>>>> + >>>>> + >>>>> +How to Build >>>>> +------------ >>>>> + >>>>> +Enter rtc directory and issue a 'make' . >>>>> + >>>>> +How to Run >>>>> +---------- >>>>> + >>>>> + The tests assume the rtc device node to be "/dev/rtc". If you >>>>> have >>>>> a >>>>> +different node run the test with the name of the node as a parameter. >>>>> + >>>>> +Eg. If your node is /dev/rtc0, then run the test as >>>>> + >>>>> + $ ./rtc-test /dev/rtc0 >>>>> diff -purN >>>>> ltp-intermediate-20100228.orig/testcases/kernel/device-drivers/rtc/test_rtc.c >>>>> ltp-intermediate-20100228/testcases/kernel/device-drivers/rtc/test_rtc.c >>>>> --- >>>>> ltp-intermediate-20100228.orig/testcases/kernel/device-drivers/rtc/test_rtc.c >>>>> 1970-01-01 05:30:00.000000000 +0530 >>>>> +++ >>>>> ltp-intermediate-20100228/testcases/kernel/device-drivers/rtc/test_rtc.c >>>>> 2010-02-24 15:17:59.000000000 +0530 >>>>> @@ -0,0 +1,175 @@ >>>>> +/* test_rtc.c >>>>> + * >>>>> + * Copyright (c) Larsen & Toubro Infotech Ltd., 2010 >>>>> + * >>>>> + * Contact : Silesh C V <[email protected]> >>>>> + * >>>>> + * This program is free software; you can redistribute it and/or >>>>> modify >>>>> + * it under the terms of the GNU General Public License as published >>>>> by >>>>> + * the Free Software Foundation; either version 2 of the License, or >>>>> + * (at your option) any later version. >>>>> + * >>>>> + * This program is distributed in the hope that it will be useful, >>>>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >>>>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See >>>>> + * the GNU General Public License for more details. >>>>> + * >>>>> + * You should have received a copy of the GNU General Public License >>>>> + * along with this program; if not, write to the Free Software >>>>> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA >>>>> 02111-1307 >>>>> USA >>>>> + * >>>>> + */ >>>>> + >>>>> +#include <sys/ioctl.h> >>>>> +#include <stdio.h> >>>>> +#include <stdlib.h> >>>>> +#include <fcntl.h> >>>>> +#include <unistd.h> >>>>> +#include <linux/rtc.h> >>>>> +#include <errno.h> >>>>> + >>>>> +int rtc_fd = -1; >>>>> + >>>>> +void read_alarm_test(void) >>>>> +{ >>>>> + struct rtc_time rtc_tm; >>>>> + int ret; >>>>> + unsigned long data; >>>>> + >>>>> + printf("\nRTC READ TEST:\n"); >>>>> + >>>>> + /*Read RTC Time*/ >>>>> + ret = ioctl(rtc_fd, RTC_RD_TIME, &rtc_tm); >>>>> + if (ret == -1) { >>>>> + perror("RTC_RD_TIME ioctl"); >>>>> + printf("RTC READ TEST Failed\n"); >>>>> + return; >>>>> + } >>>>> + >>>>> + printf("RTC READ TEST Passed"); >>>>> + printf("\nCurrent RTC date/time is %d-%d-%d, >>>>> %02d:%02d:%02d.\n", >>>>> + rtc_tm.tm_mday, rtc_tm.tm_mon + 1, rtc_tm.tm_year + >>>>> 1900, >>>>> + rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec); >>>> >>>> strftime(3) ? >>> >>> >>> OK. Coming in the next patch. >> >> Awesome :). >> >>>>> + printf("\nRTC ALARM TEST :\n"); >>>>> + >>>>> + /*set Alarm to 5 Seconds*/ >>>>> + rtc_tm.tm_sec += 5; >>>>> + if (rtc_tm.tm_sec >= 60) { >>>>> + rtc_tm.tm_sec %= 60; >>>>> + rtc_tm.tm_min++; >>>>> + } >>>>> + >>>>> + if (rtc_tm.tm_min == 60) { >>>>> + rtc_tm.tm_min = 0; >>>>> + rtc_tm.tm_hour++; >>>>> + } >>>>> + >>>>> + if (rtc_tm.tm_hour == 24) >>>>> + rtc_tm.tm_hour = 0; >>>>> + >>>>> + ret = ioctl(rtc_fd, RTC_ALM_SET, &rtc_tm); >>>>> + if (ret == -1) { >>>>> + perror("RTC_ALM_SET ioctl"); >>>>> + printf("RTC ALARM TEST Failed\n"); >>>>> + return; >>>>> + } >>>>> + >>>>> + /*Read current alarm time*/ >>>>> + ret = ioctl(rtc_fd, RTC_ALM_READ, &rtc_tm); >>>>> + if (ret == -1) { >>>>> + perror("RTC_ALM_READ ioctl"); >>>>> + printf("RTC ALARM TEST Failed\n"); >>>>> + return; >>>>> + } >>>>> + >>>>> + printf("Alarm time set to %02d:%02d:%02d.\n", >>>>> + rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec); >>>>> + /* Enable alarm interrupts */ >>>>> + ret = ioctl(rtc_fd, RTC_AIE_ON, 0); >>>>> + if (ret == -1) { >>>>> + perror("RTC_AIE_ON ioctl"); >>>>> + printf("RTC ALARM TEST Failed\n"); >>>>> + return; >>>>> + } >>>>> + >>>>> + printf("Waiting 5 seconds for the alarm...\n"); >>>>> + ret = read(rtc_fd, &data, sizeof(unsigned long)); >>>>> + if (ret == -1) { >>>>> + perror("read"); >>>>> + printf("RTC ALARM TEST Failed\n"); >>>>> + return; >>>>> + } >>>>> + >>>>> + printf("Alarm rang.\n"); >>>>> + /* Disable alarm interrupts */ >>>>> + ret = ioctl(rtc_fd, RTC_AIE_OFF, 0); >>>>> + if (ret == -1) { >>>>> + perror("RTC_AIE_OFF ioctl"); >>>>> + printf("RTC ALARM TEST Failed\n"); >>>>> + return; >>>>> + } >>>>> + >>>>> + printf("RTC ALARM TEST Passed\n"); >>>>> +} >>>>> + >>>>> +void update_interrupts_test(void) >>>>> +{ >>>>> + int ret, i; >>>>> + unsigned long data; >>>>> + >>>>> + printf("\nRTC UPDATE INTERRUPTS TEST :\n"); >>>>> + /*Turn on update interrupts*/ >>>>> + ret = ioctl(rtc_fd, RTC_UIE_ON, 0); >>>>> + if (ret == -1) { >>>>> + perror("RTC_UIE_ON ioctl"); >>>>> + printf("RTC UPDATE INTERRUPTS TEST Failed\n"); >>>>> + return; >>>>> + } >>>>> + >>>>> + printf("Waiting for 5 update interrupts...\n"); >>>>> + for (i = 1; i < 6; i++) { >>>>> + ret = read(rtc_fd, &data, sizeof(unsigned long)); >>>>> + if (ret == -1) { >>>>> + perror("read"); >>>>> + printf("RTC UPDATE INTERRUPTS TEST Failed\n"); >>>>> + return; >>>>> + } >>>>> + printf("Update interrupt %d\n", i); >>>>> + } >>>>> + >>>>> + /* Turn off update interrupts */ >>>>> + ret = ioctl(rtc_fd, RTC_UIE_OFF, 0); >>>>> + if (ret == -1) { >>>>> + perror("RTC_UIE_OFF ioctl"); >>>>> + printf("RTC UPDATE INTERRUPTS TEST Failed\n"); >>>>> + return; >>>>> + } >>>>> + printf("RTC UPDATE INTERRUPTS TEST Passed\n"); >>>> >>>> tst_resm(ret == -1 ? TFAIL : TPASS, "RTC update interrupts test %s", >>>> ret == -1 ? "failed" : "passed"); >>>> >>> >>> This can be done only when we build the test along with LTP .But as >>> the problem I mentioned >>> earlier the device-driver directory is still out of the overall LTP build >>> . >> >> As said before, getting this in the standard build is trivial and the >> other pieces aren't in the standard build because of the reasons I >> mentioned earlier. >> >>>>> +} >>>>> + >>>>> +int main(int argc, char **argv) >>>>> +{ >>>>> + char *rtc_dev = "/dev/rtc" >>>>> + >>>>> + >>>>> + if (argc == 2) >>>>> + rtc_dev = argv[1]; >>>>> + >>>>> + rtc_fd = open(rtc_dev, O_RDONLY); >>>>> + if (rtc_fd < 0) { >>>>> + perror(rtc_dev); >>>> >>>> tst_brkm(TBROK | TERRNO, tst_exit, "couldn't open %s", rtc_dev); >>> >>> Same here. >>> >>>> >>>>> + exit(errno); >>>>> + } >>>>> + >>>>> + /*Read and alarm tests*/ >>>>> + read_alarm_test(); >>>>> + >>>>> + /*Update interrupts test*/ >>>>> + update_interrupts_test(); >>>>> + >>>>> + close(rtc_fd); >>>>> + >>>>> + printf("\nRTC Tests Done!\n"); >>>>> + return 0; >>>>> +} >>>> >>>> 1. Please rename the test sourcefile to rtc-test.c because the current >>>> naming is unnecessarily inconsistent. >>> >>> OK. >>> >>>> 2. Please replace printfs with tst_res(3) calls so this can be >>>> properly integrated into LTP. >>> >>> Same issue as I explained earlier. >>> >>>> >>>> Thanks! >>>> -Garrett >>> >>> Thanks, >>> >>> Silesh. >>> >>>> >>>>> -- >>>>> test log >>>>> ------------------------------ >>>>> RTC READ TEST: >>>>> RTC READ TEST Passed >>>>> Current RTC date/time is 24-2-2010, 17:03:05. >>>>> >>>>> RTC ALARM TEST : >>>>> Alarm time set to 17:03:10. >>>>> Waiting 5 seconds for the alarm... >>>>> Alarm rang. >>>>> RTC ALARM TEST Passed >>>>> >>>>> RTC UPDATE INTERRUPTS TEST : >>>>> Waiting for 5 update interrupts... >>>>> Update interrupt 1 >>>>> Update interrupt 2 >>>>> Update interrupt 3 >>>>> Update interrupt 4 >>>>> Update interrupt 5 >>>>> RTC UPDATE INTERRUPTS TEST Passed >>>>> >>>>> RTC Tests Done! >> >> The end goal is to have these tests fit directly into LTP without >> having to fudge around writing a secondary driver, thus maintaining >> two pieces of dependent code [which is of course more complicated than >> one piece of code], and thus is more of a pain to maintain longterm. >> There's a lot of code in the repository like this that was ported and >> subsequently not properly adapted to the existing infrastructure, thus >> creating additional headache for maintainers and end-users. > > Ok -- I take that back. I have no idea wtf is going on in this > directory nor the ultimate intent of the tests in here, apart from > being a lot of ad hoc pain in the arse-ness.
The README in testcases/kernel/device-drivers/ says that these tests should not be run with the other tests, and they have to be built separately. I agree that this is because they have a kernel space part also. But this prevents us from building device_driver tests that have only user space part (as in RTC tests), along with the overall build. And these tests does not belong in any other directory other than kernel/device-drivers. So as long as other tests are there we will have to live with building new device driver tests separately.I can re-send the patch with Garrett's suggestions incorporated. Subrata, suggestions ? Thanks, Silesh > > I've learned enough to keep my hands off this because it looks like a mess. > > Thanks, > -Garrett > ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
