On Thu, Jul 14, 2016 at 9:14 AM, Malith Yapa <[email protected]> wrote:
> On Thu, Jul 14, 2016 at 2:14 AM, Greg KH <[email protected]> wrote:
>> On Wed, Jul 13, 2016 at 10:59:10AM +0530, Malith Yapa wrote:
>>> I think i am.
>>>
>>> int readDword(int addr) {
>>>
>>>     uint16_t reg[1];// will store read registers values
>>>
>>>     int num = modbus_read_registers(ctx, addr, 1, reg);     //16386 = X2
>>>
>>>     usleep(5);
>>>
>>>     if (num != 1) {
>>>         fprintf(stderr, "Failed(%i) to read: %s\n", num,
>>> modbus_strerror(errno));
>>>         modbus_close(ctx);
>>>         modbus_free(ctx);
>>>         sleep(5);
>>>         int wait = 1;
>>>         while(initModbus()) {
>>>             cerr << "Waiting for PLC.. SLEEP[" << wait*20 << "]" << endl;
>>>             sleep(wait*20);
>>>             wait++;
>>>         }
>>>     }
>>>
>>>     return reg[0];
>>> }
>>>
>>> according to modbus documentation, "The modbus_close() function shall
>>> close the connection established with the backend set in the context."
>>>
>>> Even if not. Shouldn't the minor number's go upto 512 (as Johan
>>> pointed out) before giving up?
>>
>> Yes it should.
>>
>>> The system is an Olimex A20-micro,
>>> Linux version 3.4.90+ (gcc version 4.7.1 (Debian 4.7.1-7) )
>>
>> Ugh, 3.4 is a very old, and obsolete kernel version.  Please get support
>> for it from the vendor that is forcing you to use such a thing, as you
>> are already paying for it from them.
>>
>> We can help you out if you can reproduce this on 4.6, have you tried
>> that?
>>
>> thanks,
>>
>> greg k-h
>
> Looks like sunxi only provides a 3.4 kernel. I lack the expertise to
> try to build 4.6 for this board so I'll try reporting it to them.
>
> Thanks,
> Malith

Hope it's ok to reply on the old thread.

I have since compiled 4.8.0_rc1. And just as you guys suggested a part
of problem is solved. The minor number now definitely goes up to 512
before giving no more free serial devices. But it still doesn't reuse
the minors after disconnecting.

In my code I'm calling modbus_close and modbus_free which in turn call
close() and free() on the file descriptor. Shouldn't this make the
minor reusable?

>From what i understand minor numbers are allocated and freed by the
driver. So how does the driver know to release the minor number after
the file descriptor is closed?

Thanks,
Malith
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to