Changeset 08264c8 in rtems-libbsd


Ignore:
Timestamp:
Oct 28, 2013, 8:54:33 AM (6 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
4.11, afaeccc05a556f6aa25ba044a7e49d6aa634a59e, freebsd-9.3, master
Children:
795c5e6
Parents:
c33de69
git-author:
Sebastian Huber <sebastian.huber@…> (10/28/13 08:54:33)
git-committer:
Sebastian Huber <sebastian.huber@…> (10/31/13 12:18:52)
Message:

Use poll() from FreeBSD

Files:
1 deleted
6 edited

Legend:

Unmodified
Added
Removed
  • Makefile

    rc33de69 r08264c8  
    9090LIB_C_FILES += rtemsbsd/rtems/rtems-net-setup.c
    9191LIB_C_FILES += rtemsbsd/rtems/rtems-syslog-initialize.c
    92 LIB_C_FILES += rtemsbsd/rtems/rtems-syspoll.c
    9392LIB_C_FILES += rtemsbsd/rtems/rtems-uthread_kevent.c
    9493LIB_C_FILES += rtemsbsd/rtems/rtems-uthread_kqueue.c
  • freebsd-to-rtems.py

    rc33de69 r08264c8  
    647647                'rtems/rtems-net-setup.c',
    648648                'rtems/rtems-syslog-initialize.c',
    649                 'rtems/rtems-syspoll.c',
    650649                'rtems/rtems-uthread_kevent.c',
    651650                'rtems/rtems-uthread_kqueue.c',
  • freebsd/sys/kern/sys_generic.c

    rc33de69 r08264c8  
    8787#endif /* __rtems__ */
    8888
    89 #ifndef __rtems__
    9089static int      pollout(struct thread *, struct pollfd *, struct pollfd *,
    9190                    u_int);
    9291static int      pollscan(struct thread *, struct pollfd *, u_int);
    9392static int      pollrescan(struct thread *);
    94 #endif /* __rtems__ */
    9593static int      selscan(struct thread *, fd_mask **, fd_mask **, int);
    9694static int      selrescan(struct thread *, fd_mask **, fd_mask **);
     
    11871185}
    11881186
    1189 #ifndef __rtems__
    11901187#ifndef _SYS_SYSPROTO_H_
    11911188struct poll_args {
     
    11951192};
    11961193#endif
     1194#ifndef __rtems__
    11971195int
    11981196poll(td, uap)
     1197#else /* __rtems__ */
     1198static int
     1199rtems_bsd_poll(td, uap)
     1200#endif /* __rtems__ */
    11991201        struct thread *td;
    12001202        struct poll_args *uap;
     
    12081210
    12091211        nfds = uap->nfds;
     1212#ifndef __rtems__
    12101213        if (nfds > maxfilesperproc && nfds > FD_SETSIZE)
     1214#else /* __rtems__ */
     1215        if (nfds > rtems_libio_number_iops)
     1216#endif /* __rtems__ */
    12111217                return (EINVAL);
    12121218        ni = nfds * sizeof(struct pollfd);
     
    12721278        return (error);
    12731279}
     1280#ifdef __rtems__
     1281int
     1282poll(struct pollfd fds[], nfds_t nfds, int timeout)
     1283{
     1284        struct thread *td = rtems_bsd_get_curthread_or_null();
     1285        struct poll_args ua = {
     1286                .fds = &fds[0],
     1287                .nfds = nfds,
     1288                .timeout = timeout
     1289        };
     1290        int error;
     1291
     1292        if (td != NULL) {
     1293                error = rtems_bsd_poll(td, &ua);
     1294        } else {
     1295                error = ENOMEM;
     1296        }
     1297
     1298        if (error == 0) {
     1299                return td->td_retval[0];
     1300        } else {
     1301                rtems_set_errno_and_return_minus_one(error);
     1302        }
     1303}
     1304#endif /* __rtems__ */
    12741305
    12751306static int
     
    12861317
    12871318        n = 0;
     1319#ifndef __rtems__
    12881320        fdp = td->td_proc->p_fd;
     1321#else /* __rtems__ */
     1322        fdp = NULL;
     1323#endif /* __rtems__ */
    12891324        stp = td->td_sel;
    12901325        FILEDESC_SLOCK(fdp);
     
    12961331                if (si != NULL)
    12971332                        continue;
     1333#ifndef __rtems__
    12981334                fp = fdp->fd_ofiles[fd->fd];
     1335#else /* __rtems__ */
     1336                fp = fget_unlocked(fdp, fd->fd);
     1337#endif /* __rtems__ */
    12991338                if (fp == NULL) {
    13001339                        fd->revents = POLLNVAL;
     
    13481387        u_int nfd;
    13491388{
     1389#ifndef __rtems__
    13501390        struct filedesc *fdp = td->td_proc->p_fd;
     1391#else /* __rtems__ */
     1392        struct filedesc *fdp = NULL;
     1393#endif /* __rtems__ */
    13511394        int i;
    13521395        struct file *fp;
     
    13551398        FILEDESC_SLOCK(fdp);
    13561399        for (i = 0; i < nfd; i++, fds++) {
     1400#ifndef __rtems__
    13571401                if (fds->fd >= fdp->fd_nfiles) {
     1402#else /* __rtems__ */
     1403                if (fds->fd >= rtems_libio_number_iops) {
     1404#endif /* __rtems__ */
    13581405                        fds->revents = POLLNVAL;
    13591406                        n++;
     
    13611408                        fds->revents = 0;
    13621409                } else {
     1410#ifndef __rtems__
    13631411                        fp = fdp->fd_ofiles[fds->fd];
     1412#else /* __rtems__ */
     1413                        fp = fget_unlocked(fdp, fds->fd);
     1414#endif /* __rtems__ */
    13641415                        if (fp == NULL) {
    13651416                                fds->revents = POLLNVAL;
     
    13901441}
    13911442
     1443#ifndef __rtems__
    13921444/*
    13931445 * OpenBSD poll system call.
  • freebsd/sys/sys/sysproto.h

    rc33de69 r08264c8  
    683683        char pid_l_[PADL_(pid_t)]; pid_t pid; char pid_r_[PADR_(pid_t)];
    684684};
     685#endif /* __rtems__ */
    685686struct poll_args {
    686687        char fds_l_[PADL_(struct pollfd *)]; struct pollfd * fds; char fds_r_[PADR_(struct pollfd *)];
     
    688689        char timeout_l_[PADL_(int)]; int timeout; char timeout_r_[PADR_(int)];
    689690};
     691#ifndef __rtems__
    690692struct semget_args {
    691693        char key_l_[PADL_(key_t)]; key_t key; char key_r_[PADR_(key_t)];
  • rtemsbsd/include/machine/rtems-bsd-syscall-api.h

    rc33de69 r08264c8  
    4646
    4747#include <sys/cdefs.h>
     48#include <sys/poll.h>
    4849#include <sys/select.h>
    4950#include <sys/socket.h>
     
    7172int     listen(int, int);
    7273
     74int     poll(struct pollfd _pfd[], nfds_t _nfds, int _timeout);
     75
    7376ssize_t recvfrom(int, void *, size_t, int, struct sockaddr * __restrict, socklen_t * __restrict);
    7477
  • testsuite/syscalls01/test_main.c

    rc33de69 r08264c8  
    3232#include <sys/cdefs.h>
    3333#include <sys/types.h>
     34#include <sys/poll.h>
    3435#include <sys/stat.h>
    3536#include <sys/select.h>
     
    4243#include <assert.h>
    4344#include <errno.h>
     45#include <limits.h>
    4446#include <stdbool.h>
    4547#include <stdio.h>
     
    12811283}
    12821284
     1285static void
     1286no_mem_socket_poll(int fd)
     1287{
     1288        struct pollfd pfd;
     1289        int timeout = -1;
     1290        int rv;
     1291
     1292        pfd.fd = fd;
     1293        pfd.events = POLLIN;
     1294        pfd.revents = 0;
     1295
     1296        errno = 0;
     1297        rv = poll(&pfd, 1, timeout);
     1298        assert(rv == -1);
     1299        assert(errno == ENOMEM);
     1300}
     1301
     1302static void
     1303test_socket_poll(void)
     1304{
     1305        rtems_resource_snapshot snapshot;
     1306        struct pollfd pfd;
     1307        int timeout = -1;
     1308        int sd;
     1309        int rv;
     1310
     1311        puts("test socket poll");
     1312
     1313        sd = socket(PF_INET, SOCK_DGRAM, 0);
     1314        assert(sd >= 0);
     1315
     1316        rv = close(sd);
     1317        assert(rv == 0);
     1318
     1319        pfd.fd = sd;
     1320        pfd.events = POLLIN;
     1321        pfd.revents = 0;
     1322
     1323        rv = poll(&pfd, 1, timeout);
     1324        assert(rv == 1);
     1325        assert(pfd.revents == POLLNVAL);
     1326
     1327        rtems_resource_snapshot_take(&snapshot);
     1328
     1329        sd = socket(PF_INET, SOCK_DGRAM, 0);
     1330        assert(sd >= 0);
     1331
     1332        do_no_mem_test(no_mem_socket_poll, sd);
     1333
     1334        pfd.fd = sd;
     1335        pfd.events = POLLIN;
     1336        pfd.revents = 0;
     1337
     1338        errno = 0;
     1339        rv = poll(NULL, UINT_MAX, timeout);
     1340        assert(rv == -1);
     1341        assert(errno == EINVAL);
     1342
     1343        rv = close(sd);
     1344        assert(rv == 0);
     1345
     1346        pfd.fd = sd;
     1347        pfd.events = POLLIN;
     1348        pfd.revents = 0;
     1349
     1350        rv = poll(&pfd, 1, timeout);
     1351        assert(rv == 1);
     1352        assert(pfd.revents == POLLNVAL);
     1353
     1354        assert(rtems_resource_snapshot_check(&snapshot));
     1355}
     1356
    12831357static const char prog_name[] = "prog";
    12841358
     
    14881562        test_socket_recv_and_recvfrom_and_recvmsg();
    14891563        test_socket_select();
     1564        test_socket_poll();
    14901565
    14911566        test_bsd_program();
Note: See TracChangeset for help on using the changeset viewer.