diff --git a/ChangeLog b/ChangeLog index 71e236906a4..c00de77a9a5 100755 --- a/ChangeLog +++ b/ChangeLog @@ -10882,9 +10882,11 @@ * networking: Correct return value from psock_tcp_accept(). From SaeHie Park (2015-08-25). * drivers/mtd/st25fl1.c: Add a driver for ST25L1*K QuadSPI parts - (2015-08-15). + (2015-08-25). * include/nuttx/spi/qspi.h: Develop a new interface for QSPI, at least the way that QSPI is implemented on the SAMV71. Originally planned to use the SPI interface, but it is just now compatible - with the SAMV71 QSPI hardware (2015-08-15). + with the SAMV71 QSPI hardware (2015-08-25). + * drivers/rwbuffer.c: Fix some logic errors. From Dmitry Nikolaev + via Juha Niskanen (2015-08-26). diff --git a/arch b/arch index 463d5c9af87..5336c646386 160000 --- a/arch +++ b/arch @@ -1 +1 @@ -Subproject commit 463d5c9af87cb0e749f7400ae1a1dfe0d56517fc +Subproject commit 5336c646386607424e3426fb488d73241abb5f08 diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c index 5e2a12d1e38..83aa9836579 100644 --- a/drivers/net/loopback.c +++ b/drivers/net/loopback.c @@ -49,6 +49,7 @@ #include #include +#include #include #include @@ -532,13 +533,16 @@ int localhost_initialize(void) net_ipv4addr_copy(priv->lo_dev.d_draddr, g_lo_ipv4addr); net_ipv4addr_copy(priv->lo_dev.d_netmask, g_lo_ipv4mask); #endif + #ifdef CONFIG_NET_IPv6 net_ipv6addr_copy(priv->lo_dev.d_ipv6addr, g_lo_ipv6addr); net_ipv6addr_copy(priv->lo_dev.d_ipv6draddr, g_lo_ipv6addr); net_ipv6addr_copy(priv->lo_dev.d_ipv6netmask, g_ipv6_alloneaddr); #endif + /* Put the network in the UP state */ + priv->lo_dev.d_flags = IFF_UP; return lo_ifup(&priv->lo_dev); } diff --git a/drivers/rwbuffer.c b/drivers/rwbuffer.c index fd2f73c77ae..9c443df7b59 100644 --- a/drivers/rwbuffer.c +++ b/drivers/rwbuffer.c @@ -96,7 +96,7 @@ static void rwb_semtake(sem_t *sem) while (sem_wait(sem) != 0) { - /* The only case that an error should occr here is if + /* The only case that an error should occur here is if * the wait was awakened by a signal. */ @@ -117,8 +117,8 @@ static void rwb_semtake(sem_t *sem) static inline bool rwb_overlap(off_t blockstart1, size_t nblocks1, off_t blockstart2, size_t nblocks2) { - off_t blockend1 = blockstart1 + nblocks1; - off_t blockend2 = blockstart2 + nblocks2; + off_t blockend1 = blockstart1 + nblocks1 - 1; + off_t blockend2 = blockstart2 + nblocks2 - 1; /* If the buffer 1 is wholly outside of buffer 2, return false */ @@ -257,7 +257,7 @@ static ssize_t rwb_writebuffer(FAR struct rwbuffer_s *rwb, /* Flush the write buffer */ - ret = rwb->wrflush(rwb, rwb->wrbuffer, rwb->wrblockstart, rwb->wrnblocks); + ret = rwb->wrflush(rwb->dev, rwb->wrbuffer, rwb->wrblockstart, rwb->wrnblocks); if (ret < 0) { fdbg("ERROR: Error writing multiple from cache: %d\n", -ret); @@ -842,7 +842,7 @@ int rwb_read(FAR struct rwbuffer_s *rwb, off_t startblock, uint32_t nblocks, * the user buffer. */ - ret = rwb->rhreload(rwb->dev, startblock, nblocks, rdbuffer); + ret = rwb->rhreload(rwb->dev, rdbuffer, startblock, nblocks); } #endif diff --git a/fs/vfs/fs_poll.c b/fs/vfs/fs_poll.c index 10852e7d910..f13148288c8 100644 --- a/fs/vfs/fs_poll.c +++ b/fs/vfs/fs_poll.c @@ -49,6 +49,7 @@ #include #include #include +#include #include @@ -326,8 +327,6 @@ int file_poll(int fd, FAR struct pollfd *fds, bool setup) int poll(FAR struct pollfd *fds, nfds_t nfds, int timeout) { - struct timespec abstime; - irqstate_t flags; sem_t sem; int count = 0; int ret; diff --git a/net/netdev/netdev_register.c b/net/netdev/netdev_register.c index 362e5a44a25..de5fa6c8f43 100644 --- a/net/netdev/netdev_register.c +++ b/net/netdev/netdev_register.c @@ -257,16 +257,35 @@ int netdev_register(FAR struct net_driver_s *dev, enum net_lltype_e lltype) dev->d_conncb = NULL; dev->d_devcb = NULL; - /* Get the next available device number and sssign a device name to + /* Get the next available device number and assign a device name to * the interface */ save = net_lock(); + #ifdef CONFIG_NET_MULTILINK - devnum = find_devnum(devfmt); +# ifdef CONFIG_NET_LOOPBACK + /* The local loopback device is a special case: There can be only one + * local loopback device so it is unnumbered. + */ + + if (lltype == NET_LL_LOOPBACK) + { + devnum = 0; + } + else +# endif + { + devnum = find_devnum(devfmt); + } #else + /* There is only a single link type. Finding the next network device + * number is simple. + */ + devnum = g_next_devnum++; #endif + #ifdef CONFIG_NET_USER_DEVFMT if (*dev->d_ifname) { diff --git a/net/tcp/tcp_appsend.c b/net/tcp/tcp_appsend.c index 4f110f848a9..ab799d975a9 100644 --- a/net/tcp/tcp_appsend.c +++ b/net/tcp/tcp_appsend.c @@ -172,7 +172,7 @@ void tcp_appsend(FAR struct net_driver_s *dev, FAR struct tcp_conn_s *conn, else { #ifdef CONFIG_NET_TCP_WRITE_BUFFERS - DEBUGASSERT(dev->d_sndlen >= 0 && dev->d_sndlen <= conn->mss); + DEBUGASSERT(dev->d_sndlen <= conn->mss); #else /* If d_sndlen > 0, the application has data to be sent. */