From: Gustavo F. Padovan <padovan@profusion.mobi>
To: ofono@ofono.org
Subject: Re: [PATCH -v3 1/3] Add ofono_modem_reset()
Date: Tue, 23 Nov 2010 15:41:31 -0200 [thread overview]
Message-ID: <20101123174131.GA22502@vigoh> (raw)
In-Reply-To: <4CEB9E1F.4020608@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 4644 bytes --]
Hi Denis,
* Denis Kenzior <denkenz@gmail.com> [2010-11-23 04:57:35 -0600]:
> Hi Gustavo,
>
> On 11/19/2010 03:36 PM, Gustavo F. Padovan wrote:
> > Some modems can screw up everything and then we will need to do a silent
> > reset of the modem. This patch take the modem back to the OFFLINE state.
> > ---
> > include/modem.h | 2 ++
> > src/modem.c | 44 +++++++++++++++++++++++++++++++++++++++++++-
> > 2 files changed, 45 insertions(+), 1 deletions(-)
> >
> > diff --git a/include/modem.h b/include/modem.h
> > index 7b13ee0..a92eb88 100644
> > --- a/include/modem.h
> > +++ b/include/modem.h
> > @@ -46,6 +46,8 @@ int ofono_modem_register(struct ofono_modem *modem);
> > ofono_bool_t ofono_modem_is_registered(struct ofono_modem *modem);
> > void ofono_modem_remove(struct ofono_modem *modem);
> >
> > +void ofono_modem_reset(struct ofono_modem *modem);
> > +
> > void ofono_modem_set_powered(struct ofono_modem *modem, ofono_bool_t powered);
> > ofono_bool_t ofono_modem_get_powered(struct ofono_modem *modem);
> >
> > diff --git a/src/modem.c b/src/modem.c
> > index 6d346c3..e57f8fc 100644
> > --- a/src/modem.c
> > +++ b/src/modem.c
> > @@ -70,6 +70,7 @@ struct ofono_modem {
> > guint interface_update;
> > ofono_bool_t powered;
> > ofono_bool_t powered_pending;
> > + ofono_bool_t reset;
> > guint timeout;
> > ofono_bool_t online;
> > GHashTable *properties;
> > @@ -433,6 +434,8 @@ static void sim_state_watch(enum ofono_sim_state new_state, void *user)
> > if (modem->driver->set_online == NULL)
> > modem_change_state(modem, MODEM_STATE_ONLINE);
> >
> > + modem->reset = FALSE;
> > +
> > break;
> > }
> > }
> > @@ -784,7 +787,8 @@ void ofono_modem_set_powered(struct ofono_modem *modem, ofono_bool_t powered)
> > return;
> > }
> >
> > - ofono_dbus_signal_property_changed(conn, modem->path,
> > + if (!modem->reset)
> > + ofono_dbus_signal_property_changed(conn, modem->path,
> > OFONO_MODEM_INTERFACE,
> > "Powered", DBUS_TYPE_BOOLEAN,
> > &dbus_powered);
> > @@ -799,6 +803,17 @@ void ofono_modem_set_powered(struct ofono_modem *modem, ofono_bool_t powered)
> > } else
> > modem_change_state(modem, MODEM_STATE_POWER_OFF);
> >
> > + if (modem->reset && !powering_down) {
> > + if (!modem->powered) {
> > + int err = set_powered(modem, TRUE);
> > +
> > + if (err == -EINPROGRESS)
> > + return;
> > +
> > + modem_change_state(modem, MODEM_STATE_PRE_SIM);
> > + }
> > + }
> > +
> > out:
> > if (powering_down && powered == FALSE) {
> > modems_remaining -= 1;
> > @@ -806,6 +821,7 @@ out:
> > if (modems_remaining == 0)
> > __ofono_exit();
> > }
> > +
> > }
> >
> > ofono_bool_t ofono_modem_get_powered(struct ofono_modem *modem)
> > @@ -1565,6 +1581,32 @@ void ofono_modem_remove(struct ofono_modem *modem)
> > g_free(modem);
> > }
> >
> > +static gboolean __reset_modem(void *data)
>
> There's no need to use '__' prefix for static functions. That prefix is
> reserved for private API functions declared in ofono.h
Ok.
>
> > +{
> > + struct ofono_modem *modem = data;
> > + int err;
> > +
> > + modem->reset = TRUE;
> > +
> > + err = set_powered(modem, FALSE);
> > + if (err == -EINPROGRESS)
> > + return FALSE;
>
> So we really don't need to power down the modem for the silent reset.
> Simply assume that the modem driver has performed the necessary steps of
> cleaning up the modem to a 'powered off state'. We can also assume that
> silent resets only happen when the modem is at least powered.
Ok.
>
> One thing I'm not seeing in this patch is the functionality for getting
> the modem back into online state after a silent reset.
>
> > +
> > + err = set_powered(modem, TRUE);
> > + if (err == -EINPROGRESS)
> > + return FALSE;
> > +
> > + modem_change_state(modem, MODEM_STATE_PRE_SIM);
> > + return FALSE;
> > +}
> > +
> > +void ofono_modem_reset(struct ofono_modem *modem)
> > +{
> > + DBG("%p", modem);
> > +
> > + g_idle_add(__reset_modem, modem);
>
> In general I don't like using g_idle_add in the core. What is the
> purpose of this one? If you really have to do it, please track the
> gsource and make sure to remove it when the modem is removed.
I was facing a segfault due to caling driver->disable here. It destroys
the data->chat in phonesim, but we need it there because we are in the
middle of callback. I'll ckeck if with the new changes you proposed we
will still need this.
--
Gustavo F. Padovan
http://profusion.mobi
prev parent reply other threads:[~2010-11-23 17:41 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-19 21:36 [PATCH -v3 1/3] Add ofono_modem_reset() Gustavo F. Padovan
2010-11-19 21:36 ` [PATCH -v3 2/3] phonesim: Add modem reset trigger Gustavo F. Padovan
2010-11-19 21:36 ` [PATCH -v3 3/3] modem: add support to restore state when resetting the modem Gustavo F. Padovan
2010-11-23 11:04 ` Denis Kenzior
2010-11-23 17:50 ` Gustavo F. Padovan
2010-11-23 21:33 ` Gustavo F. Padovan
2010-11-23 22:07 ` Denis Kenzior
2010-11-23 10:59 ` [PATCH -v3 2/3] phonesim: Add modem reset trigger Denis Kenzior
2010-11-23 20:01 ` Gustavo F. Padovan
2010-11-23 21:52 ` Denis Kenzior
2010-11-23 10:57 ` [PATCH -v3 1/3] Add ofono_modem_reset() Denis Kenzior
2010-11-23 17:41 ` Gustavo F. Padovan [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20101123174131.GA22502@vigoh \
--to=padovan@profusion.mobi \
--cc=ofono@ofono.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox